Первым делом имплементируем хук hook_commerce_checkout_pane_info, в нем нам необходимо добавить информацию о создаваемой панели. Полный список свойств панели:
- pane_id - машинное имя панели, допускается использование строчных букв и цифр, а так же символов "-", "_"
- title - название панели
- name - имя панели, используемое при отображении на административных страницах, если не указано, используется title
- page - page_id на странице оформления заказа на которой панель должна появиться по умолчанию; по умолчанию checkout
- collapsible - будет ли панель сворачиваемая; по умолчанию FALSE
- collapsed - будет ли панель свернута по умолчанию; по умолчанию FALSE
- weight - вес панели; по умолчанию 0
- enabled - будет ли панель включена по умолчанию; по умолчанию TRUE
- review - будет ли панель включена в область просмотра; по умолчанию TRUE
- module - название модуля, который определяет панель; Этот параметр не должен заполняться при создании панели, он будет создан автоматически при загрузке панели
- file - путь к файлу, в котором хранятся callback функции для панели
- base - используется на создания имен callback функций, каждое название функции будет формироваться по умолчанию по шаблону [base]_[callback]
- callbacks - массив callback функций:
- settings_form($checkout_pane) - возвращает форму с настройками для панели
- checkout_form($form, &$form_state, $checkout_pane, $order) - возвращает форму, которая будет выводиться на панели в процессе оформления заказа
- checkout_form_validate($form, &$form_state, $checkout_pane, $order) - проверяет введенные данные в процессе оформления заказа и возвращает TRUE или FALSE
- checkout_form_submit($form, &$form_state, $checkout_pane, $order) - обработчик введенных данных в процессе оформления заказа
- review($form, $form_state, $checkout_pane, $order) - возвращает данные, используемые в области просмотра
И так, для начала объявляем саму панель:
/**
* Implements hook_commerce_checkout_pane_info()
*/
function moduleName_commerce_checkout_pane_info() {
$panes['moduleName'] = array(
'title' => t('Pane title'),
'page' => 'checkout',
'weight' => 1,
'file' => 'includes/moduleName.checkout_pane.inc',
'base' => 'moduleName_pane',
);
return $panes;
}
Далее создаем файл includes/moduleName.checkout_pane.inc и добавляем следующее:
/**
* Checkout pane callback: returns the pane's settings form.
*/
function moduleName_pane_settings_form($checkout_pane) {
$form['moduleName_pane_field'] = array(
'#type' => 'textfield',
'#title' => t('Pane settings field'),
);
return $form;
}
Вышеописанную функцию можно не добавлять, если у панели нет настроек. Далее добавляем функцию, которая будет выводить содержимое в процессе оформления заказа:
/**
* Checkout pane callback: returns the contents View for inclusion in the checkout form.
*/
function moduleName_pane_checkout_form($form, $form_state, $checkout_pane, $order) {
$checkout_form['moduleName_pane_field'] = array(
'#type' => 'textfield',
'#title' => t('Pane field'),
);
return $checkout_form;
}
Далее добавляем валидатор введенных данных:
/**
* Checkout pane callback: validation callback.
*/
function moduleName_pane_checkout_form_validate($form, &$form_state, $checkout_pane, $order) {
$pane_values = $form_state['values'][$pane_id];
if (empty($pane_values['moduleName_pane_field'])) {
drupal_set_message(t('Message.'), 'warning');
return FALSE;
}
return TRUE;
}
В конце добавляем обработчик введенных данных:
/**
* Checkout pane callback: submit callback.
*/
function moduleName_pane_checkout_form_submit($form, &$form_state, $checkout_pane, $order) {
// Что нибудь делаем с данными.
}