出售“大体育场”门票


10

我想要(需要)实施体育场门票销售。
这样做的目的是让客户选择自己的票数(可能需要设置上限,但这不是什么大问题。我认为我可以通过购物车中允许的最大数量来实现此目的)。之后,客户必须从座位图上选择座位。之后,结帐过程应照常进行。
有人知道这个扩展吗?我搜索了一个,但找不到适合我需求的一个。或者,也许我的Google技能需要提高。
如果没有扩展名,那么有关如何执行扩展的一些指示将是很棒的。
到目前为止,我的想法是创建一个名为“ Ticket”的产品,其中包含一些自定义选项(部门,行,座位号,也许还有其他选项)。
视图页面将是自定义的,因此将不会显示自定义选项。票证选择将在弹出窗口或叠加窗口中进行,根据选择,当添加到购物车时,我将模拟自定义选项。
座位图将保存在桌子上,这样我就可以标记已预订的座位。体育场总是一样的,所以一张地图就足够了。
到此为止。缺少某些接缝。任何指针都很棒。
[编辑]
可以创建具有3个属性的可配置产品(部门,行号和座位号,数量中每个组合的可用数量为1,因此一旦购买就将不可用),但这意味着30k +产品(每事件)。我非常不想去那里。我将其保留为最后的手段。。(这不再是一种选择,因为它将导致性能下降)

Answers:


10

我已经做了类似的事情,这是一个人为的例子,过于简化了,以查看您是否认为这是一个可行的解决方案:

这类似于定义数独网格,但数独网格的开放区域是开放座位:

$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。您可以在某些活动中禁止座位,而在其他活动中则不能。另外,无需携带实际库存,只需在结帐时为价格设置销售订单项目的数量即可。

等级也可以使用,因此您可以免费获得批量购买折扣;自定义选项可能是一个问题。

缺点:

预订座位将是您最大的麻烦,因为您没有库存。这就是这种方法瓦解的地方。业务规则将确定您在结帐时如何锁定/固定座位。


1
+1哇。如果有人写过《 Magento编程的艺术》,那么最好以那里为例。
kalenjordan

首先,我想说我觉得自己是个白痴。当然定价应该是按节的。我想价格在每个席位上。噢!至于下侧,我什么都看不到。我可以有一个简单的表,保存的列每个事件保留/买座位event_idsectorrowseatstatus。状态可以是“保留”,“购买”,“不可用”。通过这种方式,可以轻松地验证有人在您预订之前2秒钟预订了一个座位。我也正在考虑创建一种新的产品类型(活动票证),因此我将确保产品设置没有任何问题。感谢您提供详细信息
Marius

您的答案将我脑海中的拼图拼凑在一起。我仍然担心性能问题,因为在4-5天之内售出3万张门票可能会对服务器造成很大压力,但这是一个不同的问题。一旦完成,如果我从客户那里获得了“绿灯”,我将尝试使该扩展适用于社区。
马里乌斯

3万张门票-这是NASCAR体育场吗?:)我认为每个部分,每个事件(事件是配置)只有一个票务产品,会大大减少您的目录大小。这样,较小的数据库占用空间便有望完全适合内存...
philwinkle

1
@philwinkle我发了一封电子邮件给您,因为我生活在20世纪,并且没有Twitter帐户。
马里斯(Marius)

2

我同意可配置的产品并不是一个好主意,座位实际上只是一个指针,如果它可用或已售出并用Magento产品表示,那听起来就太过分了。

我建议使用一个自定义模块,其中应包含每个事件的记录表,然后票证将用于该事件,并且在创建事件后,将创建一个简单的产品在商店中表示该事件。您可以使用产品属性来保存对事件的引用以及从您提到的用于存储购买座位的前端视图页面填充的自定义选项。


谢谢。+1。您的回答加上来自philwinkle的回答,至少应该使我朝着正确的方向开始。
马里乌斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.