分类管理员的Drupal hook_form_alter

时间:2011-01-05 22:14:27

标签: drupal taxonomy hook-form-alter

我创建了一个模块来完成我所有的表单更改,称为“form_mods”。它适用于大多数情况,但不适用于Taxonomy页面。

我的目标是“taxonomy_overview_vocabularyies”的表单ID。我正试图隐藏“网站管理员”和“dj”角色的“编辑词汇”链接。

我的代码正确地取消了$ form数组,但是Drupal仍然显示“编辑词汇表”链接。

function form_mods_form_alter($form, $form_state, $form_id) {

    if($form_id == 'taxonomy_overview_vocabularies'){

        global $user;
        $hide=0;
        $hideArray = array('webmaster', 'dj'); 
        foreach($user->roles AS $key => $value){
            if(in_array($value, $hideArray)){
                $hide++;
            }
        }

        if($hide){
            foreach($form AS $vocab){
                //print_r($vocab);
                if(isset($vocab['edit']['#value'])){
                    unset($vocab['edit']['#value']);
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

非常小的PHP错误, 当您想要为每个语句更改数组成员时,您必须通过引用& foreach($form AS &$vocab)传递它们,否则$ vocab将只是数组的副本

foreach($form AS &$vocab){
        //print_r($vocab);
        if(isset($vocab['edit']['#value'])){
            unset($vocab['edit']['#value']);
        }

    }

答案 1 :(得分:0)

除了Amjad的回答,如果你不喜欢使用引用,我会建议另一种选择:

foreach ($form as $key => $vocab) {
    unset($form[$key]['edit']['#value']);
}

这样您就可以避免使用引用,以及它们可能导致的潜在问题。

另请注意,我删除了if语句,这是没用的(PHP可以解决这个问题)。

也可以考虑array_map