Drupal hook_form_alter для администратора таксономии

Я создал модуль "form_mods" для изменения всех моих форм. Это работает для большинства ситуаций, но не для страницы таксономии.

Я нацелен на идентификатор формы "taxonomy_overview_vocabularies". Я пытаюсь скрыть ссылку «редактировать словарь» для ролей «вебмастер» и «диджей».

Мой код правильно сбрасывает массив $ 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']);
                }
            }
        }
    }
}

person EricP    schedule 05.01.2011    source источник


Ответы (2)


Очень небольшая ошибка PHP: когда вы хотите изменить элементы массива в a для каждого оператора, вы должны передать их по ссылке & foreach($form AS &$vocab), иначе $ vocab будет просто копией массива.

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

    }
person Amjad Masad    schedule 05.01.2011

В дополнение к ответу Амджада, если вам не нравится использовать ссылки, я бы предложил другую альтернативу:

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

Таким образом вы избегаете использования ссылок и потенциальных проблем, к которым они могут привести.

Также обратите внимание, что я удалил оператор if, который бесполезен (PHP может это понять).

Можно также рассмотреть array_map.

person Scolopendre    schedule 05.04.2018