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']);
}
}
}
}
}
2 ответа
Очень маленькая ошибка PHP, когда вы хотите изменить элементы массива в a для каждого оператора, вы должны передать их по ссылке & foreach($form AS &$vocab)
в противном случае $vocab будет просто копией массива
foreach($form AS &$vocab){
//print_r($vocab);
if(isset($vocab['edit']['#value'])){
unset($vocab['edit']['#value']);
}
}
В дополнение к ответу Амджада, если вам не нравится использовать ссылки, я бы предложил другую альтернативу:
foreach ($form as $key => $vocab) {
unset($form[$key]['edit']['#value']);
}
Таким образом, вы избегаете использования ссылок и потенциальных проблем, к которым они могут привести.
Также обратите внимание, что я удалил if
утверждение, которое бесполезно (PHP может понять это).
array_map
также может быть рассмотрено.