Drupal 6 Form API - Передача значений
Я пытаюсь написать собственный модуль в Drupal 6 и пытаюсь добавить простую форму в административную область, используя API формы.
У меня есть форма, показывающая, но я не могу заставить ее снова заполниться при отправке и перезагрузке страницы. Я попытался передать второй параметр &$form_state в мою функцию hook_form, но это привело к ошибке об отсутствии второго параметра.
Я уверен, что это что-то простое, но я не могу понять это, вот мой код.module:
/*
* Implements hook_init().
*/
function movehub_featured_links_block_init() {
drupal_add_css(drupal_get_path('module', 'movehub_featured_links_block') . '/assets/css/movehub-featured-links-block-style.css');
}
/**
* Implements hook_theme().
*/
function movehub_featured_links_block_theme() {
return array(
'movehub_featured_links_block_manage' => array(
'template' => 'movehub-featured-links-block-admin-manage'
),
'movehub_featured_links_block_add' => array(
'template' => 'movehub-featured-links-block-admin-add',
'arguments' => array('link_id' => null)
),
);
}
function movehub_featured_links_block_manage() {
return theme('movehub_featured_links_block_manage');
}
function movehub_featured_links_block_add_form(&$form) {print_r($form);
$form = array();
$form['#attributes'] = array('enctype' => 'multipart/form-data');
$form['link_title'] = array(
'#type' => 'textfield',
'#title' => t('Link Title')
);
$form['image'] = array(
'#type' => 'file',
'#title' => t('Image')
);
$form['image_hover'] = array(
'#type' => 'file',
'#title' => t('Hover Image')
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Add!')
);
return $form;
}
/**
* Implements hook_menu().
*/
function movehub_featured_links_block_menu() {
$items = array();
$items['admin/featured_links'] = array(
'title' => 'Featured Links',
'description' => 'Add, view and edit featured links..',
'page callback' => 'movehub_featured_links_block_manage',
'page arguments' => array('movehub_featured_links_block_admin'),
'access arguments' => array('administer movehub_featured_links_block settings'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/featured_links/manage'] = array(
'title' => 'Manage',
'description' => 'Add, view and edit featured links.',
'page callback' => 'movehub_featured_links_block_manage',
'page arguments' => array('movehub_featured_links_block_admin'),
'access arguments' => array('administer movehub_featured_links_block settings'),
'type' => MENU_NORMAL_ITEM,
);
$items['admin/featured_links/add'] = array(
'title' => 'Add',
'description' => 'Add a new featured link.',
'page callback' => 'drupal_get_form',
'page arguments' => array('movehub_featured_links_block_add_form'),
'access arguments' => array('administer movehub_featured_links_block settings'),
'type' => MENU_CALLBACK
);
return $items;
}
function movehub_featured_links_block_add_form_submit($form, &$form_state) {
}
function movehub_featured_links_block_add_form_validation($form, &$form_state) {
}
2 ответа
Удалось найти очень простую ошибку, которая вызвала у меня эту проблему, а именно то, что я использовал неправильное имя хука при проверке.
Я использовал:
movehub_featured_links_block_add_form_validation
Так должно быть:
movehub_featured_links_block_add_form_validate
Ключевой частью является использование hook_validate вместо hook_validation. Ошибка новичка.
В вашей функции формы добавьте "#default_value" для каждого поля. (См. API формы Drupal 6 #default_value для получения дополнительной информации)
Ваше определение поля в форме будет выглядеть примерно так:
$form['link_title'] = array(
'#type' => 'textfield',
'#title' => t('Link Title'),
'#default_value' => 'My custom link title',
);
Затем API формы должен заполнить его заданным значением по умолчанию при первой загрузке формы. Делая это таким образом, если пользователь не проходит проверку и получает обратно форму для исправления своих ошибок, значения формы должны содержать любой обновленный текст, который они ранее вводили. Drupal заполняет форму с помощью form_state при обновлении формы для отображения, поэтому вам не нужно беспокоиться об этой стороне вещей, если вы просто установите #default_value.