Bán vé sân vận động lớn


10

Tôi muốn (cần) để thực hiện bán vé sân vận động.
Ý tưởng là để cho khách hàng chọn số lượng vé của mình (có thể cần phải có giới hạn nhưng đây không phải là vấn đề lớn. Tôi nghĩ rằng tôi có thể đạt được điều này thông qua số lượng tối đa được phép trong giỏ hàng). Sau đó, khách hàng phải chọn chỗ ngồi của mình từ bản đồ chỗ ngồi. Sau đó, quá trình thanh toán sẽ diễn ra như bình thường.
Có ai biết một phần mở rộng cho điều này? Tôi đã tìm kiếm một cái nhưng tôi không tìm thấy cái nào phù hợp với nhu cầu của mình. Hoặc có thể kỹ năng google của tôi cần cải thiện.
Nếu không có phần mở rộng, một số gợi ý về cách làm nó sẽ rất tuyệt.
Ý tưởng của tôi cho đến nay là tạo ra một sản phẩm có tên 'Ticket' với một số tùy chọn tùy chỉnh (khu vực, hàng, số chỗ ngồi và có thể các sản phẩm khác).
Trang xem sẽ được tùy chỉnh, vì vậy các tùy chọn tùy chỉnh sẽ không được hiển thị. Việc lựa chọn vé sẽ diễn ra trong một cửa sổ bật lên hoặc lớp phủ, và dựa trên lựa chọn tôi sẽ mô phỏng các tùy chọn tùy chỉnh khi thêm vào giỏ hàng.
Bản đồ chỗ ngồi sẽ được giữ trong một bảng để tôi có thể đánh dấu các ghế đã đặt. Sân vận động luôn giống nhau nên một bản đồ là đủ.
Đó là về nó cho đến nay. Một số đường nối bị thiếu. Mọi gợi ý đều tuyệt.
[EDIT]
Có khả năng tạo một sản phẩm có thể định cấu hình với 3 thuộc tính (số ngành, số hàng và số chỗ ngồi, mỗi kết hợp có sẵn trong 1 để chúng không có sẵn khi chúng được mua), nhưng điều này có nghĩa là 30k + sản ​​phẩm (mỗi biến cố). Tôi thực sự không muốn đến đó. Tôi đang giữ điều này như một khu nghỉ mát tuyệt vọng cuối cùng.. (Đây không còn là một tùy chọn vì sẽ dẫn đến sự cố hiệu suất huuuuge)

Câu trả lời:


10

Tôi đã làm một cái gì đó như thế này, và đây là một ví dụ giả định và đơn giản hóa quá mức để xem liệu bạn thậm chí có coi đây là một giải pháp khả thi hay không:

Nó tương tự như việc xác định lưới sudoku nhưng các khu vực mở của lưới sudoku đó là các ghế mở:

$section1 = <<<SECTION

A,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,-,-,-,-,-,-,-

SECTION;

Biểu đồ chỗ ngồi đó (lưới sudoku) được lưu trữ trên cơ sở mỗi sản phẩm. Mỗi sự kiện là một sản phẩm mới. Lưới được cập nhật khi ai đó thêm vào giỏ hàng (hoặc mua hàng, tùy thuộc vào quy tắc kinh doanh):

$section1 = <<<SECTION

A,-,-,x,-,-,-,-,-,x,-,-,x,x,x,x,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,x,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,x,x,x,-,x,-,x,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,x,-,x,-,x,-,x

SECTION;

Để tách rời chỗ trống trong mô hình phụ trợ của bạn, thật đơn giản explode:

$chart = array();

$section = trim(explode('\n', $product->getSeatingChart()));

foreach($section as $row){
    $seats = explode(',',$row);
    $rownum = array_shift($seats);
    $chart[$rownum] = $seats;
}

Chúng ta có thể biến $chartthành booleans:

array_walk($chart,function(&$s){
    $s = $s == "-" ? true : false;
});

Kiểm tra nếu A14 có sẵn (0 được lập chỉ mục, hãy nhớ):

function checkAvailability($row,$seatnum){

    return $chart[$row][$seatnum-1] == true;

}

Ưu điểm:

Việc thực hiện rất đơn giản: thuộc tính sẵn có chỗ ngồi của bạn được phân tích cú pháp bởi mô hình phụ trợ. Nó thực chất là một thuộc tính EAV tùy chỉnh. Bạn cũng có thể thiết lập giá dựa trên các phần. Mỗi Phần là một SKU mới với giá mới. Bạn có thể chặn ghế tại một số sự kiện chứ không phải ở những người khác. Ngoài ra, không cần phải mang theo hàng tồn kho thực, chỉ đặt số lượng trên mặt hàng đặt hàng trong quá trình thanh toán để định giá.

Các bậc cũng sẽ hoạt động, vì vậy bạn được giảm giá mua số lượng lớn miễn phí; đó có thể là một mối quan tâm với các tùy chọn tùy chỉnh.

Nhược điểm:

Đặt chỗ sẽ là vấn đề đau đầu nhất của bạn vì bạn không mang theo hàng tồn kho thực tế; đó là nơi phương pháp này sụp đổ. Quy tắc kinh doanh sẽ xác định cách bạn khóa / giữ ghế trong khi thanh toán.


1
1 Woah. Nếu bất cứ ai từng viết một "Nghệ thuật lập trình Magento", thì đây là một ví dụ tốt hơn.
kalenjordan

Trước hết tôi muốn nói rằng tôi cảm thấy mình như một thằng ngốc. Tất nhiên giá cả phải nằm trên các phần. Tôi nghĩ rằng giá cả ở mỗi chỗ ngồi. Ôi!. Theo như donwside, tôi không thấy. Tôi có thể có một bảng đơn giản giữ reserved / ghế mua cho mỗi sự kiện với các cột event_id, sector, row, seat, status. Trạng thái có thể được 'dành riêng', 'đã mua', 'không khả dụng'. Bằng cách này, đường may dễ dàng xác minh ai đó đã đặt chỗ trước 2 giây trước khi bạn thực hiện. Tôi cũng đang nghĩ đến việc tạo ra một loại sản phẩm mới (vé sự kiện) vì vậy tôi sẽ chắc chắn không có vấn đề gì khi thiết lập sản phẩm. Cảm ơn các chi tiết
Marius

Câu trả lời của bạn để đặt các mảnh ghép trong tâm trí của tôi. Tôi vẫn lo ngại về vấn đề hiệu suất, vì bán vé 30k trong 4-5 ngày có thể gây căng thẳng cho máy chủ rất nhiều, nhưng đây là một vấn đề khác. Tôi sẽ cố gắng cung cấp tiện ích mở rộng này cho cộng đồng sau khi hoàn thành và nếu tôi nhận được 'đèn xanh' từ khách hàng.
Marius

Vé 30k - đây có phải là sân vận động NASCAR? :) Tôi nghĩ rằng có một sản phẩm vé duy nhất cho mỗi phần, mỗi sự kiện (sự kiện là cấu hình) sẽ làm giảm đáng kể kích thước danh mục của bạn. Dấu chân db nhỏ hơn sau đó hy vọng hoàn toàn phù hợp với bộ nhớ ...
philwinkle

1
@philwinkle Tôi đã gửi cho bạn một e-mail vì tôi sống ở thế kỷ 20 và không có tài khoản twitter.
Marius

2

Tôi đồng ý các sản phẩm có thể định cấu hình không phải là một ý tưởng tuyệt vời, chỗ ngồi thực sự chỉ là một con trỏ nếu nó có sẵn hoặc được bán và đại diện cho điều này với một sản phẩm Magento nghe có vẻ quá mức.

Tôi muốn đề xuất một mô-đun tùy chỉnh bao gồm một bảng các bản ghi cho mỗi Sự kiện, sau đó vé sẽ dành cho Sự kiện này và khi tạo Sự kiện, một sản phẩm đơn giản sẽ được tạo để thể hiện điều này trong cửa hàng. Bạn có thể sử dụng thuộc tính sản phẩm để giữ tham chiếu đến sự kiện và các tùy chọn tùy chỉnh được điền từ trang xem giao diện người dùng mà bạn đề cập để lưu trữ chỗ ngồi đã mua.


Cảm ơn. +1. Câu trả lời của bạn kết hợp với câu trả lời từ philwinkle ít nhất sẽ khiến tôi bắt đầu đi đúng hướng.
Marius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.