【问题标题】:Drupal 7 - Place field descriptions above the fieldDrupal 7 - 将字段描述放在字段上方
【发布时间】:2011-02-12 16:14:28
【问题描述】:

默认情况下,在 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;
}

【问题讨论】:

    标签: drupal drupal-7 drupal-theming


    【解决方案1】:

    我遇到了同样的问题,并通过将其添加到我的主题的 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;
    }
    

    别忘了清除缓存!

    【讨论】:

    • 这很好用,除了函数名应该是 _form_element ($variables) (而不是 webform_element($variables))
    • D7 中的theme_form_element
    【解决方案2】:

    https://drupal.org/project/label_help 也应该可以解决问题。希望有帮助

    【讨论】:

    • 请记住,在撰写本文时,标签帮助不是 currently compatible 与 Webform。
    • 虽然这个答案已经有一年多了,而且这个链接很有帮助,但是如果你在这个网站上发布答案的基本部分会更好,或者你的帖子有被删除的风险See the FAQ where it mentions answers that are 'barely more than a link'.你如果您愿意,仍然可以包含该链接,但仅作为“参考”。答案应该是独立的,不需要链接。
    【解决方案3】:

    您可以对要更改的特定字段进行主题覆盖,也可以对所有字段进行更一般的覆盖。阅读:

    http://api.drupal.org/api/drupal/modules--field--field.module/function/theme_field/7

    您完全不必为了执行此操作而使用 template.php。

    【讨论】:

    • 我不认为这是有效的。 theme_field 只影响节点的视图,而不影响用于编辑或创建节点的表单。我必须仔细检查,但我很确定。
    【解决方案4】:

    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;
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 1970-01-01
      相关资源
      最近更新 更多