Drupal Commerce Show Checkout в модальном
Ситуация; Попытка включить процесс оформления заказа в модальном окне. Пользователь нажимает ссылку "добавить в корзину", и модальное окно (или, альтернативно, загрузка ajax в div в том же окне) используется для отображения формы оформления заказа. Прямо сейчас мне не совсем понятен "способ Drupal", как правильно работать с commerce и ctools.
Ctools и его API - актуальный выбор. Я все готов рассмотреть альтернативы для Ctools. До сих пор я не смог включить форму оформления заказа в модал ctools. Код ctools отлично работает с такими формами, как регистрация пользователя, логин и т. Д.
По сути, наша конфигурация оформления заказа включает только 2 флажка на панели оформления заказа. Флажки-флажки включены в оформление заказа с помощью модуля "Панели полей группы Commerce Order". Таким образом, пользователь может пройти всего один шаг через процесс оформления заказа.
В зависимости от пользовательских данных и отправленных значений флажков, мы выполняем перенаправление или внутреннюю обработку платежей с помощью стороннего шлюза оплаты, с помощью которого я создаю пользовательский модуль оплаты, который отлично работает с Commerce.
Итак, вернемся к модальному.
Я построил функцию обратного вызова в соответствии с учебными примерами и примерами ajax ctools. Я пробовал несколько комбинаций, чтобы включить и отобразить форму проверки в модальном режиме, но безуспешно. Мне интересно, заключается ли проблема в коммерческом процессе оформления заказа или в функциях ctools, которые не могут собрать / обработать указанную форму оформления заказа. Или, возможно, просто то, что API Commerce / Checkout неправильно используется с функциями ctools. Я еще не знаю коммерцию на глубоком уровне, поэтому процедура внутреннего контроля все еще находится в неведении.
Я не буду сейчас включать здесь все комбинации кодов, просто хочу указать на рассмотренные альтернативы / направления:
-программно включить форму проверки с ctools:
<?php
$checkoutform = ctools_modal_form_wrapper('commerce_checkout_form_checkout', $form_state);
print ajax_render($checkoutform);
?>
Идентификатор формы определяется по умолчанию на странице оформления заказа с помощью form_alter. функция ctools_modal_form_wrapper не возвращает допустимый массив форм оформления заказа. Подозреваю, что ctools не поддерживает коммерческую форму извлечения из коробки. Я считаю, что $ form_state должны быть заполнены некоторыми дополнительными данными, прежде чем вызов функции может вернуть полный массив извлечения? Или, может быть, нам нужно получить массив формы оформления заказа другим методом?
Или же
-Программно включать включенные панели проверки, которые будут (?) Включать визуализированную форму проверки:
<?php
$panes_array = commerce_checkout_panes($conditions = array('enabled' => TRUE), FALSE);
?>
Или же
- Создайте страницу заказа и оформления заказа программно в функции обратного вызова и получите форму:
<?php
drupal_get_form('commerce_checkout_form_' . $checkout_page['page_id'], $order, $checkout_page);
?>
Этот вызов формы копируется из commerce_checkout.pages.inc. С помощью этого можно получить массив форм, который выглядит так, как будто он может содержать необходимые данные для продолжения. Я попытался отобразить массив с помощью ajax_render(), ctools_modal_render(), ctools_modal_form_render() .. в результате чего либо 200 Http Ошибка ajax или пустая форма (без видимых html или полей) или просто зацикливание gif загрузчика ajax в модальном режиме.
Или же
-Используйте пользовательскую форму для создания флажков и обработки пересылки данных в коммерцию:
... так что нам не нужно было бы включать фактическое "commerce_checkout_form_checkout", если случится так, что ctools отказывается работать с ним..
Или же
Программно включить страницы оформления заказа (включая панели / форму?):
используя функцию commerce_checkout_pages() и функцию рендеринга. Конечно, мы можем попытаться открыть URL-адрес извлечения по умолчанию в модале, но это будет включать в себя весь DOM в модале, что нам не нужно.
Спасибо! -Jussi
1 ответ
Простое решение, о котором я могу подумать, - использовать модуль Overlay Paths.
Попробуйте и дайте нам знать