[miniShop2] Версия 2.0.0-rc

Выпустил новую версию компонента для создания интернет-магазинов, miniShop2 2.0.0-rc.

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

Чанки при обновлении не перезаписываются, поэтому, смотрите их на github и подгоняйте под свои условия.

Итак поехали, список изменений.

Исправлены ошибки

— Ошибка при создании заказа авторизованным пользователем, без email. Это могло произойти при авторизации через Loginza или HybridAuth.
— Исправлена опечатка в удалении заказа в админке.
— Исправлено форматирование даты в Firefox, на страницах админки. В IE проверить не могу — нету.
— Исправлена ошибка с не обновлением карты алиасов при создании нового товара. Как следствие, он не открывался на сайте, пока не почистишь кэш.
— Исправлена «неизвестная ошибка» при отправке товара в корзину со включенным register_globals. Теперь так и будет говорить — отключи этот параметр.
— Вроде починил автоматическую установку pdoTools.
— Исправлен баг с выборкой большого количества картинок снииппетом msGallery.
— Исправлен баг с работой всех сниппетов, когда их вызывалось несколько штук на странице.

Улучшения

— Добавлена ссылка на товар в заказе.
— Добавлена возможность связать производителя со страницей сайта. Ну, на случай организации отдельного раздела брендов.
— Новый параметр «ms2_product_thumbnail_size» позволяет указать размер превьюшки для занесения в колонку thumb товара.
— Добавлены плейсхолдеры производителя на страницу товара, можно использовать [[+vendor.name]], [[+vendor.logo]] и т.д.
— Добавлены пробные скрипты для конвертации товаров MS1 в MS2. Конвертируются категории, товары, производители и картинки. Это для опытных ребят, работает из консоли.

Расширение функционала

— В категории товаров теперь показываются не только непосредственные потомки, но и все остальные товары на глубину 10. Выглядит это вот так:


Обратите внимание, у «неродных» товаров показывается их родная категория. Заодно улучшил поиск, теперь можно искать по id, по имени производителю и даже по названию категории.

То есть, проблема с поиском товара в большом каталоге больше нас не волнует. Встаём на категорию как можно выше и ищем товары среди всех её подкатегорий.

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

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

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

Заключение

За время, прошедшее с момента предыдущего релиза я успел перевести один большой магазин с MS1 на MS2 (собственно, консольные скрипты оттуда). В процессе переноса были выявлены и поправлены многи недостатки админки и сниппетов. Сайт большой, пока, не по количеству товаров, а по наворотам. На MS1 это всё тормозило очень знатно, так как приходилось писать страшенные костыли.

На MS2 сделал всё красиво, с помощью кастомных классов доставки и корзины + добавления\перезагрузки свойств товара специальными плагинами.
Вот что показывает LoadImpact при тесте некэшированной категории с 16 товарами.


До 100 виртуальных посетителей — полёт отличный! Когда сайт будет запущен в рабочем режиме — расскажу подробнее.

В общем, очень многое поправлено, изменено и добавлено. Качаем, тестируем. Надеюсь, исправил ошибок больше, чем добавил.

