2011-02-12 68 views
2

默认情况下,在Drupal 7中,字段说明出现在字段下方。无论如何要将它们移到场地上方吗?Drupal 7 - 在字段上方放置字段说明

在Drupal 6中,您可以将以下代码粘贴到template.php中以移动描述。但是,代码不会在Drupal 7工作:

/** 
* Place CCK Options above field . 
*/ 

function ThemeNAME_form_element($element, $value) { 
    $output = ' <div class="form-item"'; 
    if(!empty($element['#id'])) { 
    $output .= ' id="'. $element['#id'] .'-wrapper"'; 
    } 
    $output .= ">\n"; 
    $required = !empty($element['#required']) ? '<span class="form-required" title="'.t('This field is required.').'">*</span>' : ''; 

    if (!empty($element['#title'])) { 
    $title = $element['#title']; 
    if (!empty($element['#id'])) { 
     $output .= ' <label for="'. $element['#id'] .'">'. t('!title: !required', array('!title' => filter_xss_admin($title), '!required' => $required)) ."</label> \n"; 
    } 
    else { 
     $output .= ' <label>'. t('!title: !required', array('!title' => filter_xss_admin($title), '!required' => $required)) ."</label>\n"; 
    } 
    } 

    if (!empty($element['#description'])) { 
    $output .= ' <div class="description">' . $element['#description'] ."</div> \n"; 
    } 

    $output .= " $value\n"; 
    $output .= " </div> \n"; 
    return $output; 
} 

回答

6

我有同样的问题,并通过将其添加到我的主题的template.php文件来实现这一点。

/** 
* Replacement for theme_webform_element() to enable descriptions to come BEFORE the field to be filled out. 
*/ 
function danland_webform_element($variables) { 
    $element = $variables['element']; 
    $value = $variables['element']['#children']; 

    $wrapper_classes = array(
    'form-item', 
); 
    $output = '<div class="' . implode(' ', $wrapper_classes) . '" id="' . $element['#id'] . '-wrapper">' . "\n"; 
    $required = !empty($element['#required']) ? '<span class="form-required" title="' . t('This field is required.') . '">*</span>' : ''; 

    if (!empty($element['#title'])) { 
    $title = $element['#title']; 
    $output .= ' <label for="' . $element['#id'] . '">' . t('!title: !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n"; 
    } 

    if (!empty($element['#description'])) { 
    $output .= ' <div class="description">' . $element['#description'] . "</div>\n"; 
    } 

    $output .= '<div id="' . $element['#id'] . '">' . $value . '</div>' . "\n"; 

    $output .= "</div>\n"; 

    return $output; 
} 

不要忘记清除缓存!

+1

这个效果很好,除了函数名应该是_form_element($ variables)(而不是webform_element($ variables)) – 2012-04-12 11:03:15

+0

theme_form_element D7 – anthonygore 2015-09-24 06:46:20

0

Rumblewand的答案,有一个条件可以防止收音机/复选框也被抛入输入上方的div。 (可能是更有效的方式来做到这一点。)

function theme_form_element($variables) { 

     $element = $variables['element']; 
     $value = $variables['element']['#children']; 

     $wrapper_classes = array(
     'form-item' 
    ); 

     $output = '<div class="' . implode(' ', $wrapper_classes) . '" id="' . $element['#id'] . '-wrapper">' . "\n"; 

     $required = !empty($element['#required']) ? '<span class="form-required" title="' . t('This field is required.') . '">*</span>' : ''; 

     //Separate treatment for radio buttons & checkboxes 
     if (($element['#type'] == 'radio') || ($element['#type'] == 'checkbox')) { 
      //vs outputting input in its own div separate from label 
      $output .= $value . "\n"; 

      if (!empty($element['#description'])) { 
      $output .= '<span class="description">' . $element['#description'] . "</span>\n"; 
      } 

      if (!empty($element['#title'])) { 
      $title = $element['#title']; 
      $output .= '<label class="option" for="' . $element['#id'] . '">' . t('!title !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n"; 
      } 

     } else { 

      if (!empty($element['#title'])) { 
      $title = $element['#title']; 
      $output .= ' <label for="' . $element['#id'] . '">' . t('!title !required', array('!title' => filter_xss_admin($title), '!required' => $required)) . "</label>\n"; 
      } 

      if (!empty($element['#description'])) { 
      $output .= '<div class="description">' . $element['#description'] . "</div>\n"; 
      } 

      $output .= '<div id="' . $element['#id'] . '">' . $value . '</div>' . "\n"; 

     } 

     $output .= "</div>\n"; 

     return $output; 

    }