Интернет-магазин miniShop для MODX Revolution

    Хочу представить сообществу компонент для MODX Revolution, легко превращающий обычный сайт в интернет-магазин.



    Он не претендует на звание лучшего магазина в обозримой вселенной, и наверняка проиграет всем специализированным под эту цель движкам, но в нише магазинов для Revo он будет ровно третьим.
    После VisionCart и Shopkeeper.

    Итак, вот мой miniShop. На демо сайте можно посмотреть все как снаружи, так и в административной части (логин и пароль — demo).

    Расширение полностью open-source, бесплатное. Кому интересно — подробности под хабракатом.


    Установка


    Проводится через менеджер пакетов, парой кликов сразу из репозитория. Оттуда же будут получаться и обновления (магазин в жесткой разработке).
    После установки нужно создать 2 шаблона для категорий и товаров, и указать их в настройках.

    Категории и товары


    Все товары и категории располагаются в дереве ресурсов. Для отличия одних от других использовать разные шаблоны. Также, категории должны быть контейнерами.
    Шаблоны для них должны быть указаны в системных настройках компонента (Переключите namespace на minishop).
    Там же нужно изменить номер статуса для нового заказа (1 по умолчанию, уже установлен)
    Перед разработкой магазина я проводил опрос, как же лучше хранить товары — в собственных таблицах, или в ресурсах. И хотя большинство проголосовало за таблицы, в процессе обсуждения я понял, что буду делать все в ресурсах.

    И вот почему:
    1. Можно использовать ТВ параметры.
    2. Можно использовать контексты.
    3. Можно использовать все стандартные сниппеты.
    4. Можно использовать группы ресурсов и права доступа.
    5. Из коробки работает кэширование.
    6. Дружественные урлы для каждого товара.
    Можно продолжить самостоятельно.

    Недостатков я не вижу, скорость вполне на уровне (на демо сайте забито 15000 товаров). Все товары создаются и меняются прямо из компонента. Лазить в дерево ресурсов для этого не нужно.

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


    Склады


    Компонент поддерживает неограниченное количество складов.
    Отдельно настраиваются параметры для каждого. Доставка, адрес, почта для приема сообщений о заказе и т.д.
    Вы можете не использовать эту возможность, но как минимум один склад для работы должен быть (по умолчанию создается).

    У товаров есть пока 4 основных свойства: артикул, изображение, цена и остаток. Все 4 свойства привязаны к соотношению склад-товар. Также добавлены 3 дополнительных свойства под разные нужды. 2 varchar(255) и 1 text.


    То есть, у вас как бы все товары одновременно есть на всех складах, но везде могут иметь разные свойства (или одинаковые). Это дает богатые возможности по управлению.

    Отображать товар на сайте можно с помощью остатка на текущем складе. Если остаток 0 — не выводить товар, или не давать заказать.

    Мультикатегории


    Это фишка, ради которой (но не только!) и пришлось писать свой собственный магазин.



    У каждого товара есть своя основная категория (контейнер, в котором он находится) и могут быть дополнительные — их вы задаете в его настройках. Ограничений нет.

    При выводе товаров через сниппет msGetResources все товары извлекаются с учетом категорий. Есть также и сортировка по всем свойствам, как ресурса, так и товара.

    Этот сниппет идет в комплекте и является модифицированным getResources (используется также его класс).

    Таким образом, один товар выводится в разных категориях.

    Статусы


    Можно создать сколько угодно статусов для заказов и переключать их в любом порядке. Каждому статусу можно настроить уведомление на почту покупателя и менеджера (разные заголовки тела писем).



    При установке создается статус «Новый» с включенными уведомлениями.
    Уведомление менеджеру идет на почту склада (можно указать их там несколько, через запятую).

    При переключение статуса заказа в компоненте это действие сохраняется в историю изменения заказа и высылается (или не) уведомление, в соответствии с настройкой этого статуса.

    Каталог на сайте



    Все операции с корзиной, добавлением\удалением товаров, оформлением заказа работают через Ajax.
    Обязательны jquery 1.7+, jquery.form 2.8+ и friendly urls.

    Вообще, на мой взгляд, фронтенд пока слабоват, но не понятно что народ хочет.
    У всех разные требования к оформлению заказа, регистрации юзеров и т.д. Поэтому смотрите $_SESSION['minishop'] и пишите свои сниппеты, если что.

    В моем варианте оформления заказа юзер идентифицируется по email, если его нет в базе, то он регистрируется со случайным паролем (потом можно сделать сброс и изменение на свой — вот и регистрация =)). Заказ и адрес доставки привязываются к этому юзеру. Адрес можно изменить в админке у свойств заказа. Кол-во товаров там же можно поменять.

    В основном классе есть зачатки для выбора из этих адресов при заказе, но пока все закомментировано — ибо нестабильно.

    После оформления заказа сессия юзера очищается.

    При работе с корзиной возвращается json строка со статусом, сообщением, кол-вом товаров и суммой корзины.



    Личный кабинет


    Эта плюшка выпущена буквально сегодня. Требуется авторизация (сниппеты Login, или Loginza).

    Кабинет сделан на ExtJS, так же как и админка MODX, в него грузятся все скрипты из менеджера, а стили оформления берутся с CDN Sencha.

    С одной стороны выходит тяжеловато, а с другой — можно сделать очень крутой кабинет. Пока выводится список всех заказов, с товарами и историей изменения статусов — можно отслеживать судьбу посылки. С учетом неограниченных статусов — можно публиковать сюда из админки хоть «Менеджер Петя завернул товар в упаковку».



    Для использования кабинета у меня на сайте нужно перед заказом авторизоваться через логинзу и что-то заказать. Чуть позже доработаю свой сниппет Loginza, чтобы он мог менять в кабинете свойства юзера (ФИО, адрес и т.д.). А то сервисы такой информации не предоставляют, а покупатель захочет заполнить самостоятельно себе нужные данные для подстановки в заказы.

    Заключение.


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

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

    Проект еще совсем молодой, умеет немного, но со временем, я думаю, подрастет. Я его активно развиваю и бросать не собираюсь.

    В ближайших планах прикручивание платежных систем и выпуск готовой сборки MODX сразу с настроенным miniShop. Прикрутил оплату через z-payment.ru и сделал скрипты для автоматизированной установки.

    Ссылки


    Домашняя страница проекта + документация + демо (включая админку)
    Исходный код на Github
    Пакет в репозитории MODX

    Демонстрация скорости работы

    P.S.
    Прошу не критиковать меня слишком жестко. Помните, что это расширение для движка MODX Revolution, а не отдельный проект.
    Также прошу указывать ошибки на трекере Github.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 44

      0
      Описание понравилось, функционал вполне сносный. Вариант использования дерева документов особенно заинтересовал, ибо все всегда пишут про проблемы и советуют делать свои таблицы при большом объеме любых данных.

      Сам ничего не делал на МодХ, но всегда интересно почитать чужие достижения ибо платформа мне симпатизирует. Удачи в допиливании фронтэнда.
        +2
        В community.modx-cms.com зверская истерика по поводу мнимой томознутости MODX Revolution.

        Даше пришлось видео снять: www.youtube.com/watch?v=SMc2hSkJvA4
          0
          А фронтэнд??? Какова скорость выборки нужной информации для выдачи её посетителю??
            0
            На этом же видео, начиная с 3:07.
            0
            Советуют использовать свои таблицы, причём сами разработчики modx, и очень не напрасно.
            При большом дереве его показ/обновление и.т.п. тормозит и весьма неплохо кушает ресурсы… Вы поработайте не в корне, как в видео, а в каталоге, где много категорий, а ещё лучше в разделе, где очень много товаров (хотя раньше даже если в корне работать были лаги очень немалые, в последних версиях стало полегче).

            То, что не смотря на более грамотное кеширование Revolution и на фронтэнде в целом медленнее чем Evolution тоже факт, проверенный многими.

            +1
            community.modx-cms.ru или таки .com? :)
        +1
        Благодарю, что продолжаете радовать новыми статьями о MODx!
          0
          Спасибо, я тоже очень рад.

          Был полугодовой перерыв в связи с падением кармы < 5.
            +2
            Я тоже разработал несколько простых модулей, как доведу до ума — выложу для сообщества.
          0
          Пару ошибок имеется, некоторые заметил или замечаю, копаясь в коде. Пулл реквесты пока не пришлю, уж извините, занят :) Пишу модуль для удобного управления статическими элементами.
            0
            Багрепорта вполне достаточно!

            Со стороны то завсегда виднее.
            +1
            Был недавний опыт, совсем вот буквально позавчерашний опыт создания интернет магазина на базе MODx. В качестве компонента остановился всё таки на Shopkeeper. Объясню почему, ибо и в Shopkeeper и в miniShop есть свои плюсы и минусы. Начну с плюса минишопа:
            Удобно сделано добавление товара с точки зрения простого обывателя. Не нужно создавать документ (зачем мне документ, я хочу создать товар!?), создается имеется товар. С его свойствами, параметрами описанием.
            Его минус в том, что в данный момент нет возможности добавлять настраиваемые товары: Зеленый молоток, красный молоток, синий молоток и все они по одной цене. То есть при покупке человек покупает либо дефолтный товар, либо выбирает его вариацию. Кроме того, довольно невнятные мануалы.
            Shopkeeper в этом плане проще и «топорней» чтоли. Есть настраиваемые варианты покупки пагинация и прочие плюхи. Но как программисту, мне ближе был именно минишоп, но проект надо было делать аврально, а дописывать компонент под нужны времени просто не было. Сделайте более юзабильней документацию по компоненту, добавьте возможность создания составных товаров, добавьте выбор варианта товара и все будет просто шоколадно.
              0
              А время где на все это взять? miniShop меня пока не кормит.

              Мануалов просто нет, ибо я их не написал написал. Будут позже, а пока можно смотреть на демосайт, исходный код и задавать вопросы мне. В дальних планах есть написание статей с рассказами о приемах работы на своем сайте.

              Настраиваемые товары. Есть ТВ параметры для ресурсов, есть 3 дополнительных поля в свойстве товара. Причем третье — типа text, что позволяет хранить любую информация json-массивом. То есть, настроить можно.

              Но вы наверняка имели в виду некую «типизацию», что ли. Назначение общего свойства группе товаров, типа «цвет» и выбор из списка? Если так, то я пока об этом не думал даже — некогда.

              Не забывайте, что Shopkeeper развивается не один год, у него длинная история еще с MODX Evolution и у автора богатейший опыт по данной части, а моему магазинчику всего полтора месяца.

              Сам факт, что вы выбирали между ними — уже достижение для меня.
                +1
                Насчет типизации да, примерно что-то похожее. Зря вы так агрессивно сразу. Скажем так, если сравнить шопкипер и минишоп, то минишоп более расположен к пользователю, шопкипер же наоборот, более расположен для программиста.
                  0
                  Извините, я не со зла =)

                  Просто мало спал и много работал, поэтому отвечаю четко, резко и ровно по делу.

                  На самом деле спасибо огромное за реальный отзыв! Буду думать о типизации товаров, точнее, уже думаю.

                  А пагинация то, кстати, есть. Не забывайте, что товары — ресурсы и с ними можно использовать getPage, Wayfinder и тд.

                  А в комплекте идет msGetRsources — тот же сниппет getResources, только с поддержкой мультикатегорий и допсвойств товаров в чанках (и сортировкой по ним).

                  В общем, следите за обновлениями!
                    +1
                    Насчет getPage очень сильно затупил, сам делал только что магазин с его использованием. Насчет msGetRsources надо будет посмотреть. Если еще один проект подобный попадется, обязательно буду ваять на базе минишопа.
                      0
                      Буду рад ответить на ваши вопросы!
                  0
                  Не забывайте, что Shopkeeper развивается не один год, у него длинная история еще с MODX Evolution

                  Так зачем нужно было делать с нуля? Ради мультикатегорий? Это странно. Мультикатегории можно сделать через обычные TV (тут пример). Пока я вижу, что направление выбрано такое же как у Shopkeeper для Revo. Потом будешь (мы знакомы, поэтому на «ты») делать сотставные товары (выбор параметров) и сталкнешся с кучей проблем, которые в Шопкипере уже решены. По-моему лучше объеденить усилия. Но дело уже сделано. Удачи.
                    0
                    Спасибо!

                    >> Так зачем нужно было делать с нуля?


                    Пожалуй, за тем, чтобы предложить свежий взгляд на многие вещи. Полагаю, что многие вещи в Shopkeeper решены с учетом возможностей Evolution, а не Revolution.

                    Если ты не против — я бы подглядел как сделаны составные товары у тебя (исходный код на Github вроде лежит)? Сам пока думаю в сторону наследуемых от категорий свойств.
                      0
                      Полагаю, что многие вещи в Shopkeeper решены с учетом возможностей Evolution, а не Revolution.

                      Версия для Evolution сделана с учётом возможностей (и особенностей) Evolution, а версия для Revolution с учётом особенностей Revolution. Не понял почему ты думаешь, что как-то иначе.
                      Далее по делу думаю лучше общаться в более подходящем для этого месте.
                        0
                        Пожалуй, за тем, чтобы предложить свежий взгляд на многие вещи

                        Этот взгляд можно было предложить через дополнения к Шопкиперу или через здравую критику и предложения.
                    0
                    Судя по всему miniShop кормить начал, а нормальной документации так и нет. Сначала компонент очень понравился, но уходит неадекватное много времени на изучение т.к. все приходиться делать методом тыка.
                      0
                      Первый miniShop давно закрыт.

                      По второму есть
                      bezumkin.ru/modx/minishop2/
                      bezumkin.ru/training/course2/
                      docs.modx.pro/components/minishop2/

                      Дополнение по прежнему бесплатное, и не кормит.
                        0
                        Да, я успел познакомиться с этими ресурсами, но как я уже написал: «уходит неадекватное много времени на изучение».
                        Вот пример удачной документации: rtfm.modx.com/extras/revo/wayfinder — через 2-3 минут чтения я готов работать со снипетом, а уточнение информации занимает считанные секунды.
                        Вы, вроде как, пытались сделать аналогичную на русском, но описания самых необходимых снипетов, вроде msProducts, в ней нет.
                          0
                          Конкретно msProducts — здесь. Он базируется на pdoTools, а уже по нему информации завались.
                          Всем сетующим на документацию, я предлагаю внести свой вклад — инструмент для этого есть.

                          Если где-то есть более удобный и документированный магазин для MODX — используйте его, выбор всегда есть.
                  0
                  а подскажите, на какой бы хостинг переползти?
                  переделал сайт с джумлы на ModX revo и пока почти все не закешировал и не сделал свои сниппеты — сайт еле шевелился и в логах постоянно CPU limit exceeded (джумле вроде хватало).
                  и самое что бесит — в бэкенде с вероятностью 1/3 сервер на запрос, где просится много стилей и js отвечает 502 и в результате всё «рассыпается». нажимаю F5 и получаю нормальную страницу.
                  сейчас используется мастерхост, тп «Профессор» — верхний из линейки шаред-хостинга.
                  судя по статистике нагрузка на этот сайт 100-200 уников в сутки, на Modx приходится в среднем 1000-3000 запросов в день.
                  искать VPS?
                    0
                    Мой выбор — свой сервер на облаке Selectel.

                    Очень круто и недорого.
                    +1
                    Отличный модуль. Я, наверное, один из первых пользователей данного модуля. Спасибо bezumkin-у за помощь в разработке evmpribor.ru. Пока дизайн не нарисовали, но магазин работает уже.
                      0
                      Я в modx не очень хорошо разбираюсь и задам, наверное, глупый вопрос, но все-таки.

                      А что по поводу интеграции платежных систем? Хоть что-нибудь в этом плане есть «из коробки»? Хоть какая-то документация, как к этому подступиться и с чего начать?

                      Спасибо. Релизация понравилась, думаю, должно быть очень удобно делать «мини» магазиинчики на несколько десятков товаров :)
                        0
                        Прошу прощения :) перечитал еще раз последний абзац.
                          0
                          Да в общем то, просто создаете обычную стандартную форму оплаты, в ней прописываете адрес приемы информации о платеже.

                          Туда кладете свой сниппет, который подключит модель таблиц магазина и будет принимать информацию и переключать статус заказа на «оплачено» (статус сначала нужно создать в админке магазина).

                          Ничего сложного, но я хочу это сделать как то универсально и «сразу для всех».
                          Поэтому, пока не сделал.
                            0
                            Лучше поздно, чем никогда!

                            modx-minishop.ru/documentation/manuals/payments.html
                            +1
                            озадачился выбором платформы для магаза — буду иметь в виду. плюсую
                              0
                              в 2.2.4-pl из репозитория miniShop даже не находится :(
                                0
                                Спасибо, проде поправил.

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


                                  0
                                  Нашелся! буду тестировать.

                                  P.S. теперь понял в чем прелесь mSearch — в интеграции с mShop ^_^
                                    0
                                    Конечно, это два моих расширения и они хорошо работают вместе.

                                    Однако, mSearch прекрасно ищет и один, а mFilter должен хорошо работать один (но я не проверял).
                                      0
                                      что-то тяжелый понедельник — имел в виду mFilter.

                                      Кстати при проектировании магазина (начал с витрины) и тоже сразу заложил мультикатегории: товары в одной папке, структура каталога в другой, привязка делается в товаре через TV-чекбокс с SELECT по parent корня структуры

                                      в общем вашему модулю респект — буду сейчас активно внедрять.

                                      P.S. даже морально приготовился задонейтить с прибыли, но на modx-minishop.ru не нашел такой инфы — принципиально?
                                        0
                                        Донейта нет, ибо не виду смысла.

                                        Кому очень захочется закинуть мне денег — найдут способ.
                                    0
                                    mFilter тоже не находится
                                      0
                                      Раширения mFilter не существует.

                                      Это второй сниппет в компоненте mSearch. Он, в основном, фильтрует результаты поиска, поэтому отдельно его выпускать как то бессмысленно.

                              Only users with full accounts can post comments. Log in, please.