Доброго времени суток!
Вот уже неделю пытаюсь написать модуль для 7 друпала, который после своего включения
будет создавать страницу с произвольным контентом и помещать ее в меню Primary Links.
Также нужно сделать, чтобы при uninstall данного модуля, тестовая нода с содержимым страницы и ссылка из меню удалялись. При верстке должен же появляться табик такой Друпаловский,
чтобы сразу на странице была возможность редактирования содердания.
При отладке я включил вывод ошибок, но ошибок друпал не нашел. Очистка кэша так же ни к чему не привела. Посмотрел наверное все примеры, которые нашел гугл и яндекс. Вот наиболее толковые:
http://internetdevels.ru/blog/sozdanie-prostogo-modulya-field-api-v-drup...
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"
Комментарии
Праймери меню вроде одно из этих двух
<?php
'menu_name' => primary-links
'menu_name' => main-menu
?>
+ я не вижу соответствия пути np и пути к ноде
+ nodepage_links_page выкинуть
http://api.drupal.ru/api/file/developer/examples/page_example.module/6
Исправил модули.
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();
}
?>
Ссылка в меню не добавляется. Вообще проблема в том, что когда ссылка давлялась, после перехода по ней получалась совсем пустая стнаница.
my_module.module
$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
$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');
}
А где код для добавления ссылки в меню?
Смотри
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(); походу тоже лишнее
Ура! Все работает!
![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
Спасибо всем кто откликнулся и помог!!!
Вполне закономерно думаю выставить рабочий материал на обозрение![Biggrin](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/biggrin.gif)
А вообще в таких случаях очень помогает модуль с набором примеров, ссылка на который была озвучена xxandeadxx.
http://drupal.org/project/examples