Minishop2 как вывести мультикатегорию товара?

Приветствую, есть каталог товаров сделан на minishop2, но все товары сделаны одним списком, в категории ITEM.

И отдельно созданы категории? в них товаров нет, но к ним прикреплены товары по методу мульикатегорий.
Так удобно редактировать, когда товары в одном месте одним списком.

Но вот беда, хлебные крошки не знаю как сделать, делаю на pdoCrumbs, нужно что бы в хлебных крошках выводилась мультикатегория товара, а родная категория нет. Как это сделать?

ITEM (родительскаяя категория)
-товар 1
— товар 2
— товар 3

CAT1 (мультикатегория)
CAT2 (мультикатегория)
CAT3 (мультикатегория)

Сейчас на странице товара хлебные крошки всегда выглядят так: ГЛАВНАЯ/ КАТАЛОГ / ITEM / ТОВАР.
А нужно так: ГЛАВНАЯ/ КАТАЛОГ / CAT1 / ТОВАР.

Помогите пожалуйста. Подскажите куда копать? Как получить мультикатегорию товара, на странице товара?
Роман
24 декабря 2019, 01:00
modx.pro
1 054
0

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

Олег Щавелев
24 декабря 2019, 07:12
1
+2
@Василий Наумкин уже отвечал на данный вопрос. Поиск это наше все)

Код @Василий Наумкин, так как уже создан новый вопрос на Modx.Pro
$id = $modx->resource->id;
$tpl = '@INLINE <a href="[[~[[+id]]]]">[[+pagetitle]]</a>';
$pdo = $modx->getService('pdoFetch');

$options = array(
	'innerJoin' => array(
		'msCategory' => array('on' => 'msCategoryMember.category_id = msCategory.id')
	),
	'select' => array('msCategory' => 'all'),
	'sortby' => 'msCategory.id'
);
$conditions = array('product_id' => $id);
$rows = $pdo->getCollection('msCategoryMember', $conditions, $options);

$output = '';
foreach ($rows as $row) {
	$output .= $pdo->getChunk($tpl, $row);
}

