Вывод товаров с аналогичным названием

Добрый день!

Возникла необходимость вывода товаров с похожим названием.

К примеру у меня есть товар, который называется Argus, необходимо на странице этого товара вывести другие товары (если они есть) с аналогичным названием… Argus 1, Argus 2, Argus 3 и т.д.

Заранее спасибо!
Алексей
08 декабря 2015, 07:11
modx.pro
2
3 356
0

Комментарии: 34

mekirile
08 декабря 2015, 10:37
+1
У меня подобная задача решается таким способом:

[[!pdoPage?
    &element=`msProducts`
    &limit=`15`
    &parents=`714`
    &sortby=`{"createdon":"DESC"}`
    &where=`{"msProduct.pagetitle:REGEXP":"[[pdoField?
    &id=`[[*id]]`
    &field=`pagetitle`

]]"}`
    &sortdir=`DESC`
]]
    Алексей
    08 декабря 2015, 10:40
    0
    Спасибо за ответ!

    Но у меня не стоит minishop ( простой каталог без корзины и прочего)

    Как быть в таком случае?
      Павел Романов
      08 декабря 2015, 12:41
      +1
      Также, только упростить немного ))):
      [[!pdoPage?
      .........
          &where=`{"pagetitle:REGEXP":"[[*pagetitle]]"}`
      ]]
        Алексей
        08 декабря 2015, 13:37
        0
        Чет не понимаю ))

        Я пишу так

        [[!pdoPage?
                &element=`msProducts`
                &limit=`15`
                &parents=`1` // это корневая папка каталога
                &sortby=`{"createdon":"DESC"}`
                &where=`{"pagetitle:REGEXP":"[[*pagetitle]]"}`
                &sortdir=`DESC`
                ]]
        Вместо msproducts что необходимо писать?
          Павел Романов
          08 декабря 2015, 13:51
          0
          У Вас стоит сниппет msProducts? Нет. Значит и не надо его писать ).

          Если у Вас установлен pdoTools, то в &element вообще ничего писать не нужно — по умолчанию используется сниппет pdoResources.

          Если pdoTools не установлен, а есть getPage с getResources, то так:
          [[!getPage?
                  &element=`getResources`
                  &limit=`15`
                  &parents=`1`
                  &sortby=`{"createdon":"DESC"}`
                  &where=`{"pagetitle:REGEXP":"[[*pagetitle]]"}`
                  &sortdir=`DESC`
                  ]]
            Алексей
            08 декабря 2015, 13:57
            0
            Ничего почему то не выводится, ни через pdopage ни через get (

            Пробовал указывать и корень каталога и конкретную категорию.
              mekirile
              08 декабря 2015, 14:03
              0
              А если убрать эту строчку &where=`{«pagetitle:REGEXP»:"[[*pagetitle]]"}` вообще что-нибудь выводит?)
                Алексей
                08 декабря 2015, 14:10
                0
                Ничего не выводит (
                  Павел Романов
                  08 декабря 2015, 14:13
                  0
                  В контейнере с ID=1 действительно есть ресурсы?
                  Они опубликованы?
                Павел Романов
                08 декабря 2015, 14:12
                0
                Согласен с mekirile. Проверьте без условия, только sortdir уберите (он не нужен, поскольку уже прописан в sortby):
                [[getResources?
                        &limit=`15`
                        &parents=`1`
                        &sortby=`{"createdon":"DESC"}`
                	&tpl=`@INLINE [[+pagetitle]]`
                ]]
                Если так что-то выведет, то поставьте условие:
                [[getResources?
                        &limit=`15`
                        &parents=`1`
                        &sortby=`{"createdon":"DESC"}`
                        &where=`{"pagetitle:REGEXP":"[[*pagetitle]]"}`
                	&tpl=`@INLINE [[+pagetitle]]`
                ]]
                Если результатов не будет замените параметр where на такой:
                &where=`{"pagetitle:LIKE":"%[[*pagetitle]]%"}`
                и естественно, пропишите свой &tpl.
                  Алексей
                  08 декабря 2015, 14:17
                  0
                  Вставил так

                  [[!pdoResources?
                  							&parents=`1`
                  							&showHidden=`1`
                  							&tpl=`catalog_item`
                  							&limit=`50`
                  							&depth=`2`
                  							&includeContent=`0`
                  							&prepareTVs=`1`
                  							&includeTVs=`pazmeri_uchastka`
                  							&processTVs=`1`
                  							&sortby=`{"createdon":"DESC"}`
                                              &where=`{"pagetitle:LIKE":"%[[*pagetitle]]%"}`
                                              &sortdir=`DESC`
                  							]]
                  Товар выводится, но в похожих товарах выводится только тот же товар, т.е захожу к примеру в товар Argus1 и вижу товар Argus1, хотя еще созданы товары Argus2 и Argus3
                    Павел Романов
                    08 декабря 2015, 14:27
                    0
                    Что у Вас в чанке catalog_item?
                      Алексей
                      08 декабря 2015, 14:33
                      0
                      верстка товара с TV параметрами для вывода в каталоге ( никаких сниппетов там нет)

                      собственно catalog_item выводит товар в виде


                      Пётр Молчанов
                      08 декабря 2015, 14:50
                      0
                      захожу к примеру в товар Argus1 и вижу товар Argus1, хотя еще созданы товары Argus2 и Argus3

                      если через LIKE, то Argus2 и Argus3 никак не подходят под этот поиск, если искать Argus1
                        Алексей
                        08 декабря 2015, 14:51
                        0
                        А как быть тогда? )
                          Пётр Молчанов
                          08 декабря 2015, 14:53
                          0
                          как вариант можно переименовать в Argus 1, Argus 2 и т.п. (т.е. добавив пробел), тогда можно попробовать применить поиск MATCH… AGAINST
                          Алексей
                          08 декабря 2015, 14:55
                          0
                          У меня товары с пробелом идут )

                          Как тогда поиск MATCH… AGAINST применить?
                          mekirile
                          08 декабря 2015, 14:53
                          0
                          Написать сниппет, который будет брать часть названия до пробела, например)
                          Пётр Молчанов
                          08 декабря 2015, 14:55
                          0
                          Вот кусок sql-запроса, который я использовал у себя в самописной фигне
                          WHERE id != :id AND MATCH(`title`) AGAINST("+'.str_replace(' ','+',$title).'" IN BOOLEAN MODE)
                          который тоже находил схожие записи по названию, тебе осталось только интегрировать это в модыкс
                        Павел Романов
                        08 декабря 2015, 14:55
                        0
                        Кстати да, об исходном условии-то мы и забыли )))
                        А у Вас все объекты называются по такому шаблону? То есть *****1, ***2, ****3 и т. д.?
                          Алексей
                          08 декабря 2015, 14:58
                          0
                          А у Вас все объекты называются по такому шаблону? То есть *****1, ***2, ****3 и т. д.?
                          Да, все товары с пробелами идут, иногда товар называется Argus 2A
                          Павел Романов
                          08 декабря 2015, 15:12
                          0
                          Тогда можно сделать такой сниппет:
                          <?php
                          $arr = explode(' ', $input);
                          $last = array_pop($arr);
                          unset($last);
                          return implode(' ', $arr);
                          Назвать его, к примеру, similar и в условии прописать:
                          &where=`{"pagetitle:LIKE":"%[[*pagetitle:similar]]%"}
                          Но тогда, естественно, не использовать пробелы в цифровых обозначениях. То есть «2А», а не «2 А», поскольку тут название разбивается именно по пробелам.
                          Алексей
                          08 декабря 2015, 15:18
                          0
                          del
                          Алексей
                          08 декабря 2015, 15:18
                          0
                          При таком раскладе выводит вообще весь каталог (
                          Павел Романов
                          08 декабря 2015, 15:21
                          0
                          Что выводит такая конструкция, если её прописать на странице «Аргус 1»?
                          [[*pagetitle:similar]]
                          Алексей
                          08 декабря 2015, 15:23
                          0
                          Pavel, прошу прощения &where=`{«pagetitle:LIKE»:"%[[*pagetitle:similar]]%"} работает, Вы забыли ковычку закрыть в конце и я не углядел сразу ))
                          Алексей
                          08 декабря 2015, 15:27
                          0
                          Теперь вопрос следующий… как убрать вывод того же товара на странице с товаром?

                          На странице Аргус 1 убрать из «похожих товаров » Аргус 1, оставить только Аргус 2 и т.д.
                          Павел Романов
                          08 декабря 2015, 15:30
                          0
                          Да, точно, опечатался ))
                          Убрать текущий можно так:
                          &resources=`-[[*id]]`
                          Алексей
                          08 декабря 2015, 15:37
                          0
                          Pavel, все работает!

                          От души Спасибо! )

                          P.S. в Минске не будете? Лично хочу сказать Спасибо )
                          Павел Романов
                          08 декабря 2015, 15:40
                          0
                          Да не за что )
                          К сожалению, не буду.
                          Пётр Молчанов
                          08 декабря 2015, 15:44
                          0
                          не рекомендовал бы я использовать LIKE, тем более со множеством значений. при определенном кол-ве записей всё будет безбожно тормозить. я поэтому и переделал все на MATCH… AGAINST, разница по скорости вышла раз в 100 на момент реализации
                          Алексей
                          08 декабря 2015, 15:46
                          0
                          У меня товаров не много… похожих 3-4 товара, поэтому для меня подходит )

                          Но Спасибо за совет, на будущее учту )
                          Алексей
                          08 декабря 2015, 15:12
                          0
                          Вот кусок sql-запроса, который я использовал у себя в самописной фигне
                          Не на столько я силен в Модексе ))
      Алексей
      08 декабря 2015, 14:10
      0
      В принципе пагинация мне и не нужна
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        34