Как реализовать и с помощью каких средств такой алгоритм:
для незарегистрированных пользователей доступны меню "главная" и "все даром"
для зарегистрированных пользователей доступны меню "главная" и все ослальное?
Варианты: если третью строчку заменить на «if (!$user->uid){», то блок будет показываться только не вошедшим пользователям.
Показывать блок только для определённой роли:
<?php
global $user;
if (in_array('Approved Role',$user->roles)) {
return TRUE;
} else {
return FALSE;
}
?>
Варианты: замените «Approved Role» в 3 строчке на ту роль, которой вы хотите показать блок. Используйте «!in_array» в этой же строке, чтобы скрыть блок для указанной роли.
Показывать блок только для определённых пользователей:
<?php
global $user;
if ($user->uid == 1){
return TRUE;
} else {
return FALSE;
}
?>
Варианты: замените «1» в третьей строке на UID нужного вам пользователя.
Показывать блок только для определённых типов содержания:
Варианты: В этом примере блок не будет показан для всех документов типа «story» и «page». Измените FALSE на TRUE во второй строчке и блок будет показываться для типов содержания определённых в 3 строчке. Меняйте 3 строчку в примере, чтобы добавить или удалить типы содержания для которых не будет показываться блок используя формат 'тип_содержания' => 1.
Комментарии
Создайте 2 разных меню и в блоках для них укажите, каким ролям показывать.
Как раз вчера лазил.
Несколько сниппетов с этой страницы:
http://drupal.org/node/64135 — Overview-approach to block visibility
1. Перейдите в «Administer — Site building — Blocks» и нажмите ссылку «configure» напротив того блока, который вы хотите настроить.
2. В секции «Show block on specific pages:» выберете значение «Show if the following PHP code returns TRUE (PHP-mode, experts only)».
3. В поле «Pages:» скопируйте нужный вам сниппет:
Показывать блок только для вошедших пользователей:
global $user;
if ($user->uid){
return TRUE;
} else {
return FALSE;
}
?>
Варианты: если третью строчку заменить на «if (!$user->uid){», то блок будет показываться только не вошедшим пользователям.
Показывать блок только для определённой роли:
<?php
global $user;
if (in_array('Approved Role',$user->roles)) {
return TRUE;
} else {
return FALSE;
}
?>
Варианты: замените «Approved Role» в 3 строчке на ту роль, которой вы хотите показать блок. Используйте «!in_array» в этой же строке, чтобы скрыть блок для указанной роли.
Показывать блок только для определённых пользователей:
<?php
global $user;
if ($user->uid == 1){
return TRUE;
} else {
return FALSE;
}
?>
Варианты: замените «1» в третьей строке на UID нужного вам пользователя.
Показывать блок только для определённых типов содержания:
<?php
$match = FALSE;
$types = array('story' => 1, 'page' => 1);
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load(array('nid' => $nid));
$type = $node->type;
if (isset($types[$type])) {
$match = TRUE;
}
}
return $match;
?>
Варианты: В этом примере блок не будет показан для всех документов типа «story» и «page». Измените FALSE на TRUE во второй строчке и блок будет показываться для типов содержания определённых в 3 строчке. Меняйте 3 строчку в примере, чтобы добавить или удалить типы содержания для которых не будет показываться блок используя формат 'тип_содержания' => 1.
Показывать блок только для определённых URL:
<?php
$desired_paths = array('viewPathNameHere', 'viewPathNameHere');
if ($_GET['q']) {
$my_drupal_path = $_GET['q'];
} else {
$my_drupal_path = substr($_SERVER['REQUEST_URI'], 1);
}
$my_path_alias = drupal_get_path_alias($my_drupal_path);
foreach ($desired_paths as $desired_path) {
if (stristr($my_path_alias, $desired_path)) {
return TRUE;
}
}
return FALSE;
?>
Варианты: замените во 2 строчке «viewPathNameHere» на те URL, в которых вы хотите показывать блок.
//Там можно найти сниппеты проще.
вот что в FAQ обязательно надо!