hook_theme()影响节点的显示顺序

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模块。它仍在开发中(,我还没有尝试过),但它允许您选择个别字段的内容权限。这可以防止您的权限屏幕变得混乱,并且可以防止所有新域默认为无法访问。

+0

哇,我不知道该字段权限模块。听起来像“编辑自己的字段权限”的一些好处似乎非常值得。 – theunraveler 2009-11-03 18:45:48

+0

使用您建议的字段权限模块,它可以完美实现。 CCK字段的默认值也适用。我真的需要默认值工作。我试过了Content Permissions模块,但是有太多复选框需要检查(系统中有近20种内容类型和8种角色)非常感谢! – user201563 2009-11-04 01:34:23

我想你可以使用与CCK捆绑在一起的Content Permissions模块来设置字段级权限。启用该模块后,所有字段都将显示在“权限”区域中,并且您可以拒绝匿名用户的权限。我认为这将是一个更简单的方法来实现这一点。

+0

我尝试过的内容权限模块,但我放弃了检查数百虽然复选框。谢谢你的答案。 – 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