Следующая заметка
[miniShop2] Первая стабильная версия MS2
Предыдущая заметка
miniShop2 вышел


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

  1. Fedor 22 марта 2013, 17:39 # 0
    Ура, тестируем :)

    Чтобы перейти на новую версию достаточно обновить МиниШоп или удалять и заново ставить?
    1. Василий Наумкин 22 марта 2013, 17:43 # 0
      Обновить и поправить чанки.

      Ну а потом тщательно всё протестировать, ибо может отвалиться всякое, из-за изменений сниппетов.
    2. Aleksey 22 марта 2013, 17:58 # 0
      Добавлены возможность писать свои расширения для товаров. Теперь можно добавить собственные поля товарам, или даже перезагрузить родные. Причем, как в модели, так и в админке.
      Мультиязычность товаров/категорий можно будет реализовать?
      1. Василий Наумкин 22 марта 2013, 18:00 # 0
        Это и раньше можно было, хоть ТВ, хоть контекстами.

        Буду рад, если кто-то попробует и отпишется о впечатлениях =)
      2. Алексей Добряков 22 марта 2013, 17:59 # 0
        Жду финальной версии и перехожу пока тестю
        Кстати Василий много гемора будет по созданию товара из фронтенда у меня есть код который сам написал на простое создание документа работает отлично, а вот для MiniShop2 могут ли возникнуть какие небудь трудности? Очень волнует загрузка картинок из фронтенда
        1. Василий Наумкин 22 марта 2013, 18:02 # 0
          По идее, нет, но про загрузку картинок не уверен, там вроде куча проверок.

          Смотри исходники, эксперементируй, а мне очень нужно отдохнуть.
          1. Алексей Добряков 22 марта 2013, 18:21 # 0
            Отдыхай я же просил тебя это делать)))))
        2. Pavel Kravchuk 22 марта 2013, 18:15 # 0
          У меня есть пару вопросов. На странице товара, снипет msProducts вызывается 3 раза. Чтобы не появлялось ошибок, ты посоветовал вставить
          unset($modx->services['pdofetch']);
          перед выводом результатом. и это работало.
          Сейчас в снипет добавлен код
          if (!empty($modx->services['pdofetch'])) {unset($modx->services['pdofetch']);}
          вместо старого и ошибка опять вылезла. Пришлось все вернуть в зад.
          Вторая ошибка, при изменении статуса заказа в менеджере, приходит письмо с ошибкой (снипет msGetOrder)
          in_array() [function.in-array]: Wrong datatype for second argument
          проблема заключается в том, что в сессии $_SESSION['minishop2'] нет подраздела orders есть только order. Как лучше решить эту проблему, проверять отдельно есть ли такая сессия а потом осуществлять поиск?
          1. Василий Наумкин 22 марта 2013, 18:23 # 0
            1. Непонятно, как так, если раньше класс удалялся из MODX после работы сниппета (чтобы не мешать следующему), а теперь перед работой — так должно быть надёжнее.

            2. Замени строку на
            if ((!empty($_SESSION['minishop2']['orders']) && !in_array($id, @$_SESSION['minishop2']['orders'])) && $order->get('user_id') != $modx->user->id && $modx->context->key != 'mgr') {
            Ключ orders появляется у юзера после успешного оформлении заказа, а в админке его, конечно, нет. Одну ошибку я там подавил, а вот про вторую не подумал.

            Ну теперь будет так, подлиннее.
            1. Pavel Kravchuk 22 марта 2013, 18:40 # 0
              Спасибо, заработало.
              По ходу пьесы перестали выполнятся условия where в снипете msProducts.
              в строке 65 обнаружил такой код unset($scriptProperties['where']);
              пришлось закоментировать чтобы все заработало. Имхо его наверное имеет смысл или перед работой снипета или в конце поставить.
              1. Василий Наумкин 22 марта 2013, 18:43 # 0
                Как я и думал, ошибок навалом.

                Держи коммит, пакет в репозитории обновил.
                1. Pavel Kravchuk 22 марта 2013, 23:00 # 0
                  Почему то у меня так коректно не работает. Если я добавляю условие where, снипет выводит все документы т.к. условие пустое.
                  $where = $modx->toJSON(array_merge($where, $tmp));
                  А вот так работает нормально. Проверь плиз.
                  $where = array_merge($where, $tmp);
                  1. Василий Наумкин 22 марта 2013, 23:01 # 0
                    Ага, в репозитории уже лежит rc2 с этой правкой =)
                    1. Pavel Kravchuk 22 марта 2013, 23:35 # 0
                      Супер :)
                      а в rc2 есть еще какие то правки кроме этих? имеет смысл еще раз обновляться?
                      эти правками я ручками внес.
                      1. Pavel Kravchuk 23 марта 2013, 01:43 # 0
                        Предыдущий вопрос снимается как дурацкий. В принципе на гитхабе все прекрасно видно, когда что менялось.
                        Есть еще одно дополнение по снипету msGetOrder. В нем как то не заслуженно обошли таблицу ms2_products из-за этого картинки при использовании msGetOrder не грузятся.
                        Я добавил эту таблицу в строку 79 и все разаботало. новая строка:
                        $select = '"msProduct":"'.$resourceColumns.'","OrderProduct":"'.$orderProductColumns.'","Vendor":"'.$vendorColumns.'","ProductData":"'.$dataColumns.'"';
                        1. Василий Наумкин 23 марта 2013, 06:15 # 0
                          Спасибо, обновил пакет еще раз.
            2. Богдан 22 марта 2013, 18:35 # 0
              Отличная новость! Василий, можно ли как-то в miniShop2 указывать несколько цен для одного товара (розничная, мелко-оптовая, оптовая), а также цену в разных валютах? В первой версии минишопа был сниппет, с помощью которого обрабатывалась цена msGetPrice, а как быть сейчас?
              1. Василий Наумкин 22 марта 2013, 18:50 # 0
                Это очень медленно, пришлось отказаться.

                Сейчас можно указывать цены в любом удобном тебе виде в любом поле товара и выводить на сайте через свой же сниппет. А при добавлении товара в корзину — менять цену плагином. Позже постараюсь написать подробную инструкцию про этот случай.
                1. Fedor 22 марта 2013, 19:03 # 0
                  да, актуально
                  1. Юрий Венедиктович 21 мая 2013, 20:35 # 0
                    Доброго времени суток, Василий!
                    случаем не вышла ли подробная инструкция по организации нескольких цен для одного товара.
                    если нет нет ли какого нибудь примера с помощью которого можно разобраться как организовать несколько цен со сменой последней по select-у(-ам)
                    с уважением
                2. Fedor 22 марта 2013, 19:25 # 0
                  Обновить не дает, говорит уже новая… значит удалять и закачивать?
                  1. Александр Донский 22 марта 2013, 20:59 # 0
                    Super Super , первых два каммента прочитайте ;)
                  2. Fedor 23 марта 2013, 12:22 # 0
                    Перестал выводится [+size] в корзине cart.row. Что то изменилось с его выводом?
                    1. Василий Наумкин 23 марта 2013, 12:36 # 0
                      Написано в самом начале.
                      Сразу предупреждаю, отличий от предыдущей очень много, поэтому гладкого обновления не получится. В первую очередь, это касается изменённых плейсхолдеров в чанках и поведения сниппетов.

                      Чанки при обновлении не перезаписываются, поэтому, смотрите их на github и подгоняйте под свои условия.
                      1. Fedor 23 марта 2013, 12:52 # 0
                        Извиняюсь за глупый вопрос, но все же:

                        Обязательно нужно перенести все новые чанки с их именами из гигхаба, или достаточно будет в моем случае [+size] заменить на [+option.size]? Второй вариант у меня сейчас работает…
                        1. Василий Наумкин 23 марта 2013, 13:13 # 0
                          Имена чанков не изменились, только кое-какие плейсхолдеры.

                          Конечно, нужно только их поправить и всё.
                    2. Евгений 23 марта 2013, 17:03 # 0
                      Василий, а вы когда примерно планируете написать о плагинах? Хотя бы примерно:)
                      1. Василий Наумкин 23 марта 2013, 17:13 # 0
                        Сегодня — завтра.
                      2. Metric 23 марта 2013, 19:01 # 0
                        Скажите пожалуйста какой плагин использовать для реализации постраничной навигации?
                        1. Василий Наумкин 23 марта 2013, 19:07 # 0
                          getPage
                          1. Metric 23 марта 2013, 19:09 # 0
                            [[!getPage? &element=`msProducts` &limit=`10`]]
                            [[!+page.nav]]

                            Почему то такой код не выводит ничего, в чем может быть ошибка?
                            1. Василий Наумкин 23 марта 2013, 19:15 # 0
                              Зайди в админку на minishop2.com и посмотри как там.
                        2. Александр Котлов 24 марта 2013, 00:18 # 0
                          После обновления все по вроде работает но почему-то в логе проскаивает

                          [2013-03-23 03:15:24] (ERROR @ /assets/components/minishop2/connector.php) Instantiated a derived class modDocument that is not a subclass of the requested class msProduct
                          Что странно тк судя по гитхабу файл connector.php не обновлялся, но это мелочи.

                          А вот что появилось постоянное (исчезает если убрать вывод товаров со страницы)

                          [2013-03-23 23:07:38] (ERROR @ /index.php) Could not get table name for class: modFileMediaSource
                          Меня расстраивает. У кого нибудь было такое?

                          1. Александр Котлов 24 марта 2013, 05:19 # 0
                            Починил) Накосячил обновляя.
                          2. Богдан 24 марта 2013, 23:14 # 0
                            Поставил miniShop2 + AjaxManager + CKEditor — в результате при редактировании товара, слетает верхнее меню MODX, возобновляется только после перезагрузки страницы. При удалении CKEditor все работает нормально. У кого нибудь были такие проблемы? Может кто-нибудь может посоветовать, какой визуальный редактор лучше использовать в связке miniShop2 + AjaxManager?
                            1. Олег Ракул 25 марта 2013, 15:27 # 0
                              Была та же самая проблема. Не додумался, что может быть проблема из-за визуального редактора.
                              Пока затык, c AjaxManager работает только CKEditor, но вместе с minishop2 они не работают.
                              Автор CKEditor видимо не использует.
                              Но что использовать простым смертным пока неясно или может я чего упустил.
                            2. Михаил 25 марта 2013, 15:09 # 0
                              — Исправлена ошибка с не обновлением карты алиасов при создании нового товара. Как следствие, он не открывался на сайте, пока не почистишь кэш.
                              Василий, привет. Поставил rc4 и эта ошибка все еще присутствует
                              1. Михаил 25 марта 2013, 16:01 # 0
                                Уточню. При импорте скриптом. Скорее всего надо при импорте запустить обновление карты урлов… как?
                                1. Василий Наумкин 25 марта 2013, 16:16 # 0
                                  Или создавай товары через процессор, или чисти кэш сайта после импорта.
                                  1. Михаил 25 марта 2013, 16:52 # 0
                                    Где про данный процессор почитать можно? Поделись ссылочкой на достоверную инфу, плз
                              2. Алексей Вахрамеев 26 марта 2013, 16:16 # 0
                                Василий, приветствую! Есть маленький вопросик. Поддерживает ли сниппет msProducts параметры настроек шаблонов, по аналогии с getResources? Например, мне надо, чтобы шаблон каждого третьего div блока с товаром слегка отличался от остальных (был без правой вертикальной черты), то есть в сниппете указать &tpl_n3=`tpl.msProducts-1.row`.

                                Если использовать getResources, то все отображается как надо, но все же хотелось бы использовать родной msProducts :)
                                1. Василий Наумкин 26 марта 2013, 16:30 # 0
                                  Нет, не поддерживает и не собирается.
                                2. Pavel Kravchuk 03 апреля 2013, 01:06 # 0
                                  Не знаю в в правильную тему пишу или нет.
                                  Заметил на демо сайте 2го минишопа, что когда в строку поиска вводишь 2 слова из названия товара(например sony xperia), которые находятся не друг за другом, то результат на выходе нулевой. При этом товар по ключевым словам sony ericsson xperia находится нормально.
                                  Куда копать, чтобы решить эту проблемку? msProduct или mSearch?
                                  1. Василий Наумкин 03 апреля 2013, 08:27 # 0
                                    На демо-сайте miniShop2 нет поиска.
                                    1. Pavel Kravchuk 03 апреля 2013, 09:25 # 0
                                      сорри, со старым сайтом перепутал.
                                  Добавление новых комментариев отключено.