0

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

我的目标是“taxonomy_overview_vocabularies”的表单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']);
                }
            }
        }
    }
}
4

2 回答 2

0

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

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

    }
于 2011-01-05T23:02:57.047 回答
0

除了 Amjad 的回答之外,如果您不喜欢使用参考资料,我会建议另一种选择:

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

通过这种方式,您可以避免使用引用以及它们可能导致的潜在问题。

另请注意,我删除了if没有用的语句(PHP 可以弄清楚)。

array_map也可以考虑一个 。

于 2018-04-05T15:44:09.887 回答