Учусь создавать модули. inc, module, info создал, но не вижу в "главная > управление" свой модуль.

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

Аватар пользователя vol-jin vol-jin 28 августа 2009 в 11:20

Который час сижу, не вижу в чем я мог "переписать" не так Smile подскажите, где я ошибся. Blush

annotate.info

name = 'annotate'
description = 'allows users to annotate nodes.'
core = '6.x'
package = 'voljins homework'
version = '6.x-2'

annotate.module

<?php
function annotate_menu() {
$items['admin/settings/annotate']=array(
'title' => t('annotate settings'),
'description' => t('change how annotations behave'),
'page callback' => 'drupal_get_form',
'page arguments' => array('annotate_admin_settings'),
'type' => MENU_NORMAL_ITEM,
'file' => 'annotate.admin.inc',
);
return 
$items;
}
?>

annotate.admin.inc

<?phpfunction annotate_admin_settings() {
$options = node_get_types('names');
$form['annotate_node_types'] = array (
'#type' => 'checkboxes',
'#title' => t('users may annotate these content types'),
'#options' => $options,
'#default_value' => variable_get('annotate_nodetypes',array('story')),
'#description' => t('a text field will be avaible on these content types to make user-specific notes.'),
);
return $form;
}?>

Комментарии

Аватар пользователя zhylik zhylik 28 августа 2009 в 12:23

Стоит проверить:
1. Включили вы свой модуль на страничке с модулями.
2. Не забыли ли обновлять каждый раз страничку с модулями после внесения каких-либо правок в hook_menu()

3. Не забыли ли вы про access callback/access arguments (забыли), иначе просто ничего открываться не будет (даже у суперадмина). Начните пока разбираться с 'access arguements', потом дойдете до access коллбека:

$items['admin/settings/annotate']=array(
'title' => t('annotate settings'),
'description' => t('change how annotations behave'),
'page callback' => 'drupal_get_form',
'page arguments' => array('annotate_admin_settings'),
// Доступ к этой страничке будет иметь только юзер с соответствующим правом.
'access argurments' => array('administer site configuration'),
'type' => MENU_NORMAL_ITEM,
'file' => 'annotate.admin.inc',
);

4. Если хотите, чтобы по нажатию на кнопку "сохранить конфигурацию" все сохранялось автоматом, то вы в annotate_admin_settings() должны возвращать не $form, а return system_settings_form($form) -- там еще бонусом и 2 кнопки добавятся.

Аватар пользователя vol-jin vol-jin 28 августа 2009 в 12:31

ах, забыл сюда решение добавить:)
да , правда, не ввел 'access arguments'. Понял, когда посмотрел в api.drupal.org помощь по созданию меню итема.
перепечатывал с книжки, теперь уже точно уверен что книжка не актуальна для текущей версии друпала (книга:cms drupal. руководство по разработке системы управления сайтом. джон вандюк. второе издание apress 2009.)
первый глюк хапнул уже на info файле, в списке модулей он отображался как не поддерживаемый, посмотрел другие модули и подкрутил его что б стал похожим на норм модуль - начал отображаться.

в любом случае огромное спасибо за решение:) надеюсь в будушем и сам смогу помоч.

Аватар пользователя vikorn vikorn 26 сентября 2009 в 18:58

vol-jin wrote:
ах, забыл сюда решение добавить:)
да , правда, не ввел 'access arguments'. Понял, когда посмотрел в api.drupal.org помощь по созданию меню итема.
перепечатывал с книжки, теперь уже точно уверен что книжка не актуальна для текущей версии друпала (книга:cms drupal. руководство по разработке системы управления сайтом. джон вандюк. второе издание apress 2009.)
первый глюк хапнул уже на info файле, в списке модулей он отображался как не поддерживаемый, посмотрел другие модули и подкрутил его что б стал похожим на норм модуль - начал отображаться.

в любом случае огромное спасибо за решение:) надеюсь в будушем и сам смогу помоч.

а не подскажешь как решил проблему? купил тоже эту книжку, тоже на этом месте застрял
вставил строку 'access argurments' => array('administer site configuration'),
но пункт меню так и не появился в админке

Аватар пользователя kosilko kosilko 28 августа 2009 в 15:26

"zhylik" wrote:
Если хотите, чтобы по нажатию на кнопку "сохранить конфигурацию" все сохранялось автоматом, то вы в annotate_admin_settings() должны возвращать не $form, а return system_settings_form($form) -- там еще бонусом и 2 кнопки добавятся

а если форма будет содержать много элементов, то бонусом так-же будет разбухшая таблица variables и соответственно разбухшая переменная $GLOBALS['conf']. Насколько я знаю, system_settings_form хранит всё своё там. Форму уберете, а ее каки в реестре так и останутся, и будут всегда загружаться в $GLOBALS['conf'].

Аватар пользователя vol-jin vol-jin 28 августа 2009 в 16:05

Quote:

а если форма будет содержать много элементов, то бонусом так-же будет разбухшая таблица variables и соответственно разбухшая переменная $GLOBALS['conf']. Насколько я знаю, system_settings_form хранит всё своё там. Форму уберете, а ее каки в реестре так и останутся, и будут всегда загружаться в $GLOBALS['conf'].

очень нужная инфа, спасибо. Сейчас посмотрим.

Аватар пользователя gor gor 28 августа 2009 в 18:02

kosilko wrote:
"zhylik" wrote:
Если хотите, чтобы по нажатию на кнопку "сохранить конфигурацию" все сохранялось автоматом, то вы в annotate_admin_settings() должны возвращать не $form, а return system_settings_form($form) -- там еще бонусом и 2 кнопки добавятся

а если форма будет содержать много элементов, то бонусом так-же будет разбухшая таблица variables и соответственно разбухшая переменная $GLOBALS['conf']. Насколько я знаю, system_settings_form хранит всё своё там. Форму уберете, а ее каки в реестре так и останутся, и будут всегда загружаться в $GLOBALS['conf'].


В данном месте - как совет, могу предложить дописать в .install файл в hook_uninstall очистку таблицы variable от своих переменных.
СОздавать же свою таблицу ради хранение 2-3 переменных, нет смысла.

Аватар пользователя kosilko kosilko 28 августа 2009 в 19:54

"gor" wrote:
СОздавать же свою таблицу ради хранение 2-3 переменных, нет смысла.

ну дык, я ж говорю если элементов море. Тут подводные камни есть, и их учитывать надо, таблица то общая для всех. Опять таки, нужно не забывать про пересечение имен элементов формы с именами уже зарезервированных переменных, типа 'site_name'.

Аватар пользователя gor gor 28 августа 2009 в 21:56

kosilko wrote:
"gor" wrote:
СОздавать же свою таблицу ради хранение 2-3 переменных, нет смысла.

ну дык, я ж говорю если элементов море. Тут подводные камни есть, и их учитывать надо, таблица то общая для всех. Опять таки, нужно не забывать про пересечение имен элементов формы с именами уже зарезервированных переменных, типа 'site_name'.

да совершенно верно.
Я лично использую префикс mymodulename_ для всех переменных, что засовываю в variable.

Аватар пользователя zhylik zhylik 27 сентября 2009 в 11:46

Извините, это я в своем посте опечатку сделал...

access arguments -- правильно (а не argurments)

Про hook_menu() можете подробно узнать на [ru-api=hook_menu]сайте АПИ[/ru-api].