Обсуждаем miniShop 2.0


Отличная новость, друзья. Дедушки Морозы из Simple Dream согласны профинансировать разработку miniShop 2.0 и предлагают собрать приблизительный список изменений.

Напоминаю, что разработка первого miniShop была начата ровно год назад, когда я знал и умел гораздо меньше, чем сегодня. Отсюда в нём куча E_NOTICE, странные решения с таблицами, неправильные названия объектов и еще много всякого.

Несмотря на эти недостатки, компонент завоевал определённое количество поклонников, которые скачали его без малого 5000 раз.

Теперь настало время переписать его по всем правилам. Оставить и улучшить нужное, выкинуть лишнее. Сделать его быстрее и удобней.

Вот мои задачи:
  • Товары должны стать CRC, со связанными таблицами свойств, тегов, изображений и прочим.
  • Собственные менеджерские страницы товаров и категорий, как в Tickets.
  • Новые, более оптимальные таблицы.
  • Скрипт миграции с miniShop 1 в miniShop 2.
  • Переписать все процессоры на class-based.
  • Привести в порядок весь основной класс, добавить PhpDoc комментарии.
  • Исправить все E_NOTICE уведомления.
  • Добавить в комплект сниппеты оплаты, включая выделенный из класса Z-Payment.
  • Переделать текущую админку, чтобы оставить там только управление заказами и настройки оплаты\доставки.
  • Тесная интеграция с Tickets, чтобы можно было оставлять отзывы о товаре\заказе.

После выпуска 2.0, первая ветка будет заброшена. Все смогут легко и просто перейти на вторую. Возможно, зацепим и mSearch\mFilter.

А теперь предлагайте, чего бы хотелось лично вам.

Следующая заметка
День рождения bezumkin.ru
Предыдущая заметка
Превью-изображения с YouTube, Vimeo и ruTube


Комментарии (45)

  1. Viktor Minator 18 декабря 2012, 18:01 # 0
    мне хотелось бы побыстрее
    1. Добряков Алексей 18 декабря 2012, 18:10 # 0
      Мне единственное что не очень понравилось это геммор с ценной потому что у меня клиенты привыкли изменять из на самой странице товара (как написать что бы цена бралась из tv я вкурсе), так же и другие параметры прописывать там же в TV, а то не очень удобно одно там, другое там, лучше на мой взгляд было бы если все параметры товара были на самой странице товара, а не в самом miniShop, а в самом плагине проста просматривать что купили статус и т.д. ещё было бы прикольно просматривать в компаненьте сколько чего куплено (для статистики клиента) и так же выводить на страницу товара
      1. Denys Butenko 18 декабря 2012, 18:34 # 0
        Сравнение товаров
        1. Алексей Романов 19 декабря 2012, 14:45 # 0
          Так это делается просто. Тут версия miniShop не играет роли
        2. Василий Краковецкий 18 декабря 2012, 18:55 # 0
          Изображения убрать из отдельной таблицы. хранить в основной таблице в поле img в формате json.
          1. Denys Butenko 18 декабря 2012, 19:07 # 0
            Я думаю, что лучше все свойства товара хватит в одном месте.
            1. Viktor Minator 18 декабря 2012, 19:18 # 0
              понимаю, что именно так и будет:
              «Товары должны стать CRC, со связанными таблицами свойств, тегов, изображений и прочим.»
              1. Василий Краковецкий 18 декабря 2012, 19:20 # 0
                Ну значит на всякий случай упомянуто будет, в принципе это первое что приходит в голову из рац. предложений. Второе что приходит в голову — система скидок и купонов.
                1. Алексей Романов 19 декабря 2012, 14:48 # 0
                  Тут тоже особых сложностей нет. Если кому интересно могу рассказать как это сделать
                  1. Василий Краковецкий 19 декабря 2012, 14:50 # 0
                    В том весь и смысл чтобы не делать каждый раз своё, а чтобы этот функционал был из коробки.
                    1. Алексей Романов 19 декабря 2012, 14:56 # 0
                      Это всё лень матушка мозг напрячь лишний раз ((
                      За коробки нужно платить
                      1. Василий Краковецкий 19 декабря 2012, 14:58 # 0
                        Это не лень, это время, а время — деньги.
                        1. Алексей Романов 19 декабря 2012, 15:07 # 0
                          Ну так проспонсируйте труд Василия и сэкономьте своё время! Или тоже не вариант? Он же своё время и на вас тратит и на разработку и на поддержку
                          1. Алексей Романов 19 декабря 2012, 15:07 # 0
                            А вы только своё время и цените!
                            1. Василий Краковецкий 19 декабря 2012, 15:34 # 0
                              Если Вам так хочется перейти на личности — милости прошу написать мне куда-нибудь более приватно, а не разводить здесь непотребства отходя от темы. Почитайте содержание статьи собственно. Там идет обращение к комьюнити с просьбой нагенерировать идеи, а не о сборе средств. Со сбором от комьюнити уже был опыт у Василия. А те кто хочет поспособствовать — способствует. Я например материально не могу помочь, потому что сам являюсь разработчиком, но помогаю своими разработками делая коммиты на гитхабе. Так что не надо пытаться меня упрекнуть в чемто переведя разговор на деньги.
              2. Виталий Киреев 18 декабря 2012, 19:08 # 0
                Чтобы поддерживались не только мультикатегории, но и иерархия подкатегорий. Еще мелочь, но сейчас нельзя отсортировать по выбранным категориям. Поддержка всех типов tv инпутов, которые есть в modx… Пока навскидку все, что вспомнилось. Ну и переименование классов ModGoods в Product, ModCategories в Category и т.д. =)
                1. Николай 18 декабря 2012, 21:38 # 0
                  Нужна гибкая настройка характеристик товара и его подкатегорий (вынести создания структуры товара в область API)
                  Есть товары у которых к примеру есть дополнительные свойства цвет, упаковка итп
                  По идее товар характеризуется 1 карточкой товара, а его параметры могут влиять на цену или доставку 1 товар с разными свойствами нго разное количество у каждого свой артикул(выделять его в отдельную категорию смысла нет мало наименований да и описание 1 тоже плодить дубли на сайте нехорошо).

                  У вас есть пример с футболкой. Но есть 1 но по реальным складам такой товар идет по разным артикулам и разным количеством, цена разная, может зависеть от веса, или разный способ доставки, а сейчас это реализовано как 1 наименование к которому жестко привязаны параметры которые можно использовать можно не использовать либо перепиливать авторский скрипт, что ни есть хорошо.

                  Хотелось бы увидеть, что то типо 1 карточка товара с возможностью подключения кастомных параметров и апи для работы с ними (нечто подобное пытаюсь реализовать на базе migx).
                  Либо включить возможность подключать собственный обработчик остатков товара.
                  Все это счастье можно держать в Json массивах

                  … Получилось весьма сумбурно. но основная мысль такова, что нужно отдать как можно большую часть на откуп Api

                  В любом случае жду с интересом и любопытством))
                  1. Галич Сергей 18 декабря 2012, 21:52 # 0
                    согласен
                    главное чтоб например тот же бейбел при мультиязычности спокойно работал, но вроде это как решает CRC?
                    1. Перетягин Илья 19 декабря 2012, 09:10 # 0
                      1. Недавно просмотренные товары.
                      Просматривая ряд товаров, потенциальный покупатель может подсознательно захотеть вернуться на один из уже просмотренных товаров, не большой блок на сайте может подтолкнуть его к этому действию, что повышает монетизацию сайта в целом.

                      2. Сравнение товаров (писалось выше, но все же повторю, важный момент)
                      В ряде тематик, реализация сравнения очень важна. Например сайт продает сотовые телефоны со средней ценой в 10 000 рублей, такая сумма заставляет человека более тщательно выбирать, а не брать сразу, что первое попадется как при покупке бутыля воды 19 литров. После чего ему надо открыть страницы с товарами которые подходят ему по каким либо критериям – цена, дизайн, и т.д., сравнивания таким образом товар, покупатель путается, в основном в таблицах характеристик и это если надо сравнить два, три товара, а если их больше, то человек может уйти. Сравнение выбранных им товаров, позволит наглядно увидеть отличия данных дивайсов на одной странице, не прибегая к дополнительным переходам по сайту, что опять же повышает монетизацию.

                      3. Сопутствующие товары.
                      Сайты по продаже дешевых изделий в основном зарабатывают на сопутствующих товарах. Например мы продает дешевый плеер, а к нему предлагаем еще чехол, батарейки, дополнительные типа качественные наушники, какие нить будь подставки и т.д., в конечном итоге, сам плеер не является прямым источником заработка. Но даже если сопутствующие товары не выполняют роль прямого заработка, они все равно остаются важным моментом, так как помогают покупателю более комплексно сделать заказ в одном месте, например мы покупаем кулер для воды и к нему берем стаканодержатель, который стоит на порядок дешевле, тем самым не обогащая бизнес, а создавая приятное впечатление, оставляя ниточку для возврата или «сарафанного радио».

                      4. Похожие товары.
                      Продолжаем улучшать монетизацию. Человек входит на какой то товар по прямой ссылке, в этот момент появляется желание купить изделие, но какой то момент его не устраивает, например дизайн товара, соответственно ему надо предложить, что то сильно похожее, но все же другое, тут и вступает в силу блок с похожими товарами, он не отпускает человека с сайта, предлагая товары которые так же могут ему понравиться.
                      1. Алексей Романов 19 декабря 2012, 14:51 # 0
                        1. Недавно просмотренные товары.
                        У Василия есть готовый сниппет для этого, сам минишоп тут вообще ничего не решает

                        2. Сравнение товаров (писалось выше, но все же повторю, важный момент)
                        Написал выше, делается очень просто

                        3. Сопутствующие товары.
                        Так же реализуется просто в не зависимости от версии минишопа

                        4. Похожие товары.
                        Тоже все предельно просто

                        Конечно все хотят всего готового и я это понимаю, но тогда возьмите и поддержите Василия не только своими хотелками, а и материально, это как известно для программера лучшая поддержка
                        1. Перетягин Илья 19 декабря 2012, 15:14 # 0
                          Хотел с начала расписать все по пунктам, привести доводы, что создание сайта это не только написание кода и т.д., но подумав решил, что зря время потрачу, и возможно подниму не нужный этой теме спор, по этому отвечу только так:
                          Вопрос был – «А теперь предлагайте, чего бы хотелось лично вам.»
                          Я написал, а дальше пусть Василий решает, что надо, а что нет.
                          1. Алексей Романов 19 декабря 2012, 15:21 # 0
                            Прошу прощения если обидел чем-то)
                      2. Александр Наумов 19 декабря 2012, 10:20 # 0
                        Спасибо Simple Dream и Василию за новогоднюю инициативу!!!

                        Мои пожелания.
                        1. Сделать Ajax проверку малого количества товаров. Например, когда в остатке товара мало (например 5 или 10) то включается Ajax проверка остатка. Это нужно для того, что бы покупатель не положил в корзину товара больше, чем есть на складе. А менеджеру потом не пришлось извинятся, объясняя, что столько единиц товара нет в наличии.

                        2. Интегрировать тикеты с возможностью ведения диалога между менеджером и покупателем без посторонних лиц (тет-а-тет).
                        1. Антон Слободчук 19 декабря 2012, 12:45 # 0
                          1. Полноценная поддержка TV в админке.

                          2. Редактирование товара, вкладка «категории»: сначала отображать категории к которым относится товар, потом — все остальные. Сортировка по колонке «включено» также необходима.

                          3. Редактирование заказа: возможность добавление товара не только по названию, но и по артикулу.

                          4. Возможность создания заказа через админку.

                          5. Возможность вешать снииппеты на изменение статуса заказа (не только отправку email). Здесь же, при изменении статуса заказа, возможность не отправлять email и не выполнять соответствующий сниппет (необходимо в некоторых ситуациях).

                          6. Вынести свойство «производитель» для товара в отдельное поле — не через TV. В идеале, сначала где-то задавать список производителей, далее при создании/редактировании товара выбирать производителя из выпадающего списка.

                          7. Редактирование заказа, вкладка «адрес» — здесь очень не хватает возможности привязать точку на яндекс карте.

                          8. Печать заказа из админки, включая карту из п. 7
                          1. Антон Слободчук 19 декабря 2012, 12:57 # 0
                            9. Когда включена опция проверки наличии товара на складе, проверять, что кладется в корзину. Сейчас пользователь может положить туда все что угодно при соответствующих знаниях. Например в ситуации, когда продается эксклюзивный товар, который достанется первым 10 успевшим, да еще и с возможностью оплаты электронными деньгами, это добавляет геморроя (особенно возврат денег с какой-нибудь Робокассы).

                            10. Для каждого товара возможность задания похожих / сопутствующих товаров (отдельная вкладка).

                            11. Что-то подобное тоже хотелось бы сразу «из коробки»: modx-shopkeeper.ru/documentation/modx-evolution/plagin-paramedit.html
                            1. Антон Слободчук 19 декабря 2012, 13:05 # 0
                              12. Печать по заказу из админки: счет-фактуру, товарная накладная (торг-12), товарный чек.

                              13. Когда товара нет в наличии, возможность покупателю попасть в лист ожидания: на сайте на карточке товара он оставляет адрес электронной почты, имя и контактный телефон, далее в админке отдельная вкладка «Лист ожидания», где выводится список ожидающих этого товара. Далее можно отправить выбранным ожидающим информацию о том, что товар поступил.
                            2. Алексей Романов 19 декабря 2012, 14:54 # 0
                              5. Возможность вешать снииппеты на изменение статуса заказа (не только отправку email). Здесь же, при изменении статуса заказа, возможность не отправлять email и не выполнять соответствующий сниппет (необходимо в некоторых ситуациях).
                              У минишопа есть куча событий особенно в версии 1.9.4, вешайте плугин с вызовом нужного сниппета на изменение статуса

                              msOnOrderChangeStatus срабатывает после изменения статуса заказа
                              msOnBeforeOrderChangeStatus срабатывает до изменения статуса заказа
                              1. Василий Наумкин 19 декабря 2012, 16:19 # 0
                                Алексей, спасибо за поддержку.

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

                                На мой взгляд уже сейчас, на первом минишопе можно сделать практически, что угодно. Но вопросов меньше не становится, и в основном — они одни и те же. Так что проще их взять и решить во второй версии, чем давать одинаковые ответы еще год =)
                                1. Алексей Романов 19 декабря 2012, 16:33 # 0
                                  Да, на текущей версии минишопа можно сделать что в голову заказчикам придет. На счет вопросов полностью соглашусь, их сейчас даже на самые очевидные вещи задают.
                                  Вам нужно просто открыть свой репозиторий платных плюшек
                            3. Дарья Гущина 20 декабря 2012, 00:15 # 0
                              Из того, что приходилось дописывать для minishop по заказу клиентов:
                              1. Купоны и скидки с возможность ограничивать по периоду действия, количеству использования, задаваемые в валюте или процентах
                              2. Товары по акциям и спец. предложениям (дополнительный параметр новой цены)
                              3. Помечать товары как доступные только для предзаказа
                              4. Возможно, из разряда бреда, но некоторые заказчики просят скрывать все ненужные им поля в товарах и заказах, т.к. заполняют зачастую менеджеры, и «лишнее» их сбивает. Т.о., как вариант, в настройках можно было бы указывать список отображаемых полей товара/заказа.
                              5. Итоговые суммы в карточке заказа: без скидки, со скидкой, с доставкой и скидкой

                              Понятно, что некоторые пункты легко реализуются через tv, но из удобства «чтобы было все в одном месте», меняла сам компонент.
                              1. Евгений 21 декабря 2012, 11:46 # 0
                                1) Поддержка мультиязычности (если не заполнен второй язык то всё равно выводить информацию из основного языка)
                                2) Нормальная фильтрация по характеристикам.
                                1. Володимир Литвиненко 21 декабря 2012, 13:41 # 0
                                  1. Очень не хватает возможности редактировать стоимость (а может, и другие поля) товара прямо в таблице товаров — как в настройках MODX.
                                  2. В импорте просто необходимо добавить возможность выбирать символ — разделитель. Также не помешает возможность делать импорт из текстового поля, для отладки. В общем, всё как у ImportX.
                                  1. Антон 22 декабря 2012, 14:46 # 0
                                    Был бы интересным шаг с определенными ценами для определенных категорий пользователей(оптовая закупка, розничная закупка), либо изменение цены при покупке определенного товара в определенном количестве (наример, если приобрести товар больше 5 или 10, то он будет доступен по оптовой цене).
                                    1. Евгений 21 января 2013, 09:36 # 0
                                      Согласен, полезная функция, многие хотят такой функционал
                                    2. Антон Слободчук 22 декабря 2012, 15:43 # 0
                                      Забыл про очень важный пункт: способ оплаты заказа в зависимости от выбранного способа доставки.
                                      1. Богдан 23 декабря 2012, 00:54 # 0
                                        Модуль экспорта товаров в csv. При импорте, возможность указывать подкатегорию товара.
                                        1. Alexandr Semenov 25 декабря 2012, 07:36 # 0
                                          1. Обработка заказов в Tickets. При продаже интеллектуальных товаров или услуг, например серийных номеров и лицензий, это наиболее удобный способ.
                                          2. Дополнительные поля в профиле пользователя после регистрации
                                          3.Сохранение истории заказов пользователя (например история тикетов пользователя в Tickets)

                                          habrahabr.ru/company/webasyst/blog/122688/ Здесь статья полутора летней давности, в ней и комментариях достаточно хорошо описана удобная система обработки заказов и работы с клиентами соответствующее процессам описанным в ITIL
                                          1. Жуковский Антон 03 января 2013, 14:10 # 0
                                            Не могли бы вы добавить в minishop метод для очистки корзины? Я сделал сам, но не хочется каждый раз дописывать его при обновлении компонента.
                                            1. Василий Наумкин 03 января 2013, 14:32 # 0
                                              unset($_SESSION['minishop']['goods']);
                                              Куда это нужно добавить?
                                            2. Жуковский Антон 03 января 2013, 19:03 # 0
                                              minishop.class.php:
                                              /*
                                              * Empty cart
                                              *
                                              * @returns array $arr 					// array with total weight, price, and number of goods
                                              * */
                                              function emptyCart() {
                                              unset($_SESSION['minishop']['goods']]);
                                              $data = $this->getCartStatus();
                                              return $this->success('ms.Cart.empty',$data);
                                              }
                                              minishop.php:
                                              // Load needed method
                                              switch ($action) {
                                              case 'emptyCart': $res = $modx->miniShop->emptyCart(); break;
                                              ...
                                              }
                                              minishop.js:
                                              $('.emptyCart').live('click', function(e) {
                                              $.post(url, {action: 'emptyCart'}, function(data) {
                                              data = $.parseJSON(data);
                                              showResponse(data);
                                              cartStatus(data);
                                              })
                                              e.preventDefault()
                                              })
                                              Вот, как-то так :)
                                              1. Василий Наумкин 03 января 2013, 20:06 # 0
                                                Ок.
                                                1. Никулина Наталья 14 января 2013, 10:31 # 0
                                                  спасибо :)
                                                2. Сергей Карпук 28 января 2013, 02:57 # 0
                                                  Сравнение товаров.
                                                  1. Алексей Вахрамеев 30 января 2013, 11:45 # 0
                                                    Как уже писали выше, хотелось бы указывать вариант цены в зависимости от количества товаров. Например, при заказе, от 1 до 100 товаров цена за 1 шт. 100 руб., при заказе больше 100 товаров — цена за 1 шт. 85 руб. и т.п, таким образом при оформлении заказа в корзине товаров итоговая сумма формируется за счет параметров первоначальной цены, зависимой от количества товаров.
                                                    1. Pashkevich Aleksandr 12 февраля 2013, 04:29 # 0
                                                      В начале длинная предыстория, которую можно не читать.

                                                      Я не знаю может кто уже писал или нет. Но вот сегодня во время стечения обстоятельств, мне с одного кривого хостинга пришлось переносить на нормальный сайт с modx и минишопом, и вот как-то так получилось, что вот всё работает, а он нет, я уже и так и этак, в итоге добрался до исходников. Первым делом на echo вешаю запрос, и о чудо запрос отображается, думаю отлично, значит уже проблема не в подключение modx, и в итоге ещё дальше поковыряв, я нахожу вот какую особенность, оказывается что нет такой таблицы, но я её вижу у себя перед носом(перед этим 5 часов возился с кодировкой), и тут ещё несколько раз прочитав названия таблицы я понимаю, что дело в одной маленькой разнице, в одной буковке.

                                                      Поэтому прошу, сделайте имена таблиц не modx_ms_modTags, а modx_ms_modtags

                                                      Разница не слишком большая, и для тех кто не лазит в БД разницы вообще никакой, а те кто лазят, прочитают и так, но возможно избережёт от такой проблемы как описана у меня в предыстории.
                                                      Добавление новых комментариев отключено.