Доброго времени суток, господа форумчане. Несмотря на то, что похожие темы затерты до дыр, не попалась на глаза аналогичная ситуация.
Drupal 7, пытаюсь из одной ноды ссылкой
<a href="/new_article.php">Создать ноду</a>
вызвать механизм создания другой новой ноды.
new_article.php следующего содержания:
<?php
define('DRUPAL_ROOT', '');
include_once('/includes/bootstrap.inc');
include_once('/includes/common.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$new_node = new StdClass();
$new_node->type = 'page';
$new_node->title = 'Новый заголовок';
$new_node->status = 1;
$new_node->promote = 1;
$new_node->comment = 2;
$new_node->sticky = 0;
$new_node->created = '1256953732';
$new_node->changed = '1256953732';
$new_node->body['ru'][0]['value'] = 'Здесь содержимое';
$new_node->body['ru'][0]['format'] = 'full_html';
$new_node->uid = 1;
$new_node->language = 'ru';
node_save($new_node);
echo $new_node->nid;?>
собственно проблема в том что редиректит на install.php
В скрипт попадает (ибо если наделать там ошибок - сразу же выдаст), но если скрипт корректен (ну по крайней мере написан в соответствии с заведомо рабочими исходниками взятыми с аналогичных тем) происходит перенаправление на инсталл.пхп, ну а страница "/install.php" естественно не найдена. нода не создана.
Сталкивался ли кто с подобной ситуацией ? Заранее благодарен за любые советы.
Комментарии
Проблема судя по всему в
<?phpdrupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);?>
хелп, так не хотелось бы возвращаться и запиливать данный функционал на джумле...=/
Реализуйте hook_menu(), дайте menu_item, например, ['autocreate/newarticle'] со своим колбеком, в котором реализуйте создание ноды программное.
Тут вам и drupal верно подымется, и права разрулить можно.
api hook_menu в помощь.
накидал модуль дабы проверить работу ф-й (хотя бы)
<?php
function article_menu(){
$items = array();
$items['row'] = array(
'title' => 'ROW',
'page callback' => 'row_page',
'access callback' => TRUE,
);
return $items;
}
function
row_page(){return t ('Page callback works!');
}
?>
Страница "/row" не найдена. Ну как так, и без того примитивнее некуда... =/
function row_page заменить на article_page как-то так
Ну и вообщем-то не return t() а return array('#markup' => t());
<?php
function article_menu(){
$items = array();
$items['row'] = array(
'title' => 'ROW',
'page callback' => 'row_page',
'access callback' => TRUE,
);
return $items;
}
function
article_page(){
return array('#markup' => t('Page callback works!'));
}
?>
не помогло =/
Страница "/row" не найдена.
к выше написанному заменял
<?php'page callback' => 'article_page',?>
толку тоже 0
может дело в отсутствии/наличии какого - нибудь модуля ?
я уже просто не знаю в какую сторону думать и что может быть причиной...
версия drupal-7.17 собственно чистый, сверху ничего не ставил
Вообще, renderable array необязательно из коллбэка hook_menu возвращать.
1. Модуль как называется?
2. Кэш меню надо чистить всегда, если изменения в hook_menu.
папка: \sites\all\modules\new_article
файлы соотв-но new_article.module, new_article.info
спасибо))
del
Однако меня все равно смущают 2 вещи:
1) Почему тем не менее возникает еррор уже на этапе
<?phpinclude_once('/includes/bootstrap.inc');?>
в относительно простом скрипте:<?php
define('DRUPAL_ROOT', '/');
include_once('/includes/bootstrap.inc');
include_once('/includes/common.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
?>
Fatal error: require_once() [function.require]: Failed opening required '//includes/errors.inc' (include_path='.;\Server\php\includes') in \www\includes\bootstrap.inc on line 2237
2) Поскольку идея подразумевает что нода будет создаваться/редактироваться/удаляться по тыку пользователя (а ля доска объявлений)
то какбе решение некошерно, это ведь постоянно чистить кэш... =/
+ созданная таким образом страница не отображается в админке (ну не зарегана в БД ж ведь - все очевидно) как "содержимое", а зарегать не могу изза вышеописанной проблемы...
я уже как только не извращался тут...
<?php
$_SERVER['DOCUMENT_ROOT'] = dirname(dirname(__FILE__));
chdir($_SERVER['DOCUMENT_ROOT']);
global $base_url;
$base_url = 'http://'.$_SERVER['HTTP_HOST'];
require_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION);
global $user;
print $user->uid;
?>
Очень острое ощущение, что вы хотите решить задачу совершенно неправильным способом. Возможно, стоит пойти другим путем: подробно изложить, чего вы вообще достичь пытаетесь.
Самое простое будет создать блок с нодой на странице + jquery ui dialog и этого будет достаточно c головой.
graker, очень может быть, что вы более чем правы...
итак. я пытаюсь организовать следующее:
необходим механизм (добавления объявлений (материалов типа "статья" например) на заданную страницу
причем реализовать хотелось максимально просто. а ля пользователь регистрируется, заходит на страницу со списком объявлений, видит свои среди них (с пометкой возможности удаления - банально ссылка рядом "удалить")
и видит ссылку создать новое объявление.
Изначально я искал пути создания материала т.о. как это реализовано в ядре друпала...
т.е. дабы потом можно было залезть через админку, увидеть созданные материалы в "содержимом"
однако нигде на глаза не попались решения такого характера, пришлось искать "любые рабочие"
варианты, поскольку сроки идут а проект какбы сдавать...
возможно наиболее простым вариантом (как мне посоветовали) будет использование views"ов.
Для вашей задачи не нужно писать ни строчки кода.
Пользователь добавляет обычные материалы типа "Статья" через node/add/story - они появляются в "Содержимом".
Все статьи со ссылками на редактирование/удаление выводятся через views на заданную страницу.
Доступ к удалению "своих" статей дается через пермишны.
Ссылка на добавление статьи дается в шапке views.
Больше ничего и не надо.
Зачем для этого создавать ноды в коде - понимать отказываюсь
ну это... как бы вам сказать, чтоб совсем дураком не показаться - хардкорный метод изучения CMS
берем неведомую задачу) берем неизвестную ранее цмс) и начинаем удалять гланды через **пу)
метод нервный зато гораздо быстрее начинаешь разбираться)
вот пока создал таксономическую группу в к-й выводятся объявления заданного типа, научился писать модули для друпала xDDD
Премного благодарен за помощь даже не стал утруждаться вьюсами) просто поглядел пару тройку туториалов и освоил таксономию xD
Тема закрыта)