Который час сижу, не вижу в чем я мог "переписать" не так подскажите, где я ошибся.
annotate.info
name = 'annotate'
description = 'allows users to annotate nodes.'
core = '6.x'
package = 'voljins homework'
version = '6.x-2'
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;
}?>
Комментарии
Стоит проверить:
1. Включили вы свой модуль на страничке с модулями.
2. Не забыли ли обновлять каждый раз страничку с модулями после внесения каких-либо правок в hook_menu()
3. Не забыли ли вы про access callback/access arguments (забыли), иначе просто ничего открываться не будет (даже у суперадмина). Начните пока разбираться с 'access arguements', потом дойдете до access коллбека:
'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 кнопки добавятся.
ах, забыл сюда решение добавить:)
да , правда, не ввел 'access arguments'. Понял, когда посмотрел в api.drupal.org помощь по созданию меню итема.
перепечатывал с книжки, теперь уже точно уверен что книжка не актуальна для текущей версии друпала (книга:cms drupal. руководство по разработке системы управления сайтом. джон вандюк. второе издание apress 2009.)
первый глюк хапнул уже на info файле, в списке модулей он отображался как не поддерживаемый, посмотрел другие модули и подкрутил его что б стал похожим на норм модуль - начал отображаться.
в любом случае огромное спасибо за решение:) надеюсь в будушем и сам смогу помоч.
а не подскажешь как решил проблему? купил тоже эту книжку, тоже на этом месте застрял
вставил строку 'access argurments' => array('administer site configuration'),
но пункт меню так и не появился в админке
а если форма будет содержать много элементов, то бонусом так-же будет разбухшая таблица variables и соответственно разбухшая переменная $GLOBALS['conf']. Насколько я знаю, system_settings_form хранит всё своё там. Форму уберете, а ее каки в реестре так и останутся, и будут всегда загружаться в $GLOBALS['conf'].
очень нужная инфа, спасибо. Сейчас посмотрим.
В данном месте - как совет, могу предложить дописать в .install файл в hook_uninstall очистку таблицы variable от своих переменных.
СОздавать же свою таблицу ради хранение 2-3 переменных, нет смысла.
ну дык, я ж говорю если элементов море. Тут подводные камни есть, и их учитывать надо, таблица то общая для всех. Опять таки, нужно не забывать про пересечение имен элементов формы с именами уже зарезервированных переменных, типа 'site_name'.
да совершенно верно.
Я лично использую префикс mymodulename_ для всех переменных, что засовываю в variable.
Извините, это я в своем посте опечатку сделал...
access arguments -- правильно (а не argurments)
Про hook_menu() можете подробно узнать на [ru-api=hook_menu]сайте АПИ[/ru-api].