Разделить права доступа к меню

Главные вкладки

Аватар пользователя Stanislav Stanislav 15 марта 2007 в 12:22

Как реализовать и с помощью каких средств такой алгоритм:

для незарегистрированных пользователей доступны меню "главная" и "все даром"
для зарегистрированных пользователей доступны меню "главная" и все ослальное?

Комментарии

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 15 марта 2007 в 12:33

Создайте 2 разных меню и в блоках для них укажите, каким ролям показывать.


Я ставлю строчку "php_value error_reporting 7" в файл .htaccess, а вы? Smile Полный русский перевод Drupal 5.x и еще некоторых модулей.

Аватар пользователя RISK RISK 15 марта 2007 в 14:05

Как раз вчера лазил.
Несколько сниппетов с этой страницы:
http://drupal.org/node/64135Overview-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:» скопируйте нужный вам сниппет:

Показывать блок только для вошедших пользователей:

<?php
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, в которых вы хотите показывать блок.

//Там можно найти сниппеты проще.