“Büyük stadyum” biletleri satma


10

Stadyum bilet satışı yapmak istiyorum (ihtiyacım var).
Fikir, müşterinin bilet sayısını seçmesine izin vermektir (bunun için bir sınırlama gerekli olabilir, ancak bu büyük bir sorun değildir. Bence bunu arabada izin verilen maksimum miktar ile başarabilirim). Bundan sonra müşteri bir koltuk haritasından koltuklarını seçmelidir. Bundan sonra, ödeme işlemi her zamanki gibi yapılmalıdır.
Bunun için bir uzantı bilen var mı? Birini aradım ama ihtiyaçlarıma uygun bir tane bulamadım. Belki de google becerilerimin iyileştirilmesi gerekiyor.
Herhangi bir uzantı yoksa, bunun nasıl yapılacağına dair bazı işaretçiler harika olurdu.
Benim düşüncem şimdiye kadar bazı özel seçenekler (sektör, sıra, koltuk numarası ve belki diğerleri) ile 'Bilet' adlı bir ürün yaratmak.
Görünüm sayfası özel olarak hazırlanır, bu nedenle özel seçenekler gösterilmez. Bilet seçimi bir açılır pencerede veya yer paylaşımında gerçekleşecek ve seçime dayanarak sepete eklerken özel seçenekleri simüle edeceğim.
Ayrılmış koltukları işaretleyebilmem için koltuk haritası bir tabloda tutulacaktır. Stadyum her zaman aynıdır, bu yüzden bir harita yeterli olmalıdır.
Şimdiye kadar bu kadar. Bir şey eksik olmaya başlıyor. Herhangi bir işaretçi harika olurdu.
[EDIT]
3 özellikli (sektör, sıra ve koltuk numarası, her kombinasyon 1 adet mevcut olduğundan yapılandırılabilir bir ürün oluşturma olasılığı vardır, bu nedenle satın alındıktan sonra kullanılamazlar), ancak bu 30k + ürün ( Etkinlik). Reeeealy oraya gitmek istemiyorum. Bunu son çaresiz bir tatil olarak saklıyorum.. (Bu bir seçenek değildir, çünkü bir huuuuge performans sorununa neden olacaktır)

Yanıtlar:


10

Bunun gibi bir şey yaptım ve bu, tutarlı bir örnek ve bunun uygulanabilir bir çözüm olduğunu düşünüp düşünmeyeceğinizi görmek için aşırı basitleştirildi :

Bir sudoku ızgarası tanımlamaya benzer, ancak sudoku ızgarasının açık alanları açık koltuklardır:

$section1 = <<<SECTION

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

SECTION;

Bu koltuk şeması (sudoku ızgarası) her ürün için ayrı ayrı saklanır. Her etkinlik yeni bir üründür. Izgara, bir kişi sepete eklediğinde (veya işletme kurallarına bağlı olarak alışveriş yaparken) güncellenir:

$section1 = <<<SECTION

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

SECTION;

Arka uç modelinizde koltuk kullanılabilirliğini ayırmak basittir explode:

$chart = array();

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

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

$chartBoolelara dönüşebiliriz :

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

A14'ün mevcut olup olmadığını kontrol edin (0 endekslendi, unutmayın):

function checkAvailability($row,$seatnum){

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

}

Üst taraf:

Uygulama çok basit: oturma durumu özelliğiniz bir arka uç modeli tarafından ayrıştırılıyor. Bu aslında özel bir EAV özelliğidir. Bölümlere göre fiyatlandırma da ayarlayabilirsiniz. Her Bölüm yeni bir fiyatla yeni bir SKU'dur. Koltukları bazı etkinliklerde engelleyebilir, bazı etkinliklerde engelleyemezsiniz. Ayrıca, gerçek envanter taşımanıza gerek yok, fiyatlandırma için ödeme sırasında yalnızca müşteri siparişi kalemini ayarlayın.

Katmanlar da işe yarayacaktır, böylece ücretsiz olarak toplu alım indirimleri alırsınız; özel seçeneklerle ilgili bir sorun olabilir.

Dezavantaj:

Gerçek envanter taşımadığınız için koltuk rezervasyonu en büyük baş ağrınız olacak; bu yöntem bu noktada parçalanıyor. İş kuralları, ödeme sırasında koltukları nasıl kilitlediğinizi / tutacağınızı belirler.


1
+1 Woah. Birisi bir "Magento Programlama Sanatı" yazarsa, bu örnek olarak orada olsa iyi olur.
kalenjordan

Her şeyden önce aptal gibi hissettiğimi söylemek istiyorum. Tabii ki fiyatlandırma bölümler üzerinde olmalıdır. Bence fiyat her koltuktaydı. D'oh !. Donwside kadar, ben görmüyorum. Ben sütunlarla her olay için ayrılmış / satın sandalyelere sahip basit bir tablo olabilir event_id, sector, row, seat, status. Durum 'ayrılmış', 'satın alındı', 'mevcut değil' olabilir. Bu şekilde, sizden 2 saniye önce bir koltuğun rezerve edildiğini doğrulamak kolaydır. Ayrıca yeni bir ürün türü (etkinlik bileti) oluşturmayı düşünüyorum, bu yüzden ürün kurulumunda herhangi bir sorun olmadığından emin olacağım. Ayrıntılar için teşekkürler
Marius

Cevaplarınız zihnimdeki puzzle parçalarını bir araya getirmek için dikiş yapıyor. Performans konusunda hala endişeliyim, çünkü 4-5 gün içinde 30 bin bilet satmak sunucuları çok fazla streslendirebilir, ancak bu farklı bir konudur. Bu uzantı tamamlandıktan sonra ve müşteriden 'yeşil ışık' alırsam topluluk için kullanılabilir hale getirmeye çalışacağım.
Marius

30k biletleri - bu bir NASCAR stadyumu mu? :) Her bölüm için tek bir bilet ürününe sahip olmanın (etkinlik yapılandırması) katalog boyutunuzu önemli ölçüde azaltacağını düşünüyorum. Daha küçük db ayak izi daha sonra umarım tamamen belleğe sığar ...
philwinkle

1
@philwinkle Size bir e-posta gönderdim çünkü 20. yüzyılda yaşıyorum ve Twitter hesabım yok.
Marius

2

Yapılandırılabilir ürünlerin, bir koltuğun mevcut veya satılmış olması için gerçekten sadece bir işaretçi olduğu ve bunu bir Magento ürünü ile temsil etmenin aşırı bir ses gibi geldiğine dair harika bir fikir olmadığını kabul ediyorum.

Her Etkinlik için bir kayıt tablosu içeren özel bir modül öneririm, biletler daha sonra bu Etkinlik için olacak ve bir Etkinlik oluşturulduğunda bunu mağazada temsil etmek için basit bir ürün oluşturulacaktı. Etkinliğin referansını ve hangi koltuğun satın alındığını kaydetmek için bahsettiğiniz ön uç görünüm sayfasından doldurulmuş özel seçenekleri tutmak için bir ürün özelliği kullanabilirsiniz.


Teşekkürler. +1. Cevabınız philwinkle'ın yanıtıyla birleşince en azından beni doğru yönde başlatmalı.
Marius
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.