Здравствуйте, подскажите пожалуйста необходимый минимум таблиц в бд, в которые должны быть вставлены
данные, что бы успешно добавилась новость.
Я пока обнаружил 2 таблицы (node и node_revision)
Но после того как вставляюю туда новость, она не редактируется.
В какие ещё таблицы занести данные? Спасибо.
Комментарии
Используйте функцию node_save.
Самостоятельно делать записи в БД нельзя - Вы нарушаете логику работы Drupal-а.
Ну уж я понял что нарушаю. Раз он работать отказывается после 2х записей в бд.
Но надо нарушить.
И как бы её сложновато использовать эту функцию.
Там что-то никак не могу понять какова структура должна быть у ноды. (
Какова структура-то?
И как вызвать эту функцию из другой программы? Мне бы как бы из другой программы вызвать функцию.
Там переменные как Global обявлены. Но это пол беды ведь можно же самому вписать логин пароль юзера и т.п. Вот только связанные с этой функцией файлы каковы?
Мне очень надо вставить новость из другой программы, что б при этом движок не плакал что там что-то не так.
С этого и стоило начинать.
Начинайте плясать с этого node_save. Читайте все и внимательно.
Большое спасибо. Про гугл я слышу в первый раз.
Значит Вас впереди ждет еще много приятных и удивительных открытий.
Сохранять ноды без использования node_save() действительно не стоит.
При необходимости добавлять их из другой программы следует написать мост между этой программой и Drupal'ом. Есть несколько путей, как можно это сделать.
<?php
require_once $drupal_root . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
?>
где $drupal_root - это пусть от текущего рабочего каталога до папки, в которой лежат файлы index.php, update.php и другие.
v_20q, да, всё отлично, так и сделал. Спасибо.
Осталось найти описание ноды. Т.е в каком формате передавать $node в функция
node_save(&$node)
Если кто знает - дайте ссылку. Только не на гугл. Полуркать я и сам могу.
<?php
require_once $drupal_root . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
?>
Нода это что обьект что ли должен быть?
$node = new stdClass();
$node->is_new=1;
$node->title = "Book node".rand();
$node->body = "";
$node->type = "book";
$node->uid = 1;
$node->teaser = "";
$node->filter = 1;
$node->status = 1;
$node->comment = 2;
$node->created = time();
$node->changed = time();
$node->field_publisher[0]['value']='Gutenberg';
$node->field_author[0]['value']='Gutenberg';
$now = microtime(true);
node_save($node);
$x=$x+microtime(true)-$now;
$t=$t+microtime(true)-$now;
Что за бизня? Ничего не сохраняется.
Дайте кода!!! Не жидитесь!
Всё, без вас обошёлся. (
Проблема решена.
Спасибо тем, кто знал как сделать, но молчал в тряпку, и не мог скинуть кусок
кода из 10 строк.
Спасибо товарищу dimedrol за гугл - ДОБАВИЛ В закладки.
И огромное спасибо v_20q, за require_once $drupal_root . '/includes/bootstrap.inc'; Это реально облегчило задачу. >_<
__________________________________________
require_once 'includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$node = new StdClass;
$node->title = 'external node';
$node->type = 'news';
$node->status = 1; // Published
$node->body = 'some content...';
$node->comment = 2;
$node->promote = 1;
node_save($node) ;
____________________________________________
Офлайн.
Да, объект любого класса. Обычно используется stdClass, но ты можешь создать свой, куда значения по умолчанию помеcтить.
Минимум тебе нужны следующие свойства дать объекту: type, language, uid. Всё остальное будет добавлено автоматически со стандартными значениями в node_save(), а body и title будут пустыми. Даже язык можно по-моему опустить, хотя не уверен.
edit: А удалить нельзя комментарий уже?
Когда пытаюсь новую новость (созданную таким вот способом, что вверху указан) отредактировать, то испытываю затруднения. I lol
warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'news_node_form' was given in D:\AppServ\money_exp\includes\form.inc on line 366.
Наугад, а тип news создан вообще в «Типы материалов»?
Всё, сделал.
Всем спасибо за помосч.
«Минимум тебе нужны следующие свойства дать объекту: type, language, uid. Всё остальное будет добавлено автоматически со стандартными значениями в node_save(), а body и title будут пустыми. Даже язык можно по-моему опустить, хотя не уверен.»
Дело в том что некоторые вещи сами не выставляются, к примеру поле type в таблице node
А без него потом новость не редактируется.
$node->type = "story";
Ну и последнее includes\bootstrap.inc - Пытается установить сессию.
Я конечно не знаю где это отключтть. Так что постоянно вылезает
: Cannot modify header information - headers already sent b
__________
$node = new StdClass;
$node->title = $zagolovok;
$node->type = 'news';
$node->status = 1; // Published
$node->body = $tobase;
$node->teaser = $tobase;
$node->comment = 2;
$node->promote = 1;
$node->type = "story"; // Иначе не редактируется. Баг в движке...
$node->format = 2;
_____________
А в остальном всё окей.
«Наугад, а тип news создан вообще в «Типы материалов»?»
Да, типа, как раз-таки не было )
Ещё что-то там сессию пытается создать... Но это всё мелочи уже )