7

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

结帐过程的一部分是向用户显示一个包含服务可用性的日历。应该显示服务可用的日期,并且用户应该能够选择一天作为结帐过程的一部分,然后转到下一个结帐屏幕。

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

http://arshaw.com/fullcalendar/

drupal中有一个相关的插件:

https://drupal.org/project/fullcalendar

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

我已经尝试过商务额外窗格模块来添加日历:

https://drupal.org/project/commerce_extra_panes

然而我并没有成功。我想不出一种将完整日历块显示为窗格的方法。

我已经阅读了 Drupal commerce、fullcalendar 模块和 commerce extra panes 模块的文档,但我仍然不知道如何将 fullcalendar 显示为一个窗格。我也尝试过创建一个自定义模块,但我不知道如何以编程方式输出 fullcalendar。

有没有人这样做过?有没有办法通过这些模块将此功能添加到结帐过程中,或者我应该自己从头开始编写所有功能?

4

1 回答 1

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 库文件夹,并使用drupal_add_js将其添加到放置 fullcalendar 窗格的页面中。

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

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

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

无论如何,这个问题中的问题现在已经解决了,我希望这可以帮助任何试图解决 Drupal 商业结帐部分的相同(或类似)问题的人。

于 2013-06-06T17:49:04.207 回答