Спешу поделиться с вами очень радостной новостью. Наконец-то разработка электронного магазина для MODx под кодовым названием SBShop приобрела некий ощутимый и рабочий вид. Первая альфа!
Информации очень много, поэтому не буду вдаваться в лирику и перейду к делу. Описывать буду как все устроено, а не «как сделать магазин».
Итак, SBShop представляет собой некое расширение ядра MODx и в том числе содержит в наборе модуль, плагин, сниппет и некий свой API.
Структура магазина
Базовый каталог
Магазин привязывается к некому ресурсу в дереве (например «Магазин (15)»), который становится корнем магазина (условно
/magazin.html). Далее каталог имеет набор различных товаров, категорий с неопределенным уровнем вложенности.
ЧПУ строится на основе заданных псевдонимов у категорий/товаров и учитывает вложенность. Псевдонимы генерируются автоматически на основе стандартного плагина MODx.
Режимы работы, блоки
Режимом будем называть некую основную функцию на текущей странице, которую магазин должен для нас сделать. Среди стандартных режимов есть categories (список категорий), product (товар), breadcrumbs (крошки), cart (корзина) и checkout (оформление заказа).
Так как информация нам нужна разных видов на конечной странице (крошки, корзина, список категорий), то нам нужно как-то определять, что мы хотим получить. Есть три варианта использования какого-то режима:
1) Режим заданный по URL (
/magazin/checkout.html). Так работает оформление заказа
2) Базовый режим. Выводится прямым вызовом сниппета и зависит от текущего URL. В данный момент так работают вывод категорий и товара
3) Блок. Задается в параметре сниппета &mode (&mode=`breadcrumbs,cart`). Выводится через плейсхолдер. Это у нас крошки, корзина.
Этот список составлен в порядке приоритета и режим, который определился первым, считается
основным.
Категории
Тут все просто. Категории имеют разную вложенность и в них вложены товары.
Товары
Здесь уже поинтереснее. В товарах есть несколько стандартных возможностей:
— основные параметры: название, псевдоним, артикул, цена, описание
— изображения, которые автоматически создают нужный набор миниатюр при загрузке (задается конфигом)
— динамический список параметров в виде
ключ — значение
— динамический список опций, которые оказывают влияние на стоимость товара
Модуль управления
Имеет собственное дерево категорий/товаров и стандартный набор функций, которые вам известны по дереву ресурсов (создание, редактирование, публикация / отмена публикации, удаление / восстановление).
Показывает список имеющихся заказов.
Шаблоны
Основной шаблон страницы
Разумеется для разных страниц магазина нужны свои шаблоны. Чуть выше было описано как выбирается
основной режим. Именно он и определяет какой шаблон (из стандартных в MODx) будет использоваться (определяется конфигом).
Шаблоны категорий, товаров, корзины и т.д.
Разумеется они тоже задаются. Единственный момент, что сейчас они все лежат в специальных
.tpl файлах. Вид магазина полностью настраивается.
Технические моменты
Управление параметрами товара
Сейчас все задается в виде текста в специальном поле. Формат в виде примера:
Цвет==зеленый||Ширина==100 см||Высота==250 см
Узнаваемо? Отлично!
Управление опциями
Тоже в виде текста, но формат посложнее:
Размер оперативной памяти#3[16 Гб#1==+1510;32 Гб#2==+2900]||Звук#4[не устанавливать#3==;установить#4==+11740]
Размер оперативной памяти, Звук — названия опций
16 Гб, 32 Гб, не устанавливать, установить — значения опций
#1, #3, #2 — идентификаторы названий опций и значений (добавляются автоматически, писать их не нужно).
API
Ядро магазина автоматически загружается с помощью плагина и доступно на всем сайте через
$modx->sbshop. Через него можно например получить:
$modx->sbshop->config — массив конфигурации
$modx->sbshop->lang — языковые данные (Да!)
$modx->sbshop->oOrder — заказ
$modx->sbshop->oCustomer — данные пользователя
К множеству других возможностей можно получить доступ, используя различные классы. Например:
$oProduct = new SBProduct();
// загружаем товар по идентификатору
$oProduct->load(5);
// Выводим стоимость
var_dump($oProduct->getAttribute('price'));
Покопайтесь в коде, там все прокомментировано полностью.
Установка
Модуль
Название: SBShop
Код:
include MODX_BASE_PATH . 'assets/extends/sbshop/modules/module.inc.php';
Конфигурация:
&doc_start=Документ магазина;string;15
GUID: Включить
Укажите свой «Документ магазина», где у вас будет находиться корень каталога.
Плагин
Название: SBShop
События: OnLoadWebDocument, OnWebPageInit, OnLoadWebPageCache, OnPageNotFound
Код:
include MODX_BASE_PATH . 'assets/extends/sbshop/plugins/plugin.inc.php';
Сниппет
Название: SBShop
Код:
<?php
include MODX_BASE_PATH . 'assets/extends/sbshop/snippets/snippet.inc.php';
?>
Создание связи с модулем
Нужно зайти в модуль и добавить зависимости с плагином и модулем. Затем установить параметр «Импортировать общие параметры модуля» у плагина и модуля.
Резюмируем
Что сделано
— отточена концепция и видение магазина (в процессе работы)
— гибкая платформа (есть основное ядро с нужными функциями, есть режимы, которые подключаются динамически и легко добавляются)
— магазин отлично встраивается в MODx и можно писать свои дополнительные сниппеты
— заложены отличные возможности на будущее (в области управления параметрами и опциями)
— работает ЧПУ и настраиваемые шаблоны
— динамические параметры и опции
— предусмотрена мультиязычность
— работа без регистрации
— все данные хранятся в собственных таблицах и не создают большой нагрузки
— легкое управление
Важные недостатки
— магазин не подготовлен к большой нагрузке (напрочь отсутствует кеширование в каталоге, таблицы не имеют индексов)
— управление примитивно (изображения, параметры, опции, заказы)
— шаблоны в файлах и их нельзя задавать в чанках
— конфигурация в файле и ее нельзя менять из модуля
— сложная установка вручную
— нет важных режимов: доставка, скидка, склады и т.д.
— нет импорта информации
Пара заключительных слов
Работа проделана огромная. Я успел побывать в разных городах за это время, несколько раз передумать концепцию, провести множество ночей за компьютером… И все же я безумно счастлив, что сейчас могу показать вам результат. Да здравствует Open Source!
Скриншот
Бонус
Заодно хочу сразу представить вам первый рабочий магазин, который использует SBShop. 7plusov.ru —
Электронный магазин акриловых ванн в Екатеринбурге.
Спасибо ему огромное! Именно благодаря ему удалось проверить и довести SBShop в боевых условиях.
Магазин рабочий, поэтому с заказами аккуратнее. Если очень хочется проверить как работает заказ, то пишите test вместо ФИО.
Жду ваши отзывы, впечатления, пожелания и готовые доработки (а вдруг? ;-) ).
Ссылки
Скачать SBShop 0.1a
Страница проекта на Google Code:
code.google.com/p/sbshop/
Комментарии (114)
RSS свернуть / развернутьВ магазинчике ванн понравились фотогалереи к продукции ну и конечно блок «Возможные опции» — он полностью автоматически генерируется?
antonkuzmin
Фотогалерея генерится автоматом и ей можно любой вид придать.
Блок с возможными опциями разумеется тоже автоматически генерируется, как и параметры товара. Если значение одно, то берется один шаблон (у меня — чекбокс), если несколько, то другой (радио). Можно заказывать как с опциями так и без них. При этом товары с разными опциями будут отображаться раздельно в корзине, а с одинаковыми совмещаться (увеличивая количество).
Carw
Leverkuss
А так я думаю, что все постепенно будет обрастать новыми возможностями по мере их необходимости.
Carw
Желаю скорейшего развития, обрастания мясом и появления полноценного магазина под MODx ;)
pitbull
Carw
Смотрел-смотрел так и не въехал. Когда делал в своих сниппетах — пришлось с помощью .htaccess делать.
zluk
Carw
zluk
Carw
Carw
Интересно, но пока без надобности.
alex2read
Carw
tonatos
Carw
tonatos
tonatos
Задачи пока не стояло работать с таким объемом, поэтому не тестировалось. Но вопрос производительности все время учитывался, поэтому при необходимости это доработать не долго.
Carw
Agel_Nash
Спасибо за комментарий, благодаря ему у меня появилась идея разделить режим checkout на два.
Carw
Zinich
Carw
Zinich
Zinich
Carw
Zinich
Нужно заменить на:
С ценами надо очень обстоятельно подумать, как сделать. Таблицу-то общую вывести легко, но есть еще опции например.
Carw
Zinich
Carw
Также выложил исправленный архив, где исправлено несколько найденных ошибок.
Carw
Много знакомых вещей заметил(ЧПУ через 404, дерево и т.д.), рад что пригодились :)
Опции довольно хорошо продуманы, я до некоторых вещей не дошел когда продумывал свой вариант… :)
По-моему проделана огромная работа. Очень радует, что все эти задумки доведены до ума (ну или, по крайней мере, вышли в свет в рабочем виде) и теперь, я думаю, найдется много людей, которые сделают свой вклад. И, конечно, я тоже готов помочь чем смогу. :)
Ну довольно лирики :) Меня интересуют такие моменты:
1. Есть ли (планируется ли) возможность установки связей между товарами. (например, похожие товары, или товары, которые обычно выбирают вместе и т.п.)
2. Как насчет связи с Excel (импорт / экспорт)?
3. Еще интересная вещь — разделение покупателей на группы (розничные, оптовые, крупнооптовые и т.п.) + возможность предоставления скидок.
Это моменты, которые мне приходилось часто использовать в своей практике. Можно рассматривать их как вопросы относительно данной версии и как предложения по ее развитию (2 и 3-й пункты, думается мне, не реализованы в альфе).
Ну и еще было бы хорошо добавить возможность выбора вариантов оплаты (хотя уже об этом писали выше). Было бы отлично сделать возможность принимать webmoney / оплату по robokassa.
Искренне желаю успехов этому проекту (ну и его разработчику, разумеется) :)
burik
Ну так, не зря же мы рассуждали обо всем этом. Все здесь пригодилось. Хочу выразить огромную благодарность, в связи с этим. :-)
Здесь пока только заложена базовая возможность. Если посмотреть внутри, то информация о параметрах товара дублируется. В текстовом виде она сохраняется в поле товара (это позволяет сэкономить на запросах), а дополнительно в разобранном — в отдельной таблице. Отдельная таблица и будет служить для фильтрации.
Этим вопросом пока не успел заняться, но постепенно раздумываю над ним. Моя практика показывает, что Excell приводит к большим проблемам. Народ любит менять его структуру и это рушит обработку. Поэтому перспективнее видится использование некого текстового формата для импорта.
Тоже пока не занимался. У меня фактически сейчас реализована покупка без регистрации. Все покупатели сохраняются в специальную таблицу. Я предполагал затем сделать автоматическую регистрацию веб-пользователя для тех, кто указал email и таким образом полностью совместить управление правами в MODx и магазине. То есть в теории можно будет предоставлять какие-то материалы закрытые в том числе для конкретной группы (оптовиков).
Скидка тоже пока не реализована, но стоит в ToDo.
Работа действительно проделана огромная, но всяких замыслов еще больше. Сейчас я делаю экшен для вывода в YML.
Очень рад буду если кто-то начнет всем этим пользоваться и посильно помогать.
PS: А у тебя как с каталогом файлов? Заморозил? :)
Carw
Эх… Учеба, сессия, работа… В общем, я думаю, ясно :)
Там уже реализована некоторая базовая функциональность, но все же пока очень сыро все. Однако, даже в таком виде архив нашел свое применение :)
burik
Carw
Стало:
Carw
Carw
burik
Carw
burik
В любом случае Страна — точно лишнее поле, так как оно относится к производителю и должно указываться один раз для него. Хотя… вспоминая магазин ecco, можно вспомнить, что там обувь производится в куче стран. И на ценниках соответственно написаны разные страны.
Carw
burik
Упраздню страну производителя и группу товаров.
Carw
Запускаю модуль — и вижу эту ошибку:(
kollad
Carw
Вроде этой ошибки нету. Теперь в дереве появилось следующее
kollad
WampServer php 5.3.0
kollad
Carw
kollad
kollad
Carw
kollad
Carw
В дереве не работает не одна ссылка, нету картинок.
При нажатии на ссылку в дереве — firebug:modid is not defined
Так же firebug выдает ошибку top.tree.treeRebuild is not a function
1. $siteURL = 'http://'. $_SERVER['HTTP_HOST']. '/shop/'; — жесткая привязка к тому, что сайт будет находится в корне веб-сервера… пришлось мне добавить /shop/
2. $modid — почему-то подставляет автоматом 2, хотя ID = 13. Поменял через базу на id=2 — заработало
kollad
Это где?
Carw
kollad
Carw
kollad
Далее в шаблон добавляем:
Carw
kollad
Carw
Подскажите, что я делаю не так. Процесс установки. Вызов снипета [[SBShop &mode=`breadcrumbs,cart,categories,product`]]
[!SBShop &mode=`breadcrumbs,cart,categories,product`!]
происходит в документе id=48 Псевдоним catalog
Тут скрины health.tmweb.ru/index.php?id=49
biopsihoz
Если на сайте ничего не показывается, то советую попробовать то, что я написал немного выше.
Carw
biopsihoz
Carw
Категории и товары нужно дублировать? Привязываем весь магазин к документу(например, id=49). Создаем Категорию в SBShop, создаем товар в SBShop. Потом дублируем их в основной ветке:
id=49->дочерний документ — это будет категория,
id=49->дочерний документ->дочерний документ — это будет товар.
И все это так сказать «синхронизируется» псевдонимами?
biopsihoz
Carw
но есть несколько вопросов:
— в дереве товаров не отображается иконка. Показывает что не хватает файла ~/assets/modules/3b-modules/fileorganizer/images/tree/package.png, но где добыть :)
— не нашел тот арзив в котором добавили поля в описании товара, или какой файл нужно редактировать.
— не показывает картинки ни в списке товаров ни в самом просмотре товара, хотя картинки на сервер в каталог загрузились.
По ходу реализации думаю будут еще вопросы, но хотелось бы решить хотя бы эти, перед тем начать использовать и настраивать магазин
MrBobaH
Поля также в SVN еще только.
С картинками не знаю с чем связана проблема. Возможно она с тем, что нужно вручную создать папку assets/images/sbshop
Carw
Папка такая была и картинки туду же и загрузились в папку с именем 1 (наверное id товара)
MrBobaH
Carw
Вечерком потестю :)
Из SVN брать последние релизы?
MrBobaH
Carw
Тан написано что в и каких файлах править
MrBobaH
Так следить за деятельностью магазина гораздо проще.
Carw
Здесь 15 — это id корневого документа магазина, а «Документ магазина» это заголовок страницы?
И ещё у меня в дереве товаров почему-то ломается кодировка…
optimismous
Приведу на примере сайта 7plusov.ru — в корне лежит документ (а правильнее его называть «ресурс») с ID = 15. Он доступен по ссылке 7plusov.ru/magazin.html и там сразу видно разделы каталога и товары. Этот самый документ становится стартовым (корневым) для самого раздела электронного магазина. И прочие ссылки выглядят на подобии 7plusov.ru/magazin/uglovye-vanny/respekt.html
Так как магазин не обязан иметь привязку именно к 15 ресурсу, то нам нужно указать к какому ресурсу будет привязан магазин.
Это запись конфигурации. Здесь doc_start — переменная в PHP, Документ магазина — текстовый заголовок, который отображается в конфигурации, string — тип поля, а 15 — само значение переменной. Менять нужно только значение.
Carw
заработала только одна штука — ramie.ru/shop1/checkout.html
Как сделать чтобы можно было увидеть поля «Артикул», «Описание товара» и прочие на страницах товара?
chuvachon
Помогите разобраться плз…
chuvachon
optimismous
это и есть дерево товаров?
chuvachon
С кодировкой у меня такая же проблема на локалхосте.
optimismous
chuvachon
$modx->config['base_path'] != $_SERVER['DOCUMENT_ROOT']
т.е. если Modx стоит не в корне, модуль перестает работать
kvs
Carw
/assets/libs/treebuilder/treebuilder.frame.php
и в
treebuilder.nodes.php
$siteURL = 'http://'. $_SERVER['HTTP_HOST']. '/';
получается, что и будет работать только в корне ;)
kvs
Carw
kvs
Carw
kvs
Spirit412
Carw
Int
Carw
spfuture
Carw
IZE
IZE
Carw
но у меня есть один вопрос, как я понимаю магазин\каталог привязан к определенному ресурсу в древе документов. А можно ли обойтись без привязки ну или иметь возможность ее смены… объясню в чем дело…
Нужно создать магазинчик но сложность в том что из будет 2 в одной установке, т.е. будет реализована мультидоменность а так как товары хранятся в отдельной таблице, мы можем их использовать в этих 2х сайтах (или не отображать определенные товары при наличии фильтрующего значения).
т.е. 2 раздела\сайта со своей структурой страниц но общей базой товаров
подскажите по данному вопросу.
спасибо.
ilya_ib
Carw
просто необходимо реализовать данный функционал, и не хочется писать с 0, тем более что есть такой замечательный модуль…
кстати думаю данная система будет полезна не только мне, но и другим пользователям например для создания мультиязычного ресурса (ru, com)
ilya_ib
Carw
Как это примерно выглядит:
А вот и небольшой скриншот с управлением:
Как можно увидеть, здесь уже дело начинает доходить до более удобного интерфейса. И эта тенденция скоро обязательно захватит параметры, опции и т.д.
Carw
Carw
Carw
Немного заполнен только раздел Спецодежда
www.mobisnab.ru/
sasas
Carw
подскажите пожалуйста, на текущий момент удалось ли реализовать:
— личный кабинет
— скидки
— онлайн оплата
Или пока еще нет?
Int
Carw
хочу реализовать каталог в данный момент он весь в дереве документов 11 000 тыс, на что уже начинает ругаться хостер, что мол нагрузка очень большая.
Частично решил вопрос уменьшением вывода товаров на страничке с 100 до 20 и установкой в дитто &depth=1, но все же думаю что пора искать альтернативное решение размещение товаров.
+ немного изменил кеширования modx предлагаемое в комьюнити
количество товаров планируется +- 20 000 тестили ли с таким обьемом?
На данный момент посещения ресурса +- 700 посещений в день
Dmi3y
товаров в SBShop?
Dmi3y
Dmi3y
Carw
Нет, такой объем никто еще не тестил (или мне об этом не говорили) и сразу стоит отметить, что сейчас информация в SBShop не кешируется. Даже таблицы не имеют индексов в большинстве своем. На небольших объемах это не критично, а до больших я пока лично сам не добирался.
И, хотя я изначально думал о производительности, SBShop стоит применять пока только в случае желания (и возможности) его допиливать. При объеме 20 тыс надо будет позаботиться о кешировании, как минимум. Потенциал хороший, но работы еще куча. Поэтому еще альфа.
Carw
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.