[miniShop2] Версия 2.0.1-beta2

Не знаю, в чем тут дело: то ли наш репозиторий виноват, то ли просто лето холодное, но обновления расширений выпускаются поточным методом.

Очередные улучшения\исправления MS2, не особо крупные, но очень приятные. В этот раз изменения коснулись двух основных сниппетов: msProducts и msGallery.

msProducts

Этот сниппет уже давно похож на швейцарский нож, местами покруче getResources. Скорость я даже не сравниваю, чтобы не обижать старичка, теперь вот и функционал еще немного подтянул.

Первое изменение: параметр &resources больше не подавляет &parents. Раньше, если указать оба этих парметра, работал только resources выдавая указанные ресурсы, не взирая на родителей.

Теперь же они работают вместе, позволяя еще более гибко выводить ресурсы (давно уже можно выводить не только товары — см. параметр &class). Например, можно вызвать вот так:
[[!getProducts?
	&parents=`12,55`
	&resources=`-9,-20`
]]
Это выведет все товары из контейнеров 12 и 55, за исключением товаров 9 и 20.

Второе изменение: новый параметр &returnIds, который указывает, что нужно вернуть список id, вместо оформленных результатов.

Если он включен, то не джойнятся ТВ, картинки и другие дополнительные таблицы — скорость максимальна и в ответ вы получаете строку типа
12,55,67,3,46

А куда мы можем вставить такую строку? Верно, в параметр &resources сниппета mFilter! И получаем вот такой фильтр товаров категории:
[[!mFilter?
	&resources=`[[!msProducts?parents=`21`&returnIds=`1`]]`
	&includeMS=`1`
	&includeMSList=`price,new,favorite,popular,size,color`
	&sortFilters=`ms_new,ms_favorite,ms_popular,ms_size,ms_color,ms_price`
	&tpl=`tpl.msProducts.row`
]]

То есть, для фильтрации через mFilter больше не нужно использовать самописный сниппет, с выводом id товаров отлично справится msProducts.

Еще добавлен новый плейсхолдер [[+idx]] для вывода порядкого номера в выборке.

msGallery

Исправлен вывод большой оригинальной картинки товара в галерее, при клике. Для этого вам нужно самостоятельно заменить в чанке tpl.msGallery.row плейсхолдеры [[+image]] на [[+url]].

Переписана выборка картинок, и теперь можно нормально использовать параметры &limit, &offset, &sortby и &sortdir. Благодаря этому сниппет можно использовать совместно с getPage — подойдёт для больших галерей.

Плейсхолдер [[+idx]] тоже присутствует.

Добавлен параметр &where — теперь вы можете фильтровать выводимые картинки по имени, или описанию, указывая JSON строку с нужными параметрами.

Добавлен вывод плейсхолдеров для превьюшек, которые сгенерированы только по одному указанному параметру: высота или ширина. Например, если в настройках источника файла указать
{"w":600,"zc":1,"bg":"000000"}
то превюшки уменьшатся по ширине, сохраняя высоту пропорционально — и мы ее не узнаем. Поэтому плейсхолдер в галерее будет [[+600x]] — и теперь он работает.

Если же указана только высота, то будет соответственно, вот так — [[+x400]. В общем, крайне полезное новшество.

Остальные изменения

В контекстом меню теперь работает пункт «дублировать категорию». Я его, оказывается, просто забыл включить =)

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

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

Обновляемся, понятно, из нашего репозитория.

P.S.

Кому таки очень хочется проверить скорость msProducts при работе с обычными страницами, делайте так:
[[!msProducts?
	&class=`modResource`
	&showLog=`1`
	&parents=`0`
	&limit=`0`
]]
И смотрите, за сколько он покажет все опубликованные и неудалённые ресурсы вашего сайта.

517 отрендеренных результатов за 4 секунды — неплохо, да?

Updated 01.06.13

Как обычно, сразу всплыл неприятный баг в обновлёенной галерее — стали показываться вообще все картинки, параметр where был просто пустой.

Исправил, залил версию beta3. Хорошо, что для обновления нужно нажать ровно две кнопки.

