Использование Drupal через bootstrap
Понедельник, 25 января 2010
Drupal позволяет поработать со своим API из внешнего скрипта. Ну или почти внешнего.
Покажу на примере, как можно организовать импорт данных в Drupal.
Создаём файл import.php в корне Drupal (это важно!).
// Если хотим работать исключительно из консоли
/*if(array_key_exists('REQUEST_METHOD', $_SERVER)){
echo 'Command line only. Sorry.';
exit(1);
}
else {
// Для консоли обязательно указать хост Drupal.
// Иначе ничего работать не будет.
$_SERVER['HTTP_HOST'] = 'Хост вашего Drupal';
}*/
error_reporting(E_ALL);
// При импорте часто бываем маловато стандартного времени
set_time_limit(300);
// Загружаем Drupal
require 'includes/bootstrap.inc';
require 'modules/node/node.pages.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// Drupal загружен остался лишь импорт
// Получаем список продуктов
$products = get_products();
foreach($products as $product){
// Готовим данные
$node = new stdClass();
node_object_prepare($node);
// Будем сохранять в ноды с типом product
$node->type = 'product';
// Владельцем будет пользователь с uid=1
$node->uid = 1;
// Заголовок
$node->title = $product['title'];
// Тело
$node->body = $product['description'];
// Теги. Сюда можно записать массив tid
$node->taxonomy[] = $product['taxonomy'];
// CCK (с одним значением)
$node->my_cck_field[0]['value'] = $product['my_cck_field'];
// Сохраняем без валидации
node_save($node);
echo "Product saved to node {$node->nid}<br />";
}
Комментарии
Может быть концовку лучше так сделать?
// Сохраняем без валидации
node_submit($node);
$node->uid = 1;
node_save($node);
Какие в этом плюсы?
"Подготовка" тизера.
ПС: почему то не приходит e-mail уведомление об новых ответах в комментариях. Хотя я на них подписан.
Да, оповещалка поломана.
Оставить комментарий