【发布时间】:2010-10-17 23:40:24
【问题描述】:
从内容类型创建/编辑表单页面中删除 cck 字段显示的代码是什么?
【问题讨论】:
标签: drupal
从内容类型创建/编辑表单页面中删除 cck 字段显示的代码是什么?
【问题讨论】:
标签: drupal
将“#access”字段设置为“0”或“FALSE”。
例如,这会从站点信息页面中删除“站点任务”字段:
function example_form_system_site_information_settings_alter(&$form, &$form_state){
$form['site_mission']['#access'] = 0;
}
(其中“example”是自定义模块的名称)
另一个例子,这次它从添加/编辑页面表单中删除了 Sticky 选项:
function example_form_page_node_form_alter(&$form, &$form_state){
$form['options']['sticky']['#access'] = 0;
}
您可能已经知道这一点,但您需要知道要更改的表单的 ID(和结构)。
大多数时候,hook_form_THEID_alter(&$form, &$form_state) 是修改特定表单的好地方,但是在调用此钩子后会创建一些字段,因此在这种情况下,您需要使用通用的 hook_form_alter(&$form, $form_state, $form_id) 来代替。
如果您不知道结构甚至表单 id(并且不想安装 Devel module),您可以使用此 snipplet,以便在查看要修改的页面时,它将在页面顶部显示表单 ID 及其结构。
function example_form_alter(&$form, $form_state, $form_id){
echo "<h1>Form ID: $form_id</h1>";
echo "Form Structure: <pre>".print_r($form, true)."</pre>";
}
(其中“example”是您的自定义模块的名称)。
顺便说一句,如果您只是想阻止普通用户编辑仅限管理员的字段,您可以简单地使用 Field Permissions module 代替。
【讨论】:
hook_form_alter() 而不是 hook_form_THEID_alter 的提示。这是我遇到的一个问题,只是想不通。
检查这个sn-p http://drupal.org/node/336355#comment-1192845 并使用之前的cmets 中描述的['#access'] = FALSE
【讨论】: