Николай Ланец
17 сент. 2013 г., 16:15

Пре-релиз ShopModxBox-2.0.0

Всем, кто ждет с нетерпением новой сборки ShopModxBox, на которую был анонсирован сбор средств: есть две новости (хорошая и плохая).
Плохая: скорее всего выпуск сборки задержится на пару-тройку дней.
Хорошая: основная причина — более обширный функционал, чем был анонсирован в топике. Я реанимировал свой давний самый крупный проект (что интересно, я уже там использовал Smarty, хотя это был конец 11-го года). В том проекте было много интересных плюшек, которые я и решил перенести в эту сборку. В частности, там была оплата не только через платежные системы (можно было даже использовать несколько штук одной и той же системы, к примеру несколько робокасс (зачем? Там у нас была мультидоменность и партнерская программа, и надо было чтобы на разных доменах оплата проходила через разные робокассы для разных владельцев)), но и оплата с баланса. А так же не только продажа, но и подписки (при чем на подписки можно было завести сколько угодно тарифных планов, с различными сроками действия, количеством включенной в пакет внутренней валютой и т.п.). В общем, там был полноценный биллинг. И вот этот биллинг я и решил перенести на ShopModxBox. Само собой там тоже не было все идеально, в связи с чем это не пятиминутный перенос, а по сути переписка всего с нуля, просто тот проект помогает вспомнить какие ошибки были допущены и что можно было улучшить.
В итоге сразу хочу отметить, что новая сборка полностью переделана и обратной совместимости не имеет вообще. О таких вариантах говорилось изначально, но в данном случае хочу это отметить особенно, так как не только структура изменения претерпела, но и база данных.
Еще об изменениях: изменения в сборке реально кардинальные, и коснулись вообще всего, и главным образом корзины. Раньше корзина хранилась только в сессии, и в базу попадал только оформленный заказ. Здесь сразу несколько минусов есть, и главный для маркетологов — они не знают какие товары вызывали интерес, сколько было оформлено заказов, сколько не оформлено, какова конверсия и т.п. Так же если по какой-то причине сессия слетела (даже у авторизованного пользователя), то и корзина слетала. Сейчас есть куча вариантов в этом направлении, в том числе даже найти корзину не авторизованного пользователя, и передать ее ему, если он авторизовался. А если это был авторизованный пользователь, то он найдет свою корзину в личном кабинете в любой момент. И вот как раз в этом и кроется причина многих изменений. Во-первых, чисто идеологически. Я долго думал над тем, чем же на самом деле является корзина, и пришел к выводу, что это по сути своей Заказ, только еще не оформленный (то есть статус у него Новый). И Корзину (с товарами) от полноценного Заказа отличает только статус Оформлен. При этом не следует плодить сущности и выполнять всякие метаморфозы (то есть, к примеру, в момент оформления заказа перекидывать товары из Корзины в Заказ и т.п.). И очистка Корзины — это смена статуса на Отменен. То есть сам заказ никуда не деется, он просто отменяется (меняется статус). Для маркетологов это опять-таки полезная информация, так как для оценки поведения клиентов важно понимать что они делают, чтобы потом понять почему они так делают.
В связи с этим, хочу сразу отметить, что мы берем курс на очень серьезное решение, в котором очень много всего будет уделено именно маркетингу. Это все равно как некоторые ЦМСки выделяют именно как SEO-friendly, потому что они не только управляют контентом, но и имеют какие-то инструменты для только, чтобы делать сайт более индексируемым. А мы вот плюс к этому будем пытаться делать так, чтобы магазин не просто работал (показывал товары), а имел серьезную маркетинговую составляющую.
А вот сейчас полезная информация в плане идеологической структуры сайта.
Главное: появляется новый компонент Billing, в котором содержится все, что связано с оплатами, счетами, заказами, контрагентами и т.п.
Итак, мы определили базовую сущность — Заказ (Order). У заказа есть Статусы (OrderStatus). Есть связка Заказ-Товар (OrderProduct). Вот с этим как раз и работает корзина. Сама корзина осталась отдельным компонентом Basket, но процессоры она вызывает из компонента Billing.
Далее, на заказ уже может быть сформирован счет (Invoice). Счета так же имею статусы (InvoiceStatus).
Оплата (Payment). Это один из самых сложных моментов, и не буду грузить сейчас всеми тонкостями проводок, оплатой сразу по нескольким счетам и т.п. В общем, пока делаем попроще (один платеж — один счет, без всяких там транзакций и т.д. и т.п.), но в дальнейшем будем биллинг постепенно развивать. Так же Payment содержит информацию о том, через какую платежную систему был совершен платеж, ID счета в платежной системе и т.п.
В общем, все это — очень большой объем работ, и лучше подождать пару дней, и получить более комплексную сборку сразу, чем потом пытаться докинуть доработки (так как это будет сделать очень сложно, ибо все это — основа, и очень сложная. Там много изменений будет в самой базе данных и т.п.).
А чтобы оценить примерно объем работы, покажу пару скринов. Это основная модель (скрин 1) и процессоры основного компонента (скрин 2.) с того моего проекта.
?
?
А в ShopModxBox я постепенно хочу сделать еще больше функционала (само собой буду стараться, чтобы объем кода не был очень большой, и все было структурировано).
Так что, кому все это интересно, не стесняйте поддерживать рублем. Работы будет много и постоянно, а кушать надо :-)
Я согласен поддержать рублем, но опять месяц близится к концу :)
Алишер, заранее спасибо! :-)
Чисто для стимула, покажу пару скринов (сейчас верстается фронт на бутстрапе). Еще не закончено, но разница видна.
?
?
Я буду очень сильно ждать :)
Поддержал, будем ждать)
Таки уже дождались :-) Пишу релиз. Сегодня сборку выкачу.
Краткий список изменений: shopmodx.modxclub.ru/o_shopmodxbox.html
Можете пока пощелкать сайт. Авторизация через соцсети работает. Можно оформить заказ и даже оплатить (денег не надо, там тестовая робокасса сейчас).
?
?
?
Управление заказами тоже есть. Когда пользователь оплачивает заказ, его статус сразу меняется на Оплачен.
?
О, супер! Буду пробовать)

Добавить комментарий