Всем привет!
Возникла такая проблем-ка, буду благодарен за любую помощь.
Друпал 7.
Для программного создания нод использую следующий код, который вставляю в тело ноды:
$node = new stdClass;
$node->type = 'page';
$node->title = 'A title';
$node->uid = $user->uid;
node_object_prepare($node);
node_save($node);
drupal_goto("node/$node->nid");
Т.е. после создания ноды сразу переводит на вновь созданную ноду.
Разумеется, после крона начинаются проблемы с drupal_goto - начинают создаваться ноды при любом обращении к сайту, а не только при просмотре ноды с кодом. Автор нод - Гость (не проверено).
Пробовал использовать (не уверен, правда, что это подходит для 7-ки)
не помогло, все то же самое. Подскажите кто-нибудь, что делаю не так?
Комментарии
Код в теле ноды? Любой, кто откроет это ноду, создаст новую? омг.
Код должен быть во внешнем скрипте или модуле.
мда. И как ваш сервер только выдерживает?
Вообще, планировалось, что ноды будут иметь секретно-случайный url и доступ к созданию нод будет только у избранных.
А вынесение скрипта или создание модуля решит проблему с кроном?
Что-то вроде этого надо делать:
<?php
}
function hook_node_view($node, $view_mode, $langcode) { // *
global $user;
if ($user->uid > 0) { // тут лучше добавить user_access('the name of the permission') **
}
?>
Этот вариант сработает только когда вы не залогинены в систему
Вот:
- Надо отключить крон в Друпале (admin/config/system/cron)
- Пользоваться crontab для выполнения крона, тогда решение выше сработает
Читаем про http://api.drupal.org/api/drupal/modules--system--system.api.php/functio...
И никогда не юзаем модуль PHP-filter и исполняемый код в админке.
О, круто, спасибо за оперативность.
Таким образом, мне следует создать модуль
function dacopost_menu() {
$items['dacopost'] = array (
'title' => 'dacopost',
'page callback' => 'dacopost_node_add',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function dacopost_node_add() {
$node = new stdClass();
$node->title = 'Modul posts';
$node->body = 'Superposts';
$node->type = 'page';
$node->created = time();
$node->changed = $node->created;
$node->status = 1; // Published?
$node->promote = 0; // Display on front page?
$node->sticky = 0; // Display top of page?
$node->format = 1; // Filtered HTML?
$node->uid = $user->uid; // Content owner uid (author)?
$node->language = 'ru';
node_save($node);
}
drupal_goto("node/$node->nid");
Дело говорю?)
Почти весь код модуля взял здесь же на форуме, ссылку на обсуждение вставить что-то не получается)
У Вас
drupal_goto("node/$node->nid");
за границами функцииdacopost_node_add
Исправил, спасибо.
Создал модуль со след содержимым
function dacopost_menu() {
$items['dacopost'] = array (
'title' => 'dacopost',
'page callback' => 'dacopost_node_add',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function dacopost_node_add() {
$node = new stdClass;
$node->type = 'page';
$node->title = 'A title';
$node->uid = $user->uid;
node_object_prepare($node);
node_save($node);
drupal_goto("node/$node->nid");
}
Все включается. Но не работает
Перехожу по адресу example.ru/dacopost открывается "страница не найдена" и ничего не создается.
В чем может быть проблема? Думал, может код не совсем подходит для 7-ки?
Кеш не чистили, модуль называется не dacopost, или модуль не включен.
Вам нужно ознакомится с этим http://drupal.org/documentation
И читать Drupal 7 Module Development
ок, буду разбираться.
С наступающим!
Забыл отписаться)
Все нормально работает если создавать ноды модулем.
Спасибо Ане!)