【问题标题】:Drupal hook_form_alter for Taxonomy admin分类管理员的 Drupal hook_form_alter
【发布时间】:2011-01-05 22:14:26
【问题描述】:

我创建了一个名为“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']);
                }
            }
        }
    }
}

【问题讨论】:

    标签: drupal taxonomy hook-form-alter


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      另请注意,我删除了if 语句,它没有用(PHP 可以解决)。

      array_map 也可以考虑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多