Fullcalendar作为Drupal商业结账的一部分

时间:2013-05-29 20:33:39

标签: drupal drupal-7 drupal-commerce

我正在使用Commerce模块套件在Drupal 7中建立一个电子商店。通过商店,每天提供物流服务。

结帐流程的一部分是向用户显示具有服务可用性的日历。应显示服务可用的日期,用户应该能够在结帐过程中选择一天,然后转到下一个结帐屏幕。

我想使用Fullcalendar脚本来显示用户的每日可用性:

http://arshaw.com/fullcalendar/

drupal中有一个相关的插件:

https://drupal.org/project/fullcalendar

我可以在我的网站上显示正常的完整日历页面。我真正陷入困境的部分是如何在结帐过程中创建一个fullcalendar窗格,并将用户选择存储在订单中。

我尝试过business extra panes模块来添加日历:

https://drupal.org/project/commerce_extra_panes

然而,我没有成功。我无法想出一种将fullcalendar块显示为窗格的方法。

我已经阅读了Drupal commerce,fullcalendar模块和商业额外窗格模块的文档,但我仍然无法弄清楚如何将fullcalendar显示为窗格。我也尝试过创建自定义模块,但我无法弄清楚如何以编程方式输出fullcalendar。

以前有人这样做过吗?有没有办法通过这些模块将这个功能添加到结账流程,还是我应该自己从头开始编写所有这些功能?

1 个答案:

答案 0 :(得分:4)

我坐下来再看看这个,找到了实现这个目标的方法。

起初,我尝试使用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;
}

以下是窗格本身包含的内容:

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;
}

隐藏字段“selected_date”存储日历的结果,然后将其添加到订单中。

然后我将fullcalendar添加到Drupal libraries文件夹中,并使用drupal_add_js将其添加到放置fullcalendar窗格的页面。

然后我创建了一个AJAX回调页面,用于返回与客户订单中给出的参数匹配的可用日期。

然后我通过覆盖Fullcalendar eventClick回调为每个事件添加了一个点击处理程序。因此,当用户点击某个事件时,它会在隐藏字段中设置事件日期,并提交当前的商务结帐窗格,然后继续下一个。

因此,我终于找到了该做什么,但它需要大量的摆弄,我做的很多部分没有记录得那么好,或者没有任何好的例子可以遵循:(

无论如何,这个问题的问题现在已经解决,我希望这有助于任何试图解决与Drupal商业结账部分相同(或类似)问题的人。