Следующая заметка
[mSearch] Фильтрация ресурсов без MS2
Предыдущая заметка
[Tickets] Версия 1.0.0 rc2

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

  1. Дмитрий Иванов 31 мая 2013, 21:54 # 0
    Когда только успеваете! Ща обновимся :)
    1. Василий Наумкин 31 мая 2013, 22:19 # 0
      Если не пить, не курить и не тратить зря своё время — можно многое успеть.
      1. Саша Иващенко 01 июня 2013, 02:03 # 0
        это баг или фича?
        я просто обновился и у меня тоже самое на сайте )
        1. Василий Наумкин 01 июня 2013, 03:53 # 0
          Конечно, баг.

          Обновляйся, beta3.
          1. Саша Иващенко 01 июня 2013, 15:36 # 0
            Ништяк, фил лайк э тестер )
        2. Peter Zenin 01 июня 2013, 08:41 # 0
          Я вот тоже не пью не курю.
          Только моя проблема в том, что я не могу на долго концентрироваться на решении какой-то одной задачи.
          Приходиться отвлекаться от одного к другому — получается, если делать несколько дел и менять их по кургу — то норм. Например, сейчас: читать доки, смотреть фильм и решать задачу по программированию.
      2. Alex Vakhitov 01 июня 2013, 09:00 # 0
        Классно выглядит все. Нужно будет сделать интернет магазин на MS2, то чтото уже забываю modx совсем
        1. Илья 01 июня 2013, 11:34 # 0
          Исправлен вывод большой оригинальной картинки товара в галерее, при клике. Для этого вам нужно самостоятельно заменить в чанке tpl.msGallery.row плейсхолдеры [[+image]] на [[+url]].
          — это тоже пока не работает? или я чтото не так сделал.

          И еще один вопрос: У меня картинки в png прозрачные и фон у меня черный хотел бы поменять на белый
          через источники файлов добавил bg":«ffffff» но это только для новых, как изменить фон галереи не презаливая изображения?
          1. Василий Наумкин 01 июня 2013, 11:38 # 0
            Выод оригинальной картинки работает, проверено. Ты заменил в чанке плейсхолдеры? Вот тут покликай на картинки — всё окей.

            Изображения никогда не нужно перезаливать, ибо оригиналы сохраняются нетронутыми именно на такой случай. Нужно зайти в товар, выделить изображения в галерее и кликнуть в контекстном меню «перегенерировать превью».
            1. Илья 01 июня 2013, 11:53 # 0
              Спасибо фон обновляется все работает, а по поводу оригинального изображения я не правильно понял. Подумал что оригинал должен не в новом окне а как на этой странице в лайт боксе. Не подскажете что за лайт бокс используете?
              1. Илья 01 июня 2013, 12:56 # 0
                Еще одна беда у меня у некоторых товаров не меняются тв параметры страницы. Шаблон един для всех товаров. Стандартное значение тв параметра работает везде а вот меняется не везде. Прошу прощение что скорее всего не в ту ветку пишу, но может это ка кто связано MS2, раннее не встречал просто таких проблем.
                1. Василий Наумкин 01 июня 2013, 13:12 # 0
                  Работу ТВ я вообще не трогаю — это на совести самого MODX.
                2. Василий Наумкин 01 июня 2013, 13:13 # 0
                  У меня везде обычный fancybox.
                  1. Илья 01 июня 2013, 20:47 # 0
                    Спасибо за ссылку. Еще вопрос а нет ли у MS2 выгрузки YML на Я.Маркет?
                    1. Василий Наумкин 01 июня 2013, 21:40 # 0
                      Пока нет.
                      Но выгрузку не сложно сделать своими руками, можно использовать этот скрипт, для начала.
                      1. Мордынский Николай 03 июня 2013, 16:33 # 0
                        К сожалению баги остались но в более работоспособном виде


                        При обновлении страницы через f5 дерево ресурсов начинает тупить, но востанавливает работу после перезахода в товар(раньше невостанавливалось вообще)

                        Верхнее меню в закладке вебстраница продолжает пропадать, но теперь благодаря большему отступу и срабатывающей прокрутке можно добраться до блока в правом верхнем углу.
                        При выходе из товара и f5 меню появляется снова.
                        1. Мордынский Николай 03 июня 2013, 17:02 # 0
                          сори не вту ветку пост ткнул
              2. Мордынский Николай 03 июня 2013, 13:08 # 0
                Василий, последнии версии ms2 и тикеты поддерживают ACE и CKEditor в связке с AjaxManager? Если да то какие рекомендуемые настройки системные нужны(чего включить чего отключить)
                1. Василий Наумкин 03 июня 2013, 13:43 # 0
                  С Ace никогда проблем не было, бывает только с CKEditor и то, по утверждению автора компонентов Данила — это из-за глюка в Chrome.

                  В общем, мы с ним на данный момент сделали всё, что смогли, так что — проверяй.
                2. Дмитрий Иванов 03 июня 2013, 13:32 # 0
                  Что-то не пойму. Мне надо вывести название производителя товара на странице товара.
                  Плейсхолдер [[+vendor]] выводит id производителя. Значит надо написать сниппет который будет извлекать название производителя по этому id. Или я что то просмотрел в документации и есть способ проще?
                  1. Олег Ракул 03 июня 2013, 13:36 # 0
                    [[+vendor.name]]
                    1. Дмитрий Иванов 03 июня 2013, 13:38 # 0
                      Спасибо :)
                  2. Wassi Wassinen 06 июня 2013, 13:32 # 0
                    Что касается вывода превью только по ширине или по высоте — у меня работало давно. С версии 1.5.5 или как-то так. После обновления не меняются картинки в галереях товара.
                    1. Олег Ракул 07 июня 2013, 12:56 # 0
                      Баг написанный выше
                      «Что касается вывода превью только по ширине или по высоте — у меня работало давно. С версии 1.5.5 или как-то так. После обновления не меняются картинки в галереях товара.»

                      Подтвердился или нет? Хочу обновиться до 2.0.1 pl но хочется быть уверенным.
                      1. Василий Наумкин 07 июня 2013, 13:05 # 0
                        Пока единственное сообщение, с mamaboutique.ru жалоб на галерею не поступало.

                        Учитывая, что раньше регулярное выражение не позволяло работать таким плейсхолдерам — я а недоумении.
                        1. Олег Ракул 07 июня 2013, 13:17 # 0
                          ясно, спасибо значит обновление можно накатить без сомнений
                      2. Evgeny Epifanov 20 июня 2013, 19:08 # 0
                        Тоже решил попробовать ms, до этого пользовался shk. Давно смотрел на ms и, честно говоря, впечатлен удобством. Вопрос такой: можно ли в ms добавить к товару параметр, который влияет на цену? Например: промышленная швейная машина продается без двигателя в комплекте, т.к. может комплектоваться двигателем на выбор, а по цене они разные, да и машинка без двигателя никому не нужна.
                        Спасибо за ответ и за отличный ИМ для MODx.
                        1. Daniel Gibson 18 июля 2013, 23:15 # 0
                          If I wanted to add weight range shipping is it msdeliveryhandler.class.php what would need to modified?

                          I'm looking to add shipping calculations like:

                          Weight 1st Class 2nd Class
                          0 – 13 g. $7 $6
                          14 – 99 g. $10 $8.00
                          100 – 200 g. $14 $10.00
                          etc etc.
                          1. Василий Наумкин 19 июля 2013, 09:17 # 0
                            You need to create new delivery class.

                            1. Put new file in /core/components/custom/delivery/mydelivery.class.php
                            2. Extend default class in this file:
                            <?php
                            class myDelivery extends msDeliveryHandler {
                            	// Here you can write your methods
                            }
                            
                            3. Specify name of class (myDelivery) in delivery method of MS2 settings in manager.

                            Now, when user selects this delivery, it will work with your class with your logic.
                            1. Daniel Gibson 23 июля 2013, 22:21 # 0
                              Thanks for the information. I've put together a basic weight range shipping calculation handler.

                              If anyone else interested the code is:

                              <?php
                              class rangeDelivery extends msDeliveryHandler
                              {
                                   
                                  public function getcost(msOrderInterface $order, msDelivery $delivery)
                                  {
                                      $cart        = $order->ms2->cart->status();
                                      $cart_weight = $cart['total_weight'];
                                       
                                      $weight_range = array(
                                          100,
                                          500,
                                          1000,
                                          2000,
                                          10000,
                                          20000,
                                          "+20000"
                                      );
                                      $price_range  = array(
                                          6.22,
                                          6.95,
                                          8.25,
                                          11.00,
                                          25.80,
                                          40.00,
                                          46.50
                                      );
                                       
                                      for ($loop = 0; $loop < count($weight_range); $loop++) {
                                          if ($weight_range[$loop]{0} == '+') {
                                              $band_weight = (int) (substr($weight_range[$loop], 1));
                                              $band_price  = $price_range[$loop];
                                              if ($loop > 0) {
                                                  $start_price  = $price_range[$loop - 1];
                                                  $start_weight = $weight_range[$loop - 1];
                                              } else {
                                                  $start_price  = 0;
                                                  $start_weight = 0;
                                              }
                                              return ($band_price * (ceil(($cart_weight - $start_weight) / $band_weight)) + $start_price);
                                          }
                                          if ($weight_range[$loop] > $cart_weight) {
                                              return ($price_range[$loop]);
                                          }
                                      }
                                       
                                      return ($cost);
                                       
                                  }
                                   
                              }
                          2. Володя 22 июля 2013, 13:18 # 0
                            Василий привет. Столкнулся с такой проблемой:
                            Создал категорию товара, в ней еще одну подкатегорию, в ней товар. Нажал на кнопку копировать товар и у меня товар продублировался, при попытке сохранить выдал ошибку что такого ресурса не существует. И теперь в каталоге он есть, но его нельзя ни удалить, ни отредактировать! При попытке изменить — меня перекидывает на страницу редактирования главной страницы.

                            подскажи что сделать, пожалуйста!
                            да и теперь все товары так создаются! I need help!
                            1. Василий Наумкин 22 июля 2013, 13:24 # 0
                              Удали эти товары из БД, переустанови компонент.
                              1. Володя 22 июля 2013, 13:42 # 0
                                удалил, но один фиг тоже самое… в логах ругань
                                [2013-07-22 13:35:26] (ERROR @ /connectors/resource/index.php) Error 23000 executing statement:
                                INSERT INTO `modx_ms2_products` (`id`, `article`, `price`, `old_price`, `weight`, `vendor`, `new`, `popular`, `favorite`, `tags`, `color`, `size`, `source`, `casematerial`, `decoration`, `material`) VALUES (124, 0, '', '', '', 0, 0, 0, 0, '[\"undefined\"]', '[\"undefined\"]', '[\"undefined\"]', 2, '[\"undefined\"]', '[\"undefined\"]', '[\"undefined\"]')
                                Array
                                (
                                    [0] => 23000
                                    [1] => 1062
                                    [2] => Duplicate entry '["undefined"]' for key 'casematerial_2'
                                )
                                
                                [2013-07-22 13:35:48] (ERROR @ /assets/components/minishop2/connector.php) Error 42000 executing statement: 
                                Array
                                (
                                    [0] => 42000
                                    [1] => 1064
                                    [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND `msProduct`.`class_key` = 'msProduct' )' at line 1
                                casematerial я создавал ранее… может с ним что накосячил?
                                1. Василий Наумкин 22 июля 2013, 13:49 # 0
                                  Судя по всему, ты написал плагин, а в нем casematerial является уникальным ключом.

                                  Исправляй модель и таблицу.
                                  1. Володя 22 июля 2013, 13:51 # 0
                                    ))) впорол косяка
                                    помоему ты прав!
                            2. Володя 05 августа 2013, 20:55 # 0
                              Василий привет. Столкнулся со следующей проблемой:
                              1.создал 4 категории товаров, в каждой создал еще по 10 подкатегорий, в них еще штук по 5 подподкатегорий.
                              2.в одной главной категории создал 20 товаров и затем в дереве категорий присвоил им по десять мультикатерий из других подкатегорий.

                              в итоге что я имею — товар пропал из главной категории в которой он изначально был создан, то есть найти и отредактировать его невозможно. И еще глюк с тикетами, если я его поставил, то обратно корректно его уже не удалить… сыпет ошибки
                              вот как бы мои наблюдения…
                              1. Володя 05 августа 2013, 21:11 # 0
                                можно только если стрелочками — следующий и предыдущий к этому товару переместиться
                                1. Володя 05 августа 2013, 21:34 # 0
                                  повторил на тестовом-тоже самое. хотя я может зря кипиш то поднял… мож так и задумано
                                  1. Василий Наумкин 05 августа 2013, 21:45 # 0
                                    Логин пароль от тестового сайта?
                                    1. Володя 05 августа 2013, 21:47 # 0
                                      Логин s3324
                                      Пароль l5f6Z8-XhT4A
                                      1. Василий Наумкин 05 августа 2013, 22:12 # 0
                                        Поправил 2 момента, проверяй.

                                        Стало гораздо лучше, вот коммит.
                                        1. Володя 05 августа 2013, 22:52 # 0
                                          да все вроде наладилось!))) Спасибо!
                              Добавление новых комментариев отключено.