Как программно по определенной логике можно разграничить доступ к просмотру блока.
Например на основе значения поля профиля пользователя, а именно есть блок созданный вьювс,
он отображается какие нибудь заказы, нужно сделать так, чтобы блок отображался только пользователям
у которых в поле ПОДРАЗДЕЛЕНИЕ профиля было значение 100.
Версия Drupal:
7.x
Вопрос задан 04.11.2018 - 01:21
Ответы
/**
* Implements hook_block_list_alter().
*/
function hook_block_list_alter(&$blocks) {
$bid = 123;
if (!isset($blocks[$bid]) || !isset($blocks[$bid]->theme) || !isset($blocks[$bid]->status) || $blocks[$bid]->theme != $GLOBALS['theme_key'] || $blocks[$bid]->status != 1) {
return;
}
if ($GLOBALS['user']->field_name['und'][0]['value'] != 100) {
unset($blocks[$bid]);
}
}
Ответ дан 04.11.2018 - 10:26
Большое спасибо! То что нужно, параллельно вышел на ваш пост в вашем блоге.
Однако почему то у меня в данной реализации не работает до конца.
Поменял id блока на свой (взял из базы)
И поправил проверку на значение поля (поле в базе это поле типа текст с машинным именем field_user_department_number
Сделал по следующему:
Как я понял в данном случае, если значение поля field_user_department_number текущего пользователя равно 100, то блок должен исчезнуть, однако он не исчезает.
Если меняю условие == на != - аналогично не исчезает (кэш сбрасывал)
Смотрите что в value, что на выходе в $blocks.