Задача:
Блок должен показывать аномимам сообщение типа "Зарегистрируйтесь, чтобы ..."
А залогиненым выводить то, что нужно.
Варианты:
1. В настройках блока проставить каким ролям доступ разрешёл - не подходит. Тогда анонимы блока не увидят вообще и не смогут прочесть, что им нужно зарегистрироваться. Нельзя так - они обидятся и уйдут!
2. В поле для видимости прописать условие кодом на PHP - не подходит по той же причине.
3. В теле самого блока сделать проверку и по результату проверки выдать разный контент.
Выбор: вариант 3.
Итак начинаем программировать эту дискриминацию.
Объекта $user в блоке не видно.
Поэтому нужно сделать так:
<?php
global $user;
return (bool) $user->uid;
?>
Этот код вернёт ИСТИНА для залогиненых пользователей. (Идея отсюда: http://drupal.org/node/64854)
Если же нужно ограничивать доступ для нескольких ролей, то можно использовать такую идею:
<?php
global $user;
$approved_roles = array('board', 'sales', 'engineer');
if (is_array($user->roles)) {
if (count(array_intersect($user->roles, $approved_roles)) > 0) {
return TRUE;
} else {
return FALSE;
}}
?>
Всё больше постигаю премудрость друпальную!...
Комментарии
Вариант №4.
Два блока.
Первый для анонимов, с предложением зарегистрироваться. Второй - с контентом - для авторизованых пользователей.
с ролями блоки будут плодиться как кролики
Вариант 4 тоже имеет право на существование. Просто в моём частном случае этот блок выводится через модуль, который делает табы (вкладки) и показывает несколько блоков на одном месте. Поэтому 2 разных блока для меня лично не подходит. Но как вариант...
Я так понимаю, что зарегистрированным пользователям в таком случае будут видны оба блока? Или для разграничения прав на до писать php условие?
спасибо
а что мешает в настройках блока "загистрируйтесь" поставить видимость только анонимам?