Fil*_*tis 6 drupal drupal-7 drupal-commerce
我正在使用Commerce模块套件在Drupal 7中建立一个电子商店.通过商店,每天提供物流服务.
结账过程的一部分是向用户显示具有服务可用性的日历.应显示服务可用的日期,并且用户应该能够在结帐过程中选择一天并转到下一个结帐屏幕.
我想使用Fullcalendar脚本来显示用户的每日可用性:
http://arshaw.com/fullcalendar/
drupal中有一个相关的插件:
https://drupal.org/project/fullcalendar
我能够在我的网站上显示正常的完整日历页面.我真正陷入困境的部分是如何在结帐过程中创建fullcalendar窗格,并将用户选择存储在订单中.
我已尝试使用Commerce extra panes模块添加日历:
https://drupal.org/project/commerce_extra_panes
但是我没有成功.我无法想出一种将fullcalendar块显示为窗格的方法.
我已经阅读了Drupal commerce,fullcalendar模块和商业额外窗格模块的文档,但我仍然无法弄清楚如何将fullcalendar显示为窗格.我也尝试过创建自定义模块,但我无法弄清楚如何以编程方式输出fullcalendar.
有没有人这样做过?有没有办法通过这些模块将这个功能添加到结账流程,还是我应该自己从头开始编写所有这些功能?
我坐下来又看了一遍,找到了实现这个的方法。
起初,我尝试使用 fullcalendar Drupal 插件,但事实证明,对于此特定功能而言,它不必要地复杂,而且不太清楚如何将 fullcalendar 插件的输出添加到窗格中。在这种情况下,商务附加窗格也没有那么有用。
这就是我所做的:
1)我创建了一个模块,在其中设置了自定义窗格。这是设置商务结账窗格的模块部分:
function custom_checkout_commerce_checkout_pane_info() {
$panes = array(
'custom_checkout_date' => array(
'title' => t('Select a date'),
'base' => 'custom_checkout_date_pane',
'page' => 'route_date', // default checkout page
'weight' => -5,
'file' => 'includes/pane_route_date.inc' // Form functions
)
);
return $panes;
}
Run Code Online (Sandbox Code Playgroud)
以下是窗格本身包含的内容:
function custom_checkout_route_date_pane_checkout_form($form, &$form_state, $checkout_pane, $order) {
$pane_form['route_calendar'] = array(
'#type' => 'container',
'#id' => 'route_calendar'
);
$pane_form['selected_date'] = array(
'#type' => 'hidden',
'#id' => 'selected_date'
);
return $pane_form;
}
Run Code Online (Sandbox Code Playgroud)
隐藏字段“selected_date”存储日历的结果,然后将其添加到订单中。
然后,我将 fullcalendar 添加到 Drupal 库文件夹,并使用drupal_add_js将其添加到放置 fullcalendar 窗格的页面。
然后,我创建了一个 AJAX 回调页面,用于返回与客户订单中给出的参数相匹配的可用日期。
然后,我通过重写 Fullcalendar eventClick回调为每个事件添加了一个单击处理程序。因此,当用户单击某个事件时,它会在隐藏字段中设置事件日期并提交当前的商业结账窗格,然后继续下一个。
因此,我终于找到了该怎么做,但这需要大量的摆弄,而且我所做的很多部分都没有很好地记录下来,或者没有任何好的例子可以遵循:(
不管怎样,这个问题现在已经解决了,我希望这可以帮助任何试图解决 Drupal commerce 结帐部分相同(或类似)问题的人。
| 归档时间: |
|
| 查看次数: |
769 次 |
| 最近记录: |