【发布时间】:2010-12-16 13:32:51
【问题描述】:
我在 drupal6 中有一个特定的内容类型。我想实现一个钩子,它从添加表单中隐藏该内容类型的正文字段,而不是从编辑表单中。我该怎么做?
【问题讨论】:
我在 drupal6 中有一个特定的内容类型。我想实现一个钩子,它从添加表单中隐藏该内容类型的正文字段,而不是从编辑表单中。我该怎么做?
【问题讨论】:
您可以使用 hook_form_alter。您可以通过编程方式更改表单 api 构建的内容。这为您提供了完整的 $form 数组,您可以简单地 unset($form['the_field_you_dont_want']);。
但摆脱正文字段的更简单方法是在编辑内容类型中有一个标记为“正文字段标签:”的字段,只需将其留空,正文字段将被省略。
【讨论】:
unset 似乎也破坏了该值,#access 属性也是如此。
我只是用它来隐藏一个字段(在这种情况下,如果它是使用 URL 预设的参考:
$form['field_reference']['#prefix'] = "<div class='hide'>";
$form['field_reference']['#suffix'] = "</div>";
【讨论】:
#access=0 不应该破坏它。也许是 Drupal 8 的功能请求? :)
在https://drupal.stackexchange.com/questions/11237/hide-field-in-node-add-page 找到的解决方案对我来说非常有用。这里我重复一下moon.watcher的解决方案:
function test_remove_filed_form_alter(&$form, &$form_state) {
if (arg(0) == 'node' && arg(1) == 'add') {
$form['field_test']['#access'] = 0;
}
}
使用 unset() 的缺点是它会完全删除该字段,并且您不能再进一步,例如在节点 presave 上。就我而言,我只想在第一时间从表单中删除该字段,但我想稍后在保存节点之前填充它。出于这个原因,上面链接上的解决方案对我来说是完美的。
【讨论】:
您是否在模块中实现了内容类型(使用 hook_node_info)?如果是这样,请将 has_body 属性设置为 false。
【讨论】: