Добавляем node в drupal программно при помощи PHP скрипта

Иногда нужно добавить в сайт на drupal 7 кучу контента, естественно делать это в ручную дорого и не рационально..
Тем более что это можно автоматизировать...

Я опущу информацию откуда контент. Т.е. не важно база данных у вас или навал текстовых файлов со статьями. О том как их открыть я предлагаю вам подумать самим.

Мы же создадим скрипт, который поможет добавить материалы уже непосредственно в drupal.
Я собираюсь получать данные статьи через сеть посредством POST запроса.

Инклудим модули друпала:

define('DRUPAL_ROOT', getcwd());
$_SERVER['REMOTE_ADDR'] = "localhost"; // если вы запускаете из консоли
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

Я проверяю получены ли данные из запроса POST :

if (!isset($_POST['text']) || !isset($_POST['title']))
exit("error");

Преобразовываю всё в нормальный текст html:

$bodytext = htmlspecialchars_decode($_POST['text']);
$nodetitle = htmlspecialchars_decode($_POST['title']);

Теперь навсю пользуемся возможностями друпал :

$node = new stdClass(); // новый объект ноды
$node->type = "article"; // тип материала
node_object_prepare($node); // заполняем стандартными параметрами

Заголовок и язык:

$node->title    = $nodetitle;
$node->language = LANGUAGE_NONE; // указываем язык

Устанавливаем автора - админа:

$node->uid = 1; // UID автора ноды

Данные статьи:

$node->body[$node->language][0]['value']   = $bodytext;
$node->body[$node->language][0]['summary'] = text_summary($bodytext);  // превью
$node->body[$node->language][0]['format']  = 'filtered_html';  // тип текста

Путь к ноде:

$path = $node->title;
$node->path = array('alias' => $path);

Сохраняем:

if($node = node_submit($node)) { // сохраняем
    node_save($node);
    echo "Node with nid " . $node->nid . " saved!\n";
}

Получившийся файл ложим в корневой каталог drupal.
Пользуемся.

Просмотров:   3474