[Решено] И снова программное создание ноды.

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

Аватар пользователя yurant yurant 29 ноября 2012 в 22:47

Доброго времени суток, господа форумчане. Несмотря на то, что похожие темы затерты до дыр, не попалась на глаза аналогичная ситуация.
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" естественно не найдена. нода не создана.
Сталкивался ли кто с подобной ситуацией ? Заранее благодарен за любые советы.

Комментарии

Аватар пользователя yurant yurant 30 ноября 2012 в 9:54

Проблема судя по всему в
<?phpdrupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);?>
хелп, так не хотелось бы возвращаться и запиливать данный функционал на джумле...=/

Аватар пользователя rimen rimen 30 ноября 2012 в 11:11

Реализуйте hook_menu(), дайте menu_item, например, ['autocreate/newarticle'] со своим колбеком, в котором реализуйте создание ноды программное.
Тут вам и drupal верно подымется, и права разрулить можно.
api hook_menu в помощь.

Аватар пользователя yurant yurant 30 ноября 2012 в 13:28

накидал модуль дабы проверить работу ф-й (хотя бы)

<?php
function article_menu(){
    
$items = array();
    
$items['row'] = array(
        
'title' => 'ROW',
        
'page callback' => 'row_page',
        
'access callback' => TRUE,
    );
    return 
$items;
}

function 

row_page(){
return 
('Page callback works!');
}
?>

Страница "/row" не найдена. Ну как так, и без того примитивнее некуда... =/

Аватар пользователя yurant yurant 30 ноября 2012 в 13:54
<?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

Аватар пользователя yurant yurant 30 ноября 2012 в 14:21

может дело в отсутствии/наличии какого - нибудь модуля ?
я уже просто не знаю в какую сторону думать и что может быть причиной...
версия drupal-7.17 собственно чистый, сверху ничего не ставил

Аватар пользователя graker graker 30 ноября 2012 в 16:52

Вообще, renderable array необязательно из коллбэка hook_menu возвращать.

1. Модуль как называется?
2. Кэш меню надо чистить всегда, если изменения в hook_menu.

Аватар пользователя yurant yurant 2 декабря 2012 в 0:13

Однако меня все равно смущают 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);
?>
Warning: require_once(\\INCLUDES\ERRORS.INC) [function.require-once]: failed to open stream: No such file or directory in www\includes\bootstrap.inc on line 2237

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) Поскольку идея подразумевает что нода будет создаваться/редактироваться/удаляться по тыку пользователя (а ля доска объявлений)
то какбе решение некошерно, это ведь постоянно чистить кэш... =/
+ созданная таким образом страница не отображается в админке (ну не зарегана в БД ж ведь - все очевидно) как "содержимое", а зарегать не могу изза вышеописанной проблемы...

я уже как только не извращался тут... Sad

<?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;
?>
Аватар пользователя graker graker 2 декабря 2012 в 3:23

Очень острое ощущение, что вы хотите решить задачу совершенно неправильным способом. Возможно, стоит пойти другим путем: подробно изложить, чего вы вообще достичь пытаетесь.

Аватар пользователя yurant yurant 2 декабря 2012 в 12:52

graker, очень может быть, что вы более чем правы...
итак. я пытаюсь организовать следующее:
необходим механизм (добавления объявлений (материалов типа "статья" например) на заданную страницу
причем реализовать хотелось максимально просто. а ля пользователь регистрируется, заходит на страницу со списком объявлений, видит свои среди них (с пометкой возможности удаления - банально ссылка рядом "удалить")
и видит ссылку создать новое объявление.

Изначально я искал пути создания материала т.о. как это реализовано в ядре друпала...
т.е. дабы потом можно было залезть через админку, увидеть созданные материалы в "содержимом"

однако нигде на глаза не попались решения такого характера, пришлось искать "любые рабочие"
варианты, поскольку сроки идут а проект какбы сдавать...

возможно наиболее простым вариантом (как мне посоветовали) будет использование views"ов.

Аватар пользователя graker graker 2 декабря 2012 в 12:54

Для вашей задачи не нужно писать ни строчки кода.
Пользователь добавляет обычные материалы типа "Статья" через node/add/story - они появляются в "Содержимом".
Все статьи со ссылками на редактирование/удаление выводятся через views на заданную страницу.
Доступ к удалению "своих" статей дается через пермишны.
Ссылка на добавление статьи дается в шапке views.
Больше ничего и не надо.

Зачем для этого создавать ноды в коде - понимать отказываюсь Smile

Аватар пользователя yurant yurant 2 декабря 2012 в 21:04

ну это... как бы вам сказать, чтоб совсем дураком не показаться - хардкорный метод изучения CMS Smile
берем неведомую задачу) берем неизвестную ранее цмс) и начинаем удалять гланды через **пу)
метод нервный зато гораздо быстрее начинаешь разбираться)
вот пока создал таксономическую группу в к-й выводятся объявления заданного типа, научился писать модули для друпала xDDD
Премного благодарен за помощь Smile даже не стал утруждаться вьюсами) просто поглядел пару тройку туториалов и освоил таксономию xD
Тема закрыта)