【问题标题】:Better way for theming node_form主题化 node_form 的更好方法
【发布时间】:2012-08-04 14:59:23
【问题描述】:

我有一个模块,我在其中定义了内容类型。假设我只有 titlebody 字段。

当节点表单呈现时,它具有标准的title (textfield)body (textarea)

我想将这两个字段包装成fieldset

这就是我实现这一目标的方法,但我不认为这是最好的方法。

/**
 * Implements hook_form().
 */
function hook_form($node, $form_state) {
  return node_content_form($node, $form_state);
}

/**
 * Implements hook_form_FORM_ID_alter().
 */
function hook_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'content_type_name_node_form') {
    $form['info'] = array(
      '#type' => 'fieldset',
      '#title' => t('Describe your content')
    );

    $form['info']['title'] = $form['title'];
    unset($form['title']);

    $form['info']['body'] = $form['body'];
    unset($form['body']);
  }
}

关于如何使它变得更好的任何建议?

更新

我想到的另一个变体。基本一样,只是改进了一点。

/**
 * Implements hook_form_FORM_ID_alter().
 */
function hook_form_node_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == 'content_type_name_node_form') {
    $groups = array(
      'info' => array(
        'title' => t('Describe your content'),
        'fields' => array('title', 'body')
      )
    );

    foreach ($groups as $key => $group) {
      $form[$key] = array(
        '#type' => 'fieldset',
        '#title' => $group['title']
      );
      foreach ($group['fields'] as $field) {
        $form[$key][$field] = $form[$field];
        unset($form[$field]);
      }
    }
  }
}

【问题讨论】:

    标签: drupal drupal-7 drupal-theming


    【解决方案1】:

    我必须同意 David Fells 的观点——我认为你的做法没有问题。

    但只是为您提供一种在字段集中设置标题和正文字段的非编程方式:您可以查看Field Group module

    字段组,顾名思义,将字段组合在一起。全部 可野战实体将有可能添加要包装的组 他们的领域在一起。 Fieldgroup 带有默认的 HTML 包装器 像垂直选项卡、水平选项卡、手风琴、字段集或 div 包装器

    老实说,如果您只想为您的标题和正文创建一个字段集,这可能有点矫枉过正,但如果您对字段分组和主题有其他类似的要求,那么让 UI 来完成它可能会很有用你。

    【讨论】:

    • Fieldgroup 很棒。我同意这里有点矫枉过正,但它肯定会完成这项工作。
    • 真的不得不同意。一旦获得大型内容类型,就可以将这些字段分组到垂直选项卡和手风琴组中。
    【解决方案2】:

    你正在做的正是你应该做的,弗拉德。这就是 API 的使用方式,实际上没有其他方法可以通过代码来实现。

    您也可以使用面板更改布局,尽管我自己没有做过,也无法解释这个过程,我也不能肯定地说它会完全按照您在此处所做的。使用自定义模块可能是最直接的途径。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-22
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多