0

「form_mods」と呼ばれるすべてのフォーム変更を行うモジュールを作成しました。ほとんどの状況で機能しますが、分類ページでは機能しません。

「taxonomy_overview_vocabularies」のフォーム ID をターゲットにしています。「webmaster」と「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 の間違いです。for each ステートメントで配列メンバーを変更する場合は、それらを参照渡しする必要があります。そうしない 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 に答える