В / admin / people я хочу скрыть отображаемое имя (то есть отображаемое имя не должно отображаться в списке пользователей), но только для определенной роли.
В моем файле .module я пробовал следующие хуки:
function hook_views_data_alter(array &$data) {
kint($data['users']);die;
}
function hook_views_pre_render(\Drupal\views\ViewExecutable $view) {
if($view->id() == 'myview'){
print_r($view->result);die;
// kint($value->_entity->get('title')->value);
}
}
function hook_views_post_render(\Drupal\views\ViewExecutable $view) {
if ($view->id() == 'viewid') {
// Set the view title.
$field_name = $view->getFields();
}
}
function hook_field_views_data_views_data_alter(array &$data, \Drupal\field\FieldStorageConfigInterface $field) {
$field_name = $field->getName();
echo 'hjsjhwd';
print_r($field_name);die;
}
Никто из них не помог мне. Я думал о получении полей представления «пользователь», и после этого я буду сбрасывать его для определенной роли. Но в списке просмотров поле Имя все еще появляется. Как я могу скрыть это для определенной роли?
Есть ли способ добиться этого?
display name
в / admin / page, я хочу скрыть этот конкретный столбец на самом деле. Может быть, если я скрываю поле, этот столбец также скрывается для моей конкретной роли.Ответы:
Наиболее эффективным способом было бы использование hook_views_pre_view (), которое позволяет вам изменять View в самом начале процесса, то есть до того, как какой-либо запрос будет построен / запущен, и до того, как произойдет рендеринг. Вы можете удалить обработчик поля 'name' из View, основываясь на желаемой логике.
Это решение предполагает, что вы заинтересованы только в обслуживании этого особого варианта использования - удалите поле только из этого конкретного представления. Пользователи могут по-прежнему видеть отображаемые имена пользователей в других разделах веб-сайта.
источник
$views->id() ===
?$views->id()
? Должно ли это быть$view->id()
?if (empty(array_intersect($userRoles, $userRolesAllowed)))
. Больше информации оarray_intersect
Вы можете скрыть поля, используя hook_entity_field_access , вы можете скрыть поле на основе учетной записи пользователя (роль является одним из его свойств), операции и сущности, которые содержат поле.
Вы также можете использовать модуль Полевые права, чтобы скрыть поле от определенных ролей.
источник
Когда вам нужно удалить заголовок таблицы <td>, а также строки <td>, вы можете использовать template_preprocess_views_view_table
Примечание. Для любых подобных целей старайтесь не использовать более двух хуков. Так как Drupal всегда будет делать все, что вы хотите, используя один или два хука, не более.
Обновление: для Drupal 7 также используется то же имя ловушки в этом URL. Template_preprocess_views_view_table
источник
Используйте модуль Поля представлений . Пользовательский код не требуется!
Поддержка ролей была добавлена около месяца назад.
источник