Codeigniter количка: специални оферти, персонализирани цени по отношение на съдържанието на количката - как да подходим?

Успешно създадох просто уеб приложение с количка.

Сега трябва да приложа някои специални оферти.

Пример 1: ако клиентът е добавил 2 броя от някакъв продукт - вторият брой трябва да струва 30% по-малко.

Пример 2: ако клиент добави продукт_1 и продукт_2 - тогава трябва да добавя продукт 3 безплатно.

Няма проблем с внедряването на самата бизнес логика.

Проблемът е, че нямам подробна информация за продукта в Codeigniter Cart.

Има id, name, qty, price, subtotal и options полета в обект/масив на елемент.

За да преизчисля цените, без да правя заявка в базата данни при всяка промяна на количката, имам нужда от допълнителни полета, нещо като група/категория, които ми казват каква специална оферта се прилага за този продукт.

Освен това - трябва да съхраня някъде базовата цена, защото когато клиентът премахне някой продукт от количката - ще трябва да поставя стари цени там.

Къде трябва да поставя тази допълнителна информация?

Полето options вече се използва...

Не искам да правя запитвания към база данни при всяка актуализация на количката (искам моето уеб приложение да е много бързо и искам минимално натоварване на сървъра).

Да очаквам ли проблеми с тези rowid, когато променя цената на някой артикул от количката?

Питам за това, защото уникалният 'rowid' на количката е контролна сума md5 на елемент id и options масив. Приложението ми ще използва различни цени за един и същ продукт с едни и същи опции (една бройка нормална цена, друга 70% цена например).


person Kamil    schedule 08.12.2012    source източник


Отговори (2)


Codeigniter cart ще ви помогне да започнете, но за всякакъв вид персонализиране препоръчвам да направите своя собствена количка, ще бъде много по-лесно. Не забравяйте, че всичко, което количката трябва да направи, е да съхранява идентификатора на продукта и количеството. Това е. Всичко останало е с цел преглед на количката и създаване на поръчка. Общите суми на поръчката са отделни от количката, тъй като за повечето поръчки ще има други такси като доставка/данък. и/или може да има промоции, които променят крайната цена.

Така че може да решите да включите името на продукта в количката, за да го улесните за показване. И съхраняването на теглото на кораба е разумно. Но дори съхраняването на цената в количката може да бъде опасно. Ами ако цената бъде повишена или намалена, докато купувачът пазарува? Това може да са крайни случаи, но това ви показва колко „застояла“ може да стане информацията в количката.

Примерът, който цитирахте, е страхотен, защото много бързо виждате - количката е създадена да проследява един артикул в даден момент. За всякакъв вид логика като - ако купите 3 от тях, получавате третото безплатно - бихте могли да вградите този вид логика в количката - но много бързо ще се превърне в разхвърляни спагети!

така че какво да правя? вземете обекта cart - с вашите артикули от количката - и го предайте на промоционален модел. промоционалният модел преминава през всички артикули в количката - и СЛЕД това прави корекциите - които се предават на вашите методи за поръчка. като имаме промоционален модел, ние поддържаме бизнес правилата за промоции отделно от количката. Най-важното

Не променяме нищо в количката!

ние прилагаме промоцията към артикулите в количката. много по-гъвкав и е лесно да се покаже на човека колко пари е спестил, защото не сте се опитали да пренапишете първоначалната цена на количката.

person cartalot    schedule 09.12.2012
comment
Много полезен съвет относно актуализирането на цените, докато някой пазарува. Никога не съм обмислял подобна ситуация. Благодаря. - person Kamil; 20.01.2013

Разбрах, че options може да бъде масив от масиви и мога да съхранявам всякакви допълнителни данни там.

Ще използвам този масив и мисля, че няма нужда да разширявам стандартната библиотека Cart.

person Kamil    schedule 09.12.2012
comment
Това не ми се получи добре, особено когато се опитвах да актуализирам количката. Предполагам, че изграждането на собствен е единственият по-добър вариант. или просто разширяване на класа количка - person Jereme; 15.03.2016