Урок 2. Создаем модуль на Drupal. Как с помощью хука hook_form_form _ID_ alter изменить любую форму в нашем или чужом модуле.

Я буду использовать модуль, который полностью аналагечен модулю из урока один. Я хочу добавить еще один чекбокс в форму и изменить 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 изменить любую форму в нашем или чужом модуле."

Чтобы комментировать, необходимо войти в систему.

© 2009 Обзор CMS