Drupal hook_form_alter для администратора таксономии - PullRequest
0 голосов
/ 06 января 2011

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

Я нацеливаюсь на идентификатор формы "taxonomy_overview_vocabularies".Я пытаюсь скрыть ссылку "редактировать словарь" для ролей "веб-мастер" и "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 голосов
/ 05 апреля 2018

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

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

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

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

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

0 голосов
/ 06 января 2011

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

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

    }
...