情况;尝试在模式窗口中包含签出过程。用户单击"添加到购物车"链接,就会使用一个模式窗口(或者在同一窗口中向div加载ajax)来显示结账表单。目前,我还不清楚如何正确使用商业和ctools的"Drupal方式"。
Ctools及其API是当前的选择。我都愿意考虑Ctools的替代方案。到目前为止,我还无法将签出表单包含在ctools模式中。ctools代码可以很好地处理用户注册、登录等表单。
基本上,我们的签出配置在"签出"窗格中只包含2个复选框。复选框-字段包含在带有"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_formwrapper-函数不返回有效的签出表单数组。怀疑ctools不支持开箱即用的商务结账表单。我认为$form_state需要填充一些额外的数据,然后函数调用才能返回完整的checkout数组?或者我们可能需要使用其他方法来获取签出表单数组?
或
-以编程方式包括启用的签出窗格,该窗格将(?)包括呈现的签出表单:
<?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。。导致200Http-ajax错误或空白表单(没有可见的html或字段),或者只是模式中的ajax加载程序gif循环。
或
-使用自定义表单构建复选框并处理将提交数据转发到Commerce:
因此,如果ctools拒绝使用实际的"commerce_checkout_form_checkout",我们就不需要包含它了。
或
以编程方式包括结账页面(是否包括窗格/表单?):
使用commercecheckout_pages()函数和一个render函数。当然,我们可以尝试在模式中打开默认的checkout url,但这将在模式中包括整个DOM,这是我们不希望的。
谢谢!-Jussi
我能想到的一个简单的解决方案是使用模块Overlay Paths
尝试&让我们知道