Drupal变量 - 不能正确打印路径

时间:2010-07-13 11:56:48

标签: php drupal

我正在尝试为编辑按钮创建一个变量。在template.php中,我已经把这段代码

function phptemplate_preprocess_node(&$vars) {

if ($user->uid == $node->uid || in_array('moderator', array_values($user->roles))|| $user->uid == 1){
     $vars['edit'] =  l('Edit', 'node/' . $node->nid . '/edit');          
   }
}

然后我在tpl文件中打印$ edit。它打印一个编辑链接,但网址如下:“node / 2%Fedit”。我做错了什么?

3 个答案:

答案 0 :(得分:4)

正如abhaga指出的那样,$ node变量未被声明。在预处理器中,它们被设置为$ vars ['node']

在您的情况下,代码将是:

function phptemplate_preprocess_node(&$vars) {

if ($user->uid == $node->uid || in_array('moderator', array_values($user->roles))|| $user->uid == 1) {
     $node = $vars['node'];
     $vars['edit'] =  l('Edit', 'node/' . $node->nid . '/edit');          
   }
}

答案 1 :(得分:1)

node/2%Fedit还是node/%2Fedit%2F /编码为HTML实体。由于某种原因,您的$node->nid似乎是空的。你有$node吗?

答案 2 :(得分:1)

如果您的代码仅用于向创作该节点的人显示“编辑”按钮,则可以使用访问权限更轻松地执行此操作。

关闭角色的管理节点,并为角色分配更细粒度的权限'编辑任何''编辑自己'等权限。这将实现您想要做的事情而无需编码。

这样,主持人角色中的某个人只能编辑他们创作的节点,您可以跨内容类型指定它。

如果是移动$ tabs / $ tabs2项的问题,我相信它们存在主题功能。