Продаж квитків на "великий стадіон"


10

Я хочу (потрібно) здійснити продаж квитків на стадіон.
Ідея полягає у тому, щоб замовник міг вибрати свою кількість квитків (обмеження, яке може знадобитися, але це не велика проблема. Я думаю, що я можу досягти цього за допомогою максимальної кількості дозволених у кошику). Після цього замовник повинен вибрати свої місця з карти сидінь. Після цього процес оформлення каси повинен пройти як завжди.
Хтось знає розширення для цього? Я шукав його, але не знайшов такого, щоб відповідати моїм потребам. А може, мої навички google потребують удосконалення.
Якщо розширення немає, деякі вказівки щодо того, як це зробити, були б чудовими.
Поки що моя ідея - створити продукт під назвою "Квиток" з деякими спеціальними параметрами (сектор, рядок, номер місця та, можливо, інші).
Сторінка перегляду буде виготовлена ​​на замовлення, тому спеціальні параметри не відображатимуться. Вибір квитка відбудеться у спливаючому вікні або накладенні, і на основі вибору я буду імітувати спеціальні параметри при додаванні в кошик.
Карта місць зберігатиметься в таблиці, щоб я міг позначити заброньовані місця. Стадіон завжди однаковий, тому однієї карти має бути достатньо.
Про це поки що. Щось шва не вистачає. Будь-які покажчики були б чудовими.
[EDIT]
Є можливість створити продукт, що може настроюватися, з 3 атрибутами (сектор, номер рядка та місця, кожна комбінація у кількості наявних 1, тому вони не будуть доступні після їх придбання), але це означатиме 30 к + продуктів (за подія). Я reeeealy не хочу туди їхати. Я зберігаю це як останній відчайдушний захід.. (Це більше не є варіантом, оскільки це призведе до значної проблеми щодо ефективності)

Відповіді:


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

Перш за все хочу сказати, що я відчуваю себе ідіотом. Звичайно, ціни повинні бути на секціях. Я думаю, що ціна була на кожному сидінні. D'oh !. Що стосується нижньої сторони, я не бачу жодної. Я можу мати просту таблицю , яка утримує відведені / куплені місця для кожної події з колонами event_id, sector, row, seat, status. Статус можна "зарезервувати", "придбати", "недоступно". Таким чином, легко перевірити, чи хтось зарезервував місце, за 2 секунди до того, як ви зробили це. Я також думаю створити новий тип продукту (квиток на подію), тому я буду впевнений, що немає проблем із налаштуванням продукту. Дякую за деталі
Маріус

Ваші відповіді є швом, щоб скласти головоломки. Я все ще стурбований питанням продуктивності, адже продаж квитків за 30 тис. За 4-5 днів може сильно навантажити сервери, але це вже інше питання. Я спробую зробити це розширення доступним для спільноти, як тільки це буде зроблено, і якщо я отримаю «зелене світло» від замовника.
Маріус

Квитки на 30 тис. - це стадіон NASCAR? :) Я думаю, що наявність одного продуктового квитка на секцію, за подію (події конфігуруються) значно зменшить розмір вашого каталогу. Тоді менший слід ніг, то, сподіваємось, повністю вписується в пам'ять ...
philwinkle

1
@philwinkle Я надіслав вам електронний лист, оскільки я живу в 20 столітті і не маю акаунта в Twitter.
Маріус

2

Я погоджуюся, що настроювані продукти не є чудовою ідеєю, коли місце є насправді лише покажчиком на те, якщо його доступні чи продані, і представляти це продуктом Magento звучить як надмірність.

Я б запропонував спеціальний модуль, який би містив таблицю записів для кожної події, квитки потім були б на цю подію, і при створенні події буде створено простий продукт, який би представляв це в магазині. Ви можете використовувати атрибут продукту, щоб зберігати посилання на подію та користувацькі параметри, заповнені на сторінці перегляду спереду, яку ви згадуєте, щоб зберігати, яке місце було придбано.


Дякую. +1. Ваша відповідь у поєднанні з відповіддю від philwinkle має принаймні привести мене до правильного напрямку.
Маріус
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.