ertttert
В модуле аннотирования администратору предоставлена возможность указать, какие типы нод должны поддерживать аннотирование (см. рис. 2.1). Рассмотрим этот механизм. Когда администратору сайта потребуется изменить параметры модуля аннотирования, нужно будет вывести форму, в которой администратор сможет выбрать необходимые параметры. В нашем пункте меню обратный вызов страницы указывает на функцию annotate_admin_settings
. Это означает, что при заходе на страницу http://example.com/?q=admin/config/annotate/settings
будет выполнен вызов sites/all/modules/custom/annotate/annotate.admin.inc
:
/** * Создатель формы. Настройка аннотаций. * * @ingroup forms * @see system_settings_form(). */ function annotate_admin_settings() {// Получение массива типов нод с внутренними именами в качестве ключей // и "дружественными именами" в качестве значений. Например: // array('page' => 'Basic Page', 'article' => 'Articles') $types =node_type_get_types() ;foreach ($typesas $node_type) { $options[$node_type->type] = $node_type->name; } $form['annotate_node_types'] =array( '#type' => 'checkboxes','#title' =>t( 'Users may annotate these content types') ,// Пользователи могут аннотировать эти типы контента '#options' => $options,'#default_value' =>variable_get( 'annotate_node_types',array( 'page')) ,'#description' =>t( 'A text field will be available on these content types to make user-specific notes.') ,// У этих типов контента пользователю будет доступно // текстовое поле для внесения личных примечаний. ); $form['annotate_deletion'] =array( '#type' => 'radios','#title' =>t( 'Annotations will be deleted') ,// Аннотации будут удалены '#description' =>t( 'Select a method for deleting annotations.') ,// Выберите метод для удаления аннотаций '#options' =>array( t( 'Never') , // Никогдаt( 'Randomly') , // Случайным образомt( 'After 30 days') // Спустя 30 дней ),'#default_value' =>variable_get( 'annotate_deletion', 0) // По умолчанию Never ); $form['annotate_limit_per_node'] =array( '#type' => 'textfield','#title' =>t( 'Annotations per node') ,// Аннотаций в ноде '#description' =>t( 'Enter the maximum number of annotations allowed per node (0 for no limit).') ,// Введите максимальное количество аннотаций, допустимое для ноды // (0 — неограниченное). '#default_value' =>variable_get( 'annotate_limit_per_node', 1) ,'#size' => 3 );return system_settings_form( $form, TRUE) ; }
Здесь добавлен переключатель для указания, когда следует удалять аннотации, и текстовое поле для ввода количества аннотаций, разрешенных для ноды (реализация этих усовершенствований оставлена в качестве самостоятельного упражнения). Вместо управления обработкой нашей формы выполняется вызов
Annotations per node
(Аннотаций на ноду), действительно числом? Для этого достаточно добавить проверку, является ли значение числовым, в существующую функцию проверки (sites/all/modules/custom/annotate/annotate.admin.inc
и использовать ее для генерации ошибки, если что-то не подойдет:
$limit = $form_state['values']['annotate_limit_per_node'];Когда впоследствии Drupal обрабатывает форму, она выполняет для проверки данных обратный вызовif (!
is_numeric( $limit)) {form_set_error( 'annotate_limit_per_node',t( 'Please enter a number.')) ; } ...
annotate_admin_settings
) с добавлением Всего комментариев: 0 | |