Как исключить родительский товар из похожих в pdoPage

    При выводе похожих товаров в карточке через pdoPage (или pdoResources) часто возникает ситуация, когда в списке отображается сам родительский товар. Это происходит, потому что запрос по умолчанию выбирает все ресурсы, включая текущий. Разберём, как настроить сниппет, чтобы исключить родительский элемент.

    Почему родительский товар попадает в список

    Параметр &parents задаёт ID ресурса, из которого выбираются дочерние элементы. Если указать &parents=[[+id]], то pdoPage будет искать товары, находящиеся внутри текущего ресурса. Однако сам текущий ресурс (родитель) тоже может быть выбран, если он не является контейнером или если его ID совпадает с одним из дочерних. Проблема усугубляется, когда у родительского товара нет дочерних - тогда в списке появится только он сам.

    Основное решение: параметр &showHidden

    Самый простой способ исключить родительский товар - установить &showHidden=`0` (по умолчанию 1). Этот параметр управляет отображением скрытых ресурсов. Если родительский товар не помечен как скрытый, этот метод не сработает. В таком случае используйте фильтрацию через &where.

    Использование &where для исключения ID

    Добавьте в вызов сниппета условие, которое исключает текущий ресурс по его ID. Например:

    &where=`{"id:!=":[[+id]]}`

    Этот фильтр гарантирует, что товар с ID, равным текущему, не попадёт в выборку. Полный код будет выглядеть так:

    [[!pdoPage?
      &parents=`[[+id]]`
      &element=`msProducts`
      &depth=`0`
      &tpl=`tpl.msProducts`
      &includeTVs=`1`
      &includeContent=`1`
      &sortby=`menuindex`
      &sortdir=`ASC`
      &where=`{"id:!=":[[+id]]}`
    ]]

    Альтернативные методы фильтрации

    Если вы используете pdoResources вместо msProducts, принцип тот же. Для msProducts также можно ограничить выборку по классу товара или по дополнительным полям через &tvFilters. Например, исключить товары с определённым значением ТВ-параметра:

    &tvFilters=`featured==1`

    Проверка на наличие дочерних товаров

    Иногда родительский товар выводится, потому что у него нет дочерних. Убедитесь, что в категории есть хотя бы один товар. Если категория пуста, pdoPage выведет сам родительский ресурс. В таких случаях используйте &showUnpublished=`0` и &showDeleted=`0` для дополнительной фильтрации.

    Рекомендации по SEO-оптимизации вывода

    Для улучшения ранжирования страницы с похожими товарами используйте уникальные заголовки и мета-описания для каждого товара. Убедитесь, что ссылки на похожие товары ведут на правильные URL, а в тексте анкоров используются ключевые слова. Также добавьте микроразметку Product для каждого товара в списке.

    Если вы используете пагинацию через pdoPage, настройте канонические URL и заголовки для страниц 2+.

    Часто задаваемые вопросы

    Часто задаваемые вопросы