программное создание ноды

Аватар пользователя .self .self 1 мая 2012 в 1:01

Доброго времени суток!
Вот уже неделю пытаюсь написать модуль для 7 друпала, который после своего включения
будет создавать страницу с произвольным контентом и помещать ее в меню Primary Links.
Также нужно сделать, чтобы при uninstall данного модуля, тестовая нода с содержимым страницы и ссылка из меню удалялись. При верстке должен же появляться табик такой Друпаловский,
чтобы сразу на странице была возможность редактирования содердания.

При отладке я включил вывод ошибок, но ошибок друпал не нашел. Очистка кэша так же ни к чему не привела. Посмотрел наверное все примеры, которые нашел гугл и яндекс. Вот наиболее толковые:

http://internetdevels.ru/blog/sozdanie-prostogo-modulya-field-api-v-drup...

http://drupal.org/node/361112

http://jan.tomka.name/blog/programmatically-creating-menu-items-drupal

http://stackoverflow.com/questions/4460562/drupal-programmatically-addin...

http://api.drupal.org/api/drupal/includes!menu.inc/group/menu/7

Сделал по аналогии - не работает.

nodepage.module

<?php
function nodepage_menu() {
$items = array();
$items['np'] = array(
'title' => 'Links',
'page callback' => 'nodepage_links_page',
'access arguments' => array('access content'),
'type' => MENU_SUGGESTED_ITEM
);
return $items;
}
function nodepage_links_page(){
$node = new stdClass();
$node->type = 'story';
$node->title = 'My node page';
$node->status = 1;
node_save($node);

}

nodepage.install

<?php
function nodepage_install(){
$menu = array(
'menu_name' => 'links',
'title' => 'My Custom Links',
'description' => 'Descriptive text.'
);
menu_save($menu);
}

nodepage.info

name = Web page
description = generates web page with node.
version = "7.x-1.x-dev"
core = "7.x"

Комментарии

Аватар пользователя .self .self 2 мая 2012 в 3:19

Исправил модули.

my_module.info
<?php
name = my module
description = this is my module
version = 7.x-dev
core = 7.x
?>
my_module.module
<?php
function page_example_menu(){
$items = array();
$items['foo'] = array(
'title' => 'Foo',
'page callback' => 'page_example_foo',
'access callback' => TRUE);
return $items;
}

function page_example_foo(){
$node = new stdClass();
$node->type = 'page';
$node->title = 'My node page';
$node->status = 1;
node_save($node);
}
?>
my_module.install
<?php
function my_module_install(){
$menu = array(
'menu_name' => 'primary-links',
'title' => 'example',
'description' => 'Descriptive text.'
);
menu_save($menu);
}

function my_module_uninstall(){
variable_del('items');
cache_clear_all();
}
?>

Ссылка в меню не добавляется. Вообще проблема в том, что когда ссылка давлялась, после перехода по ней получалась совсем пустая стнаница.

Аватар пользователя penexe penexe 2 мая 2012 в 7:01

my_module.module

function my_module_menu(){
  $items = array();
 
  $items['foo'] = array(
    'title' => 'Foo',
    'page callback' => 'my_module_page',
    'access callback' => TRUE,
    'menu_name' => 'main-menu',
    'type' => MENU_NORMAL_ITEM,
  );

  return $items;
}

function my_module_page() {
  if ($nid = variable_get('my_module_nid', 0)) {
    return node_page_view(node_load($nid));
  }
}

my_module.install

function my_module_install(){
  $node = new stdClass();
  $node->type = 'page';
  node_object_prepare($node);
 
  $node->title = 'My node page';
  $node->language = LANGUAGE_NONE;
  $node->status = 1;
  $node->uid = 1;
 
  if($node = node_submit($node)) {
    node_save($node);
    variable_set('my_module_nid', $node->nid);
  }
}

function my_module_uninstall(){
  variable_del('my_module_nid');
}

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 2 мая 2012 в 7:12

".self" wrote:
Ссылка в меню не добавляется

А где код для добавления ссылки в меню?

Смотри

http://api.drupal.org/api/drupal/includes%21menu.inc/function/menu_link_...

Но раз уж ты добавляешь ссылку через hook_menu, то просто пропиши там для $item

'menu_name' => 'primary-links',

Что делает variable_del('items'); ?
cache_clear_all(); походу тоже лишнее

Аватар пользователя K0r5hun K0r5hun 2 мая 2012 в 23:25

Вполне закономерно думаю выставить рабочий материал на обозрение Biggrin

А вообще в таких случаях очень помогает модуль с набором примеров, ссылка на который была озвучена xxandeadxx.
http://drupal.org/project/examples