Вы здесь

Drupal Drupal Commerce, расширяем модуль для повторного заказа (Reorder module)

Ниже приведен очень простой кусок кода, который расширяет модуль для повторного заказа в Drupal Commerce reorder module.

Код добавляет AJAX форму на всех заказах в Drupal Commerce, что позволяет пользователям иметь возможность сделать повторный заказ со страницы заказа.

Эта функция формы работает точно так же, как и кнопка модуля, но после нажатия REORDER нету никакого редиректа и страница не перезагружаеться.

Если все таки нужен редирект после выполнения запроса его легко можно добавить в $form_state['redirect'].

  1. /**
  2. * Implements hook_entity_view().
  3. */
  4. function MODULE_commerce_entity_view($entity, $type, $view_mode, $langcode) {
  5. // If entity is an order, attach reorder form.
  6. if ($type == 'commerce_order') {
  7. $order_id = $entity->order_id;
  8.  
  9. $entity->content['commerce_reorder'] = array(
  10. '#type' => 'markup',
  11. '#markup' => render(drupal_get_form('MODULE_commerce_reorder_details_form', $order_id)),
  12. );
  13. }
  14. }
  15.  
  16. /**
  17. * Ajax form to handle reorders from the details page.
  18. */
  19. function MODULE_commerce_reorder_details_form($form, $form_state) {
  20. $form['actions'] = array(
  21. '#type' => 'container',
  22. );
  23. $form['actions']['reorder'] = array(
  24. '#type' => 'submit',
  25. '#value' => t('Reorder'),
  26. '#ajax' => array(
  27. 'callback' => 'MODULE_commerce_reorder_status_message',
  28. ),
  29. );
  30.  
  31. return $form;
  32. }
  33.  
  34. /**
  35. * Ajax callback, trigger status messages.
  36. */
  37. function MODULE_commerce_reorder_status_message($form, $form_state) {
  38. $commands = array();
  39. $message = drupal_set_message(t('Yay, reorder triggered.'));
  40.  
  41. $commands[] = ajax_command_prepend('div#messages', theme('status_messages', $message));
  42. return array('#type' => 'ajax', '#commands' => $commands);
  43. }
  44.  
  45. /**
  46. * Form submit handler, reorder line items using previous order id.
  47. */
  48. function MODULE_commerce_reorder_details_form_submit($form, $form_state) {
  49. if (is_numeric($form_state['build_info']['args'][0])) {
  50. $order = commerce_order_load($form_state['build_info']['args'][0]);
  51. commerce_reorder_helper($order);
  52. }
  53. }
Похожие материалы

Комментарии

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите код с картинки