Как бы вы занялись «дизайном» корзины в проекте Zend Framework? - PullRequest
4 голосов
/ 15 марта 2011

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

Как пойдет оформить корзину?

Хотя две модели Model_Cart и Model_Cart_Item используются вместе с Zend_Session для хранения корзины в сеансе.

Каковы ваши отзывы?

Как бы вы пошли, чтобы сделать это? Что я должен знать о написании системы корзины?

Обратите внимание, что мне нужна простая система, мне даже не нужно работать с количеством

Ответы [ 3 ]

3 голосов
/ 15 марта 2011

Если ваши модели легко сериализуются, вы можете просто добавить их к данным сеанса, например,

// storage
$cartNamespace = new Zend_Session_Namespace('cart');
$cartNamespace->cart = $cart; // $cart is a Model_Cart with items

// retrieval
$cartNamespace = new Zend_Session_Namespace('cart');
if (isset($cartNamespace->cart) {
    $cart = $cartNamespace->cart;
}

POPO (простые старые объекты PHP) очень легко сериализуются.Если ваши модели содержат какие-либо специфические свойства среды выполнения (соединения с БД, дескрипторы файлов и т. Д.), Вам следует реализовать интерфейс Serializable для обработки любой сложности.

Вы также можете рассмотреть возможность сохранения данных моделибаза данных.Есть некоторые обсуждения SO относительно хранения данных корзины покупок, которые могут помочь вам принять решение.

1 голос
/ 16 марта 2011

Создание классов Cart и Cart_Item.Класс Cart должен содержать методы для добавления и удаления Cart_Items, которые хранятся в виде массива в классе Cart.Также создайте метод сохранения, который сериализует состояние корзины в сеансе, я хотел бы также сериализовать корзину в таблицу базы данных, используя стандартную модель Zend_Db_Table_Abstract.

Я создаю действия контроллера, которые принимают идентификатор продуктаи количество и передать их в методы добавления / удаления класса Cart, после чего сохранить корзину.

Я считаю полезным реализовать шаблон singleton для системы такого типа, особенно если в Корзинеобновляет себя из базы данных по конструкции.

Поскольку Алекс упоминал, что помощники также полезны, мне нравится использовать помощник вида, который будет извлекать текущий экземпляр корзины и позволит вам легко извлекать промежуточные итоги и итоги.в представлении.

Кроме того, condsider использует интерфейсы Iterator, Countable и ArrayAccess, чтобы вы могли циклически перемещаться по корзине, чтобы получить все ваши товары.

Надеюсь, это поможет!

1 голос
/ 15 марта 2011

Вы на правильном пути.

Я предлагаю создать класс помощника действия контроллера для помощи в выполнении этой задачи.Это сделает код вашего контроллера менее громоздким.Вот хороший учебник о помощниках действий .

Дайте классу помощника некоторый базовый метод:

$this->_helper->card->add($product, $qty);
$this->_helper->card->remove($product);
$this->_helper->card->getItems();

Что-то вроде этого

Что я должен знать о написании системы корзины?

Это больше для части оформления заказа ... Относится к США.Клиент должен платить налоги, если местоположение вашей компании совпадает с состоянием пользователя.Например, если ваш бизнес зарегистрирован во Флориде и клиент проживает во Флориде, клиент должен платить налоги, но клиенты из Нью-Йорка этого не делают.

...