函数hook_line_item()位于uc_order.module模块中:
<?php
hook_line_item()
?>
描述:
hook_line_item是用来定义行项的,附带在订单的下面。一个行项可以表示收费、费用,以及订单的总计。默认的行项包括了小计和总计行项,税收行项,以及运送行项。还有一个更以本的行项,网店管理员可以使用它来向手工创建的订单添加额外的费用和折扣。模块开发者,可以使用这个钩子为他们的网店定义新的行项。常见的例子,就是优惠券,网店允许自己的客户使用优惠券,这个时候就可以把优惠券实现为一个行项。
一旦在hook_line_item中定义了一个行项,Übercart就会与它进行交互,包括多种不同的方式。最主要的一种方式是,你为这个行项声明一个回调函数。函数的结构如下所示:
<?php
function callback_name($op, $arg1) {
switch ($op) {
case '...': // Actual case values described in table below.
break;
}
}
?>
当调用这个函数时,$op的值用来声明Übercart期望接受的返回信息的类型。下面列出了目前的所有情况:
$op |
使用/返回 值 |
|||||||||||||||
load |
当行项被加载时,没有存储在数据库中的项将通过这个函数来加载进来。$arg1是订单对象。期望的返回值,是一个关联数组,包含了以下键:
例如: <?php |
|||||||||||||||
display |
对于那些设为仅仅用来显示的行项,当显示订单时,使用这个$op就可以调用它们的回调函数。$arg1是订单对象。期望的返回值,和前面的load的完全一样。 |
|||||||||||||||
cart-preview |
在客户结算期间,支付窗格将会显示一个预览页面,里面包含了行项和订单。对于页面的初始化加载,每一个行项都回通过这个$op来调用它们的回调函数。通过使用drupal_add_js()来调用下面描述的Javascript函数set_line_item(key, title, value, weight),从而设置行项的默认值。$arg1是一个用于该行项的产品对象的数组,当然,这些产品对象当前出于购物车中。注意:这个不是必须的。这个仅用于默认的显示。结算页面的其它窗格,可以通过在它们自己的Javascript文件中使用set_line_item()来向这个列表中动态的添加项目。这个函数的参数如下所示:
例如: <?php |
返回值:
你的钩子应该返回一个关联数组的数组,就像前面的例子一样。数组中的每一项,都代表着一个单独的行项,它将使用下面的键:
键 |
类型 |
值 |
id |
string |
行项的内部ID |
title |
string |
在各种界面显示给用户的行项的标题。使用t(). |
callback |
string |
行项的回调函数的名称,可用于不同操作。 |
weight |
int |
行项在列表中的顺序;重量越小,越靠前。 |
stored |
bool |
行项是否保存在数据库中。可通过订单编辑页面修改的行项,都是TRUE。 |
add_list |
bool |
行项是否包含在订单编辑页面的“添加一个行项”的下拉选择框中。 |
calculated |
bool |
行项的值,是否应该包含在订单总计中。(例如:对于运费行项,返回TRUE,而对于小计行项,则返回FALSE,因为产品价格已经包含进了总额中) |
display_only |
bool |
如果这个行项仅仅用来显示信息,而在其它地方不进行计算的话,返回TRUE,否则返回FALSE。(例如:总计行项仅仅用来在行项列表的底部显示订单的总计,此时就返回TRUE)。 |
例如:
<?php
function uc_order_line_item() {
$items[] = array(
'id' => 'generic',
'title' => t('Empty Line'),
'weight' => 2,
'default' => FALSE,
'stored' => TRUE,
'add_list' => TRUE,
'calculated' => TRUE,
'callback' => 'uc_line_item_generic',
);
return $items;
}
?>
注意,行项是定义在一个数组中的,这个和Drupal的hook_menu中的菜单项非常类似