hook_theme()影响节点的显示顺序
我有一个包含许多CCK字段的节点。我想隐藏来自匿名用户的字段。我发现从http://www.lullabot.com/articles/modifying-forms-5-and-6大致有两种方法。首先,我的代码试图theme_theme()以下hook_theme()影响节点的显示顺序
function ssaa_theme1(&$existing, $type, $theme, $path) {
return array(
'volunteer_node_form' => array(
'arguments' => array('form' => null),
),
);
}
function ssaa_volunteer_node_form($form) {
$out = '';
if (user_is_anonymous()) {
unset($form['field_active']);
}
$out .= drupal_render($form);
return $out;
}
这个简单的代码工作以及我的预期,但生产奇怪的结果了。保存/预览按钮出现在窗体的顶部,我无法将它们移动到底部。起初,我怀疑drupal_render()函数,但它没有对订单做任何事情。当ssaa_volunteer_node_form()函数为空时,它会产生相同的结果。
所以我尝试了第二个选项,它使用了hook_form_alter()并且成功了。但我仍想弄清楚为什么第一种方法无法正常工作。我认为这是更容易和轻松的方式来做我想做的事情。
任何想法?
如果你只想拒绝这一个字段给用户,它是有道理的form_alter它。否则,我也建议你使用内容权限。它可以让您无需使用文本编辑器即可切换所有字段的设置。
CCK现场输入表格不接受hook_form_alter()
很好。可以说,它们在周期的后期插入到节点编辑表单中。
This example演示如何禁用CCK表单元素,它可以适应您的需要。
由于您有非常特殊的需求,您可能需要查看新的Field Permissions模块。它仍在开发中(,我还没有尝试过),但它允许您选择个别字段的内容权限。这可以防止您的权限屏幕变得混乱,并且可以防止所有新域默认为无法访问。
我想你可以使用与CCK捆绑在一起的Content Permissions模块来设置字段级权限。启用该模块后,所有字段都将显示在“权限”区域中,并且您可以拒绝匿名用户的权限。我认为这将是一个更简单的方法来实现这一点。
我尝试过的内容权限模块,但我放弃了检查数百虽然复选框。谢谢你的答案。 – user201563 2009-11-04 01:36:57
最近在Drupal 6中遇到同样的问题,你的问题是有效的。
当我显示$形式的对象(从的template.php)使用Devel的DSM()函数,我发现的按钮被以某种方式示出的一个0.0111重量,浮子。
的hook_theme(),然后hook_form()在的template.php似乎行为是错误的。 使用hook_form我没有改变$ form对象,并且返回drupal_render($ form)保存/预览按钮位于顶部。
对于任何需要使用这些钩子的人,还必须创建一个form_alter设置按钮的权重。这抵消了错误,并再次让你的按钮到达底部。
$form['buttons']['#weight'] = 100;
注:我不能设置权重,我hook_form()代码,它必须是在form_alter
哇,我不知道该字段权限模块。听起来像“编辑自己的字段权限”的一些好处似乎非常值得。 – theunraveler 2009-11-03 18:45:48
使用您建议的字段权限模块,它可以完美实现。 CCK字段的默认值也适用。我真的需要默认值工作。我试过了Content Permissions模块,但是有太多复选框需要检查(系统中有近20种内容类型和8种角色)非常感谢! – user201563 2009-11-04 01:34:23