Drupal Commerce 以模态显示结帐
Posted
技术标签:
【中文标题】Drupal Commerce 以模态显示结帐【英文标题】:Drupal commerce show checkout in modal 【发布时间】:2014-04-22 14:45:52 【问题描述】:情况;试图在模式窗口中包含结帐过程。 用户单击“添加到购物车”-链接,然后使用模式窗口(或者将 ajax 加载到同一窗口中的 div 中)来显示结帐表单。现在,我不清楚如何与 commerce 和 ctools 正常工作的“Drupal 方式”。
Ctools 及其 API 是当前的选择。我都愿意考虑 Ctools 的替代品。到目前为止,我一直无法在 ctools 模式中包含结帐表单。 ctools 代码适用于用户注册、登录等表单。
基本上,我们的结帐配置在结帐窗格中仅包含 2 个复选框。 Checkbox 字段包含在“Commerce Order Fieldgroup Panes”模块的结帐中。 因此,用户基本上只需一步即可完成结帐流程。
根据用户数据和提交的复选框值,我们使用第三方支付网关进行重定向或内部支付处理,我一直在使用该网关构建自定义支付模块,该模块与 Commerce 配合良好。
回到模态。
我根据教程和 ctools ajax 示例构建了一个回调函数。我尝试了几种组合以在模式中包含和呈现结帐表单,但均未成功。我想知道问题是否出在商业结帐过程中,或者 ctools 功能无法收集/呈现指定的结帐表格。或者可能只是商务/结帐 API 未与 ctools 函数正确使用。我还不了解深层次的商业,所以内部结账程序仍然有点模糊。
我现在不会在这里包含所有代码组合,只是想指出考虑的替代方案/方向:
- 使用 ctools 以编程方式包含结帐表单:
<?php
$checkoutform = ctools_modal_form_wrapper('commerce_checkout_form_checkout', $form_state);
print ajax_render($checkoutform);
?>
表单 ID 是使用 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 或字段)或只是 ajax 加载程序 gif 在模态中循环.
或者
-使用自定义表单构建复选框并将提交数据转发给 Commerce:
..所以如果 ctools 拒绝使用它,我们就不需要包含实际的“commerce_checkout_form_checkout”..
或者
以编程方式包含结帐页面(包括窗格/表单?):
使用 commerce_checkout_pages() -函数和渲染函数。 当然,我们可以尝试在模态中打开默认结帐 url,但这会在模态中包含整个 DOM,这是我们不希望的。
谢谢! -朱西
【问题讨论】:
【参考方案1】:我能想到的一个简单解决方案是使用模块Overlay Paths
尝试并告诉我们
【讨论】:
以上是关于Drupal Commerce 以模态显示结帐的主要内容,如果未能解决你的问题,请参考以下文章
WooCommerce - 如何使用 ajax 动态加载结帐页面?
Drupal 7 Commerce Frontpage VIEW 不显示产品