情况;试图在模式窗口中包含结帐过程。用户单击“添加到购物车”-链接,然后使用模式窗口(或者将 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,这是我们不想要的。
谢谢!-尤西