access callback для страницы добавления ноды

Аватар пользователя maksbaks maksbaks 12 февраля 2017 в 21:53

Нужно запретить доступ к странице добавления ноды при определенных условиях в своем модуле

вот код который должен выполнять эту функцию и закрывать доступ к странице, но он не срабатывает...

<?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();
}
?>
0 Thanks

Комментарии

Аватар пользователя maksbaks maksbaks 12 февраля 2017 в 22:29

я конечно понимаю... с доступами еще не работал близко, только внедряюсь именно поэтому и написал тему, что бы подсказали в какую сторону шуршать...

Аватар пользователя bumble bumble 12 февраля 2017 в 22:38

и не

<?php
$items
['node/add/type_node']['access callback'] = name_module_accesscheck();
?>

а

<?php
$items
['node/add/type_node']['access callback'] = array('name_module_accesscheck');
?>
Аватар пользователя maksbaks maksbaks 12 февраля 2017 в 22:55

верно, в названии была опечатка, когда на сайт копировал, удалил лишнее.. спасибо
но в массиве тоже попробоввал... не работает все равно...
для теста всё сократил... и понял, что все равно не работает по каким то причинам...

<?php
function name_module_accesscheck(){
  return 
FALSE;
}

function 

name_module_menu_alter(&$items) {
    
$items['node/add/djanes']['access callback'] = array('name_module_accesscheck');
}
?>
Аватар пользователя maksbaks maksbaks 12 февраля 2017 в 23:04

да, в данном случае после каждого изменения чищу кэш, так как не понимаю почему не передает...
при этом самая обычная структура без отдельной функции срабатывает...

<?php
function name_module_menu_alter(&$items) {
  
$add_node FALSE;
  
$items['node/add/type_node']['access callback'] = array($add_node);
}
?>
Аватар пользователя bumble bumble 12 февраля 2017 в 23:09

Проверяйте себя на ошибки, вариант из позапрошлого комментария должен работать.

Проверяйте все ли "name_module" переименованы в машинное имя модуля и наличие, а также правильность указания типа материала "type_node" ("djanes").

И обязательно чистите кеш после изменений, особенно с хуками меню.

Аватар пользователя maksbaks maksbaks 12 февраля 2017 в 23:10

найден ужасный ляп в третей строчке...

return $user->uid;

выбрасывал с функции еще вначале её выполнения... изза этого не работало...
ваши правки очень помогли и ускорили решение..
спасибо огромное за помощь!! и извиняюсь за свою невнимательность