return $output;
    Роман
    24 декабря 2019, 13:00
    0
    @Олег Щавелев БЛАГОДАРЮ! Подскажите пожалуйста, а как получить родителя мультикатегории? Например если так:

    ITEM
    -товар 1

    CAT1 (мультикатегория)
    -SUBCAT (этой мультикатегории присвоен товар 1)

    Да я искал, все перерыл, но решения для мультикатегорий + PDOcrumbs нет :(
      Роман
      24 декабря 2019, 13:11
      0
      @Олег Щавелев БЛАГОДАРЮ! Сейчас получается выводит мультикатегорию, и категорию товара CAT1 / ITEM, думаю как бы ITEM убрать из цикла, это контейнер всех товаров.

      Подскажите пожалуйста, а как получить еще родителя мультикатегории? Например если так:
      ITEM
      -товар 1
      CAT1 (мультикатегория)
      -SUBCAT (этой мультикатегории присвоен товар 1)

      Да я искал, все перерыл, но решения для мультикатегорий + PDOcrumbs нет :(
        Олег Щавелев
        24 декабря 2019, 14:29
        0
        Давайте разбираться поэтапно.
        Я думаю что в данной ситуации, не важно какой это ID. По сути это документ Modx в первую очередь.
        Для того что бы получить ID родителя на 1 уровень выше можно воспользоваться pdoField или воспользоваться переменной шаблона {$parent}

        Если к примеру вы выбрали способ воспользоватся переменной шаблона то вы можете получить по ID любое поле.

        К примеру так {$parent | resource: 'pagetitle'} получаем pagetitle по ID родителя.

        Как-то так.
          Роман
          24 декабря 2019, 14:53
          0
          Нет, к сожалению простые снипеты не работают с мультикатегориями minishop2.
          Если вызвать это {$parent | resource: 'pagetitle'} на странице товара, то он просто распечатает pagetitle этого товара, и никак его родителя, а его родитель это контейнер ITEM который неопубликован, это сделано для того что бы все товары были в админке одним списком в одном месте. А в категории они просто присвоены. Физически их там нет, поэтому и парента просто нет. А нужен парент МУЛЬТИКАТЕГОРИИ.

          ITEM (скрытый контейнер всех товаров)
          -товар 1
          CAT1 (категория)
          -SUBCAT (этой подкатегории присвоен товар 1)

          И если я нахожусь на странице товара 1, хочу получить путь (breadcrumbs) из мультикатегорий
          CAT1 > SUBCAT > товар 1, но сейчас получается только ITEM > товар 1.

          Но благодаря вашему сниппету от @Василий Наумкин сейчас получилось получить мультикатегорию товара, и плюс родную категорию товара :( но ее думаю смогу минусовать, она не нужна в цепочке,
          сейчас так SUBCAT > ITEM. Но это все равно пока не то, нужно CAT1 > SUBCAT > товар 1.

          Распечатал массив $rows вашего сниппета и увидел там ключ URI, в который попадает вся цепочка мультикатегорий товара,
          Сделал так
          foreach ($rows as $row) {
           // $output .= $pdo->getChunk($tpl, $row);
            $output .= $row[uri];
          }
          Получил это в виде alias: CAT1 > SUBCAT > ITEM
          Сейчас застрял на этом, осталось получить pagetitle этих alias, но их нет в массиве :( и убрать из этой цепочки контейнер товаров ITEM. В общем сдвинулся, но не получается пока сделать хлебные крошки из мультикатегорий товаров.
          Как получить pagetitle в сниппете от Василия?
          И как бы минусовать основного родителя товаров ITEM?
            Олег Щавелев
            24 декабря 2019, 16:10
            0
            Нет, к сожалению простые снипеты не работают с мультикатегориями minishop2.
            Если вызвать это {$parent | resource: 'pagetitle'} на странице товара, то он просто распечатает pagetitle этого товара, и никак его родителя, а его родитель это контейнер ITEM который неопубликован, это сделано для того что бы все товары были в админке одним списком в одном месте. А в категории они просто присвоены. Физически их там нет, поэтому и парента просто нет.
            Ну конечно в шаблоне нет потому что в шаблоне {$_modx->resource.parent} Я писал в контексте чанка или tpl сниппета мультикатегории

            $id = $modx->resource->id;
            $tpl = '@INLINE {$parent | resource : 'pagetitle'}';
            $pdo = $modx->getService('pdoFetch');
            Кстати pdotools должен работать Fenom

            сейчас так SUBCAT > ITEM. Но это все равно пока не то, нужно CAT1 > SUBCAT > товар 1.

            Распечатал массив $rows вашего сниппета и увидел там ключ URI, в который попадает вся цепочка мультикатегорий товара

            Сделал так

            foreach ($rows as $row) {
            // $output .= $pdo->getChunk($tpl, $row);
            $output .= $row[uri];
            }

            Получил это в виде alias: CAT1 > SUBCAT > ITEM
            Сейчас застрял на этом, осталось получить pagetitle этих alias, но их нет в массиве :( и убрать из этой цепочки контейнер товаров ITEM. В общем сдвинулся, но не получается пока сделать хлебные крошки из мультикатегорий товаров.
            Как получить pagetitle в сниппете от Василия?
            И как бы минусовать основного родителя товаров ITEM?


            Сформулируйте более четко что вы хотите сделать в виде алгоритма потому что я даже не знаю с чего начать что дать в свою очередь четкий ответ.
              Роман
              24 декабря 2019, 16:21
              0
              Если просто, то хочу что-бы хлебные крошки для страницы товара, выводить с УЧЕТОМ МУЛЬТИКАТЕГОРИЙ В КОТОРЫХ он ДОБАВЛЕН :) Наверное так правильно сформулировать.

              Если мы переходим на страницу товара из мультикатегории его, то в хлебных крошках должен быть путь от мультикатегории, а не настоящей категории в которой он создан. Понимаете?

              Даже на сайте Василия который создан для примера работы, этого нет, вот посмотрите, показаны товары из КАТЕГОРИИ 2 minishop2.com/catalog/?resource|parent=12
              Пройдите на страницу ТОВАРА 2 minishop2.com/catalog/category-3/product-2
              И увидите, что в хлебных крошках его реальная категория, КАТЕГОРИЯ 3, а не 2 с которой мы пришли.
              Как сделать так что бы в хлебных крошках была виртуальная категория я не знаю :(
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7