【问题标题】:Drupal 7 add headings to each grouped section in my content type?Drupal 7 为我的内容类型中的每个分组部分添加标题?
【发布时间】:2025-12-07 01:55:02
【问题描述】:

我创建了一个内容类型,它有大约 5 个组,它们都是垂直选项卡。

由于某些原因,字段组标签不适用于垂直选项卡。 <h2> 标签始终为:<h2 class="element-invisible">Vertical Tabs</h2>。无论manage fields 中设置了什么,标题始终为Vertical Tabs,并且它始终具有element-invisible

我注意到在一些使用垂直标签的主题中完全相同。

我还注意到,这些主题在每个垂直选项卡上方都有一个额外的标题标签,用于显示该组的标题。 (adaptivetheme) 就是一个很好的例子。

无论如何,对于实际的问题....

如何为我的内容类型中的每个分组部分(垂直选项卡)添加标题?

注意:这是用于添加内容的实际表单,而不是显示 创建的内容。

非常感谢任何帮助。

【问题讨论】:

  • 查看drupal.org/node/17565,了解如何按内容类型对节点进行主题化。
  • 可以肯定的是,您想要的是为每个组添加另一个标题(除了不可见的标题之外),还是要使不可见的标题可见?如果是第二部分,我同意@nmc 答案和模板文件。
  • 谢谢@justinelejeune,但是如何为每个组添加标题?我没有看到一个选项......只是用户添加内容的字段。

标签: drupal-7 drupal-fields drupal-content-types


【解决方案1】:

使用Drupal 7 content theming 将标题添加到您的内容类型。例如,如果您的内容类型名为 mycontent,则在您的主题文件夹中创建以下脚本:

{theme path}/page--node--mycontent.tpl.php

要预处理内容类型,请使用以下函数:

function mycontent_preprocess_page(&$vars) {
    if (isset($vars['node']->type)) { 
        $vars['theme_hook_suggestions'][] = 'page__' . $vars['node']->type;
    }
}

有关 template_preprocess_page 功能的更多信息,请访问here

【讨论】:

  • 您好,感谢您的回复,但这是用于添加内容的实际表单,而不是所创建内容的显示。还有其他想法吗?
【解决方案2】:

您可以在主题的 template.php 或自定义模块中自定义您的内容类型表单。这记录在here。例如,如果您的主题 MYMODULE 中有一个使用自定义内容类型 article 的自定义模块,那么您可以像这样自定义:

<?php
/**
* Implements hook_theme().
*/
function MYMODULE_theme($existing, $type, $theme, $path) {
  return array(
    'article_node_form' => array(
      'render element' => 'form',
      'template' => 'article-node-form',
      // this will set to module/theme path by default:
      'path' => drupal_get_path('module', 'MYMODULE'),
    ),
  );
}
?>

输出自定义数据:

<?php
/**
* Preprocessor for theme('article_node_form').
*/
function template_preprocess_article_node_form(&$variables) {
  // nodeformcols is an alternative for this solution.
  if (!module_exists('nodeformcols')) {
    $variables['sidebar'] = array();   // Put taxonomy fields in sidebar.
    $variables['sidebar'][] = $variables['form']['field_tags'];
    hide($variables['form']['field_tags']);
    // Extract the form buttons, and put them in independent variable.
    $variables['buttons'] = $variables['form']['actions'];
    hide($variables['form']['actions']);
  }
}
?>

【讨论】:

    【解决方案3】:

    这个问题的其他答案都在正确的轨道上。负责垂直制表符标题的代码是includes/form.inc 文件中的theme_vertical_tabs 函数。

    如果你有自己的主题,你可以在你的主题的 template.php 文件中复制和修改这个函数来覆盖它:

    function YOUR_THEME_NAME_vertical_tabs($variables) {
      $element = $variables['element'];
    
      // Add required JavaScript and Stylesheet.
      drupal_add_library('system', 'drupal.vertical-tabs');
    
      // Following line changed to use title set in field settings and remove class="element-invisible
      $output = '<h2>' . t($element['#title']) . '</h2>';  
      $output .= '<div class="vertical-tabs-panes">' . $element['#children'] . '</div>';
    
      return $output;
    }
    

    如果您希望在内容编辑屏幕中显示垂直选项卡标题并且您设置了管理主题,则需要对管理主题进行上述修改。

    【讨论】: