Написал модуль по кастомизации таб линков на ноде. Задача перенаправить анонимного пользователя на логин страницу, для зарегестрированного же загрузить форму отзыва.
Для этого в menu_alter прописал следующее:
$items['node/%node_add_review/addreview']['page callback'] = 'remove_tab_addreview_load';
}
Потом добавил callback функцию там же в модуле:
global $user;
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
}
if ($user->uid) {
return drupal_get_form('nodereview_node_form');
}
else{
return drupal_goto('user','destination=node/'.urlencode($node->nid) .'/addreview');
}
drupal_not_found();
}
Сценарий с анонимом работает четко, а вот загрузка формы не работает. Думаю проблема связана с тем, что я переписываю форму в template.php.
Так вот, когда вызывается drupal_get_form - на странице нет моей переопреденной формы, а только ее админ часть.
Как подгрузить все форму из моего модуля???
Спасибо заранее за помощь.
BOOZ
Комментарии
hook_menu_alter используется вроде как для перехвата чужих меню и их модификации, hook_menu почему не использовали? Непонятно.
Не в меню дело здесь, хотя если будет время попробую. Проблема как переопределенную форму нода подгрузить?
вспоминайте где находится функция nodereview_node_form(), в каком файле. Ибо если она не в *.module а в каком-нить *.pages.inc то скорее всего такой вызов формы не сработает.
nodereview_node_form() у меня находится в template.php.
Спасибо, попробую с 403 поиграться.
Думаю задача решается проще. Зарегенный пользователь попадает на нужную страницу, с ним (по умолчанию) проблем быть не должно, а для анонима нужно проставить права (доступ к node/%node_add_review/addreview должен быть запрещён), а при ошибке 403 (access denide) перенапрявлять на страницу логина. Это делается стандатрными средствами друпала (настройка ошибок).
Не получиться, линк не показывается если убрать права у анонима (так cделан модуль node_review). Хотелось бы показать линк, но при нажатии перенаправить на логин, а потом уже обратно на форму. Здесь-то и не работает....
Ну какие проблемы - показывайте линк всегда (вручную, но убрав права для анонима).
дело в том что это таб локал линк и прикручивается он в отдельном модуле node_review....
http://www.cto4u.ru/articles/kak-vybrat-zapchast
и смотрите на "Поделись своим опытом"
А если в хуке menu_alter измените проверку доступа:
<?php
$items['node/%node_add_review/addreview']['access callback'] = 'user_access';
$items['node/%node_add_review/addreview']['access arguments'] = array('access content');
?>
Заработало. Поменял drupal_get_form на node_add (). Спасибо всем!
global $user;
if (arg(0) == 'node' && is_numeric(arg(1))) {
$node = node_load(arg(1));
}
if ($user->uid) {
return node_add('nodereview');
}
else{
return drupal_goto('user','destination=node/'.urlencode($node->nid) .'/addreview');
}
drupal_not_found();
}