1

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

谢谢!-尤西

4

1 回答 1

0

我能想到的一个简单解决方案是使用模块Overlay Paths

尝试并告诉我们

于 2014-04-23T04:59:08.557 回答