Я буду использовать модуль, который полностью аналагечен модулю из урока один. Я хочу добавить еще один чекбокс в форму и изменить title у первой страницы.
Изменить форму можно и без использования модуля. Смотрите в комметах sas@drupal.org: Как без использования модуля изменить форму.
Код двух файлов модуля uroktwo:
uroktwo.info
;$Id$
name = Uroktwo
description = Tutorial Change form with form_alter
core = 6.x
uroktwo.module
<?php ;$Id$ /***************************************************** * Implements hook_menu(). *******************************************************/ function uroktwo_menu() { $items = array(); $items['uroktwo'] = array( 'title' => 'What is the correct way to create MySql database? ', 'description' => 'lesson two form', 'page callback' => 'drupal_get_form', 'page arguments' => array('forma'), 'access arguments' => array('access content'), 'type' => MENU_NORMAL_ITEM, ); return $items; } /***************************************************** * Implements hook_perm(). *******************************************************/ function uroktwo_perm() { return array('access uroktwo content', 'access administration pages'); } // function uroktwo_perm() /***************************************************** * Implements hook_help(). *******************************************************/ function uroktwo_help($path, $arg) { $output = ''; //declare your output variable switch ($path) { case "admin/help#uroktwo": $output = '<p>'. t("Displays information about site") .'</p>'; break; } return $output; } // function uroktwo_help /***************************************************** * Implements function forma *******************************************************/ function forma($form_state) { $form = array(); $form['one'] = array( '#type' => 'checkbox', '#title' => t('create.databas()'), '#default_value' => variable_get('one', false), ); $form['two'] = array( '#type' => 'checkbox', '#title' => t('mysql_create_db()'), '#default_value' => variable_get('two', false), ); $form['three'] = array( '#type' => 'checkbox', '#title' => t('create_mysql()'), '#default_value' => variable_get('three', false), ); $form['four'] = array( '#type' => 'checkbox', '#title' => t('create_d()'), '#default_value' => variable_get('four', false), ); $form ['submit'] = array ( '#type' => 'submit', '#value' => t('Submit'), ); return $form; } // end forma /***************************************************** * Implements hook_block(). *******************************************************/ function uroktwo_block($op='list', $delta=0) { if ($op == "list") { $block = array(); $block[0]["info"] = t('uroktwo'); return $block; } else if ($op == 'view') { switch ($delta) { case 0: $block_content = ''; $block['subject'] = 'uroktwo'; $one= variable_get('one', false); $two= variable_get('two', false); $three= variable_get('three', false); if ($one or $two or $three) { if ($one) $block['content'] .= 'your answer create.database() was incorrect '; if ($two) $block['content'] .= 'your answer mysql_create_db() was correct '; if ($three) $block['content'] .= 'your answer create_mysql_db() was incorrect'; } break; } return $block; } } // end uroktwo_block
Для написания hook_form_FORM_ID_alter нам надо знать значение FORM_ID. Если это наш собственный модуль, то можно просто посмотреть на функцию формы.
function forma ($form_state)
forma в нашем случае и будет Form_ID, а hook будет называтся название_модуль_form_forma_alter. Для нашего модуля это будет uroktwo_form_forma_alter.
Второй способ найти Form_ID это посмотреть source code. Для этого я на локальном компьюторе открываю страницу с формой. В моем случае название сайта lesson. В хуке меню мы в этой строчке определили ($items['uroktwo'] = array()), что форму можно открыть, если набрать 127.0.0.1/lesson/uroktwo.
Откройте страницу с формой. Теперь в интернет эксплоурере идите Page -> view souce. С помощью ctrl – F ищим строчку в которой есть слово form. У меня это

То есть id = “forma”
Теперь собственно хук
<?phpfunction uroktwo_form_forma_alter(&$form,
&$form_state) {
$form['one']["#title"] = "I do do not know";
$form['five'] = array(
'#type' => 'checkbox',
'#title' => t('create_data()'),
'#default_value' => variable_get('five', false),
);
}
?>
Получилась полностью функциональная форма, но кнопка сабмит расположенна выше нового чекбокса.
Давайте это исправим. Добавим строчку weght в хук, и у нас получится
<?phpfunction uroktwo_form_forma_alter(&$form,
&$form_state) {
$form['one']["#title"] = "I do do not know";
$form['five'] = array(
'#type' => 'checkbox',
'#title' => t('create_data()'),
'#default_value' => variable_get('five', false),
);
$form ['submit'] ['#weight'] = 1000;
}
?>

На этом все.
P.S. Создавать новые модули надо сначала на отдельном, выделенном для этого сайте, а потом уже переносить в реальный сайт.
| Прикрепленный файл | Размер |
|---|---|
| tut2_1.png | 35.34 кб |
| tut2_2.png | 31.79 кб |
| tut2_3.png | 20.71 кб |
Источник: http://www.drupal.ru/node/74214
Добавить комментарий к записи "Урок 2. Создаем модуль на Drupal. Как с помощью хука hook_form_form _ID_ alter изменить любую форму в нашем или чужом модуле."
Чтобы комментировать, необходимо войти в систему.