我已经做了类似的事情,这是一个人为的例子,过于简化了,以查看您是否认为这是一个可行的解决方案:
这类似于定义数独网格,但数独网格的开放区域是开放座位:
$section1 = <<<SECTION
A,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,-,-,-,-,-,-,-
SECTION;
该座位表(数独网格)按产品存储。每个事件都是新产品。当有人添加到购物车(或购买,取决于业务规则)时,将更新网格:
$section1 = <<<SECTION
A,-,-,x,-,-,-,-,-,x,-,-,x,x,x,x,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,x,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,x,x,x,-,x,-,x,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,x,-,x,-,x,-,x
SECTION;
要在您的后端模型中打破座位的可用性,这很简单explode
:
$chart = array();
$section = trim(explode('\n', $product->getSeatingChart()));
foreach($section as $row){
$seats = explode(',',$row);
$rownum = array_shift($seats);
$chart[$rownum] = $seats;
}
我们可以$chart
变成布尔值:
array_walk($chart,function(&$s){
$s = $s == "-" ? true : false;
});
检查A14是否可用(0索引,请记住):
function checkAvailability($row,$seatnum){
return $chart[$row][$seatnum-1] == true;
}
上行空间:
实施非常简单:您的座位可用性属性由后端模型解析。它本质上是一个自定义的EAV属性。您还可以根据部分设置定价。每个部分都是具有新价格的新SKU。您可以在某些活动中禁止座位,而在其他活动中则不能。另外,无需携带实际库存,只需在结帐时为价格设置销售订单项目的数量即可。
等级也可以使用,因此您可以免费获得批量购买折扣;自定义选项可能是一个问题。
缺点:
预订座位将是您最大的麻烦,因为您没有库存。这就是这种方法瓦解的地方。业务规则将确定您在结帐时如何锁定/固定座位。