drupal_goto и cron

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

Аватар пользователя kruzalus kruzalus 28 декабря 2011 в 3:46

Всем привет!
Возникла такая проблем-ка, буду благодарен за любую помощь.
Друпал 7.
Для программного создания нод использую следующий код, который вставляю в тело ноды:

global $user;
$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 Smile - начинают создаваться ноды при любом обращении к сайту, а не только при просмотре ноды с кодом. Автор нод - Гость (не проверено).

Пробовал использовать (не уверен, правда, что это подходит для 7-ки)

if ($_SERVER['SCRIPT_NAME'] != '/cron.php') {
       drupal_goto("node/$node->nid");
     }

не помогло, все то же самое. Подскажите кто-нибудь, что делаю не так?

Комментарии

Аватар пользователя kyky kyky 28 декабря 2011 в 6:57

Код в теле ноды? Любой, кто откроет это ноду, создаст новую? омг.
Код должен быть во внешнем скрипте или модуле.

Аватар пользователя Mirocow Mirocow 28 декабря 2011 в 10:06

"kruzalus" wrote:
Для программного создания нод использую следующий код, который вставляю в тело ноды:

мда. И как ваш сервер только выдерживает?

Аватар пользователя kruzalus kruzalus 28 декабря 2011 в 12:03

Вообще, планировалось, что ноды будут иметь секретно-случайный url и доступ к созданию нод будет только у избранных.

Аватар пользователя kruzalus kruzalus 28 декабря 2011 в 12:04

"kyky" wrote:
Код должен быть во внешнем скрипте или модуле.

А вынесение скрипта или создание модуля решит проблему с кроном?

Аватар пользователя MY MY 28 декабря 2011 в 23:11

Что-то вроде этого надо делать:

<?php
function hook_node_view($node$view_mode$langcode) { // *
  
global $user;
  if (
$user->uid 0) { // тут лучше добавить user_access('the name of the permission') **

  

}
}
?>

Этот вариант сработает только когда вы не залогинены в систему

Аватар пользователя MY MY 28 декабря 2011 в 23:26

Вот:
- Надо отключить крон в Друпале (admin/config/system/cron)
- Пользоваться crontab для выполнения крона, тогда решение выше сработает

Аватар пользователя kruzalus kruzalus 30 декабря 2011 в 4:31

О, круто, спасибо за оперативность.

"annya" wrote:
Читаем про http://api.drupal.org/api/drupal/modules--system--system.api.php/functio...
И никогда не юзаем модуль PHP-filter и исполняемый код в админке.

Таким образом, мне следует создать модуль

<?php
 
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");

Дело говорю?)
Почти весь код модуля взял здесь же на форуме, ссылку на обсуждение вставить что-то не получается)

Аватар пользователя kruzalus kruzalus 31 декабря 2011 в 2:13

"annya" wrote:
У Вас drupal_goto("node/$node->nid"); за границами функции
dacopost_node_add

Исправил, спасибо.
Создал модуль со след содержимым

<?php
 
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");
}

Все включается. Но не работает Sad
Перехожу по адресу example.ru/dacopost открывается "страница не найдена" и ничего не создается.
В чем может быть проблема? Думал, может код не совсем подходит для 7-ки?