Скрыть некоторые пункты меню. Simple access & Co

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

Аватар пользователя fu-zsi fu-zsi 20 октября 2006 в 16:48

Задача - скрыть отдельные пункты меню (ну и сами материалы, конечно) от некоторых групп пользователей.
Что касается допуска к материалам, все испробованные модули работают добросовестно. Вопрос только в том, что и сами пункты меню не должны быть видны никому, кроме ролей с правами доступа.
Ни в одном из испробованных модулей сделать этого не удается. Доступа к самим материалам нет (Access denied), но пункты меню присутствуют. Может, я и просмотрел решение на Drupal.org (и еще на парочке форумов), тогда буду очень благодарен, если кто-нибудь ткнет меня носом. Единственное предложенное решение - загонять материалы каждый в свой блок, а потом выключать/включать по результатам опроса Show if the following PHP code returns TRUE, не отличается, на мой взгляд, элегантностью.
Испробованные модули: Simple Access, node privacy byrole и taxonomy access. Каждый модуль ставился на свежую установку. Версия Drupal - 4.7.4.
Буду благодарен за любую информацию.

_______________
(Посоветовали Drupal как очень гибкую систему. В целом, особенно после Joomla, производит очень хорошеее впечатление).

Комментарии

Аватар пользователя fu-zsi fu-zsi 22 октября 2006 в 2:51

Спасибо огромное, Natalie!
Одна из этих идей работает именно так, как нужно. А именно, хак ninetwenty от 26го августа в модуле menu.inc.
Протестировал с версией Drupal 4.7.4 и с модулем node privacy byrole, версии 4.7.0. Использовал 4 пункта в меню, 5 пользователей и 3 роли. Заработало после чистки кэша. Тестировалось локально под виндами на xampp'e. Посмотрю на следующей неделе, как это будет на сервере.

Аватар пользователя fu-zsi fu-zsi 13 ноября 2006 в 18:28

Тест-стадия затянулась, прошу прощения.
Всё замечательно работает и на вебсервере. Могу порекомендовать в качестве стандартного решения.
(Интересно, а в 5ой версии эта "проблема" осталась?..)

Аватар пользователя MDD MDD 13 мая 2007 в 0:24

2 fu-zsi

Об этом коде речь? :
------------------------------------------------------------------------------------------------------
/**
* Determine whether the given menu item is accessible to the current user.
*
* Use this instead of just checking the "access" property of a menu item
* to properly handle items with fall-through semantics.
*/
function _menu_item_is_accessible($mid) {
$menu = menu_get_menu();

// Follow the path up to find the first "access" attribute.
$path = isset($menu['items'][$mid]['path']) ? $menu['items'][$mid]['path'] : NULL;
// ** Begin hack **
if (substr($path, 0, 5) == 'node/') {
$nid = substr($path, 5);
if (is_numeric($nid)) {
$node = node_load($nid);
return node_access('view', $node);
}
}
// ** End hack **
while ($path && (!isset($menu['path index'][$path]) || !isset($menu['items'][$menu['path index'][$path]]['access']))) {
$path = substr($path, 0, strrpos($path, '/'));
}
if (empty($path)) {
// Items without any access attribute up the chain are denied, unless they
// were created by the admin. They most likely point to non-Drupal directories
// or to an external URL and should be allowed.
return $menu['items'][$mid]['type'] & MENU_CREATED_BY_ADMIN;
}
return $menu['items'][$menu['path index'][$path]]['access'];
}
----------------------------------------------------------------------------------
не совсем понял куда именно его надо втиснуть Sad ... фаил нашел, но в произвольном месте (между функциями) не работает

Аватар пользователя kirix kirix 28 января 2008 в 16:35

Народ как сделать в друпале 5 невидимыми пункты меню или как ограничивать видимостью до определенного уровня вложенности в меню, при этом контент должен быть доступен, очень нужно. Спасибо