Нужно запретить доступ к странице добавления ноды при определенных условиях в своем модуле
вот код который должен выполнять эту функцию и закрывать доступ к странице, но он не срабатывает...
<?php
function name_module_accesscheck(){
global $user;
return $user->uid;
$add_djanes = FALSE;
// Проверка добавлена ли нода
$djanes = db_select('node', 'n')
->condition('n.uid', $user->uid)
->condition('n.type', 'type_node')
->countQuery()
->execute()
->fetchField();
if ($djanes == 0) {
$add_djanes = TRUE;
}
//проверка на роль пользователя
foreach ($user->roles as $value) {
if ($value == 'administrator' || $value == 'admin') {
$add_djanes = TRUE;
}
}
return $add_djanes;
}
function
name_module_alter(&$items) {
$items['node/add/type_node']['access callback'] = name_module_accesscheck();
}
?>
Комментарии
Конечно, такой г... код работать не будут. Спасибо, повесили на ночь)))
я конечно понимаю... с доступами еще не работал близко, только внедряюсь именно поэтому и написал тему, что бы подсказали в какую сторону шуршать...
name_module_alter - полагаю, должно быть name_module_menu_alter.
и не
<?php
$items['node/add/type_node']['access callback'] = name_module_accesscheck();
?>
а
<?php
$items['node/add/type_node']['access callback'] = array('name_module_accesscheck');
?>
верно, в названии была опечатка, когда на сайт копировал, удалил лишнее.. спасибо
но в массиве тоже попробоввал... не работает все равно...
для теста всё сократил... и понял, что все равно не работает по каким то причинам...
<?php
function name_module_accesscheck(){
return FALSE;
}
function
name_module_menu_alter(&$items) {$items['node/add/djanes']['access callback'] = array('name_module_accesscheck');
}
?>
Кеш чистили после изменений?
да, в данном случае после каждого изменения чищу кэш, так как не понимаю почему не передает...
при этом самая обычная структура без отдельной функции срабатывает...
<?php
function name_module_menu_alter(&$items) {
$add_node = FALSE;
$items['node/add/type_node']['access callback'] = array($add_node);
}
?>
Проверяйте себя на ошибки, вариант из позапрошлого комментария должен работать.
Проверяйте все ли "name_module" переименованы в машинное имя модуля и наличие, а также правильность указания типа материала "type_node" ("djanes").
И обязательно чистите кеш после изменений, особенно с хуками меню.
найден ужасный ляп в третей строчке...
return $user->uid;
выбрасывал с функции еще вначале её выполнения... изза этого не работало...
ваши правки очень помогли и ускорили решение..
спасибо огромное за помощь!! и извиняюсь за свою невнимательность