Minishop2 как вывести мультикатегорию товара?
Приветствую, есть каталог товаров сделан на minishop2, но все товары сделаны одним списком, в категории ITEM.
И отдельно созданы категории? в них товаров нет, но к ним прикреплены товары по методу мульикатегорий.
Так удобно редактировать, когда товары в одном месте одним списком.
Но вот беда, хлебные крошки не знаю как сделать, делаю на pdoCrumbs, нужно что бы в хлебных крошках выводилась мультикатегория товара, а родная категория нет. Как это сделать?
ITEM (родительскаяя категория)
-товар 1
— товар 2
— товар 3
CAT1 (мультикатегория)
CAT2 (мультикатегория)
CAT3 (мультикатегория)
Сейчас на странице товара хлебные крошки всегда выглядят так: ГЛАВНАЯ/ КАТАЛОГ / ITEM / ТОВАР.
А нужно так: ГЛАВНАЯ/ КАТАЛОГ / CAT1 / ТОВАР.
Помогите пожалуйста. Подскажите куда копать? Как получить мультикатегорию товара, на странице товара?
И отдельно созданы категории? в них товаров нет, но к ним прикреплены товары по методу мульикатегорий.
Так удобно редактировать, когда товары в одном месте одним списком.
Но вот беда, хлебные крошки не знаю как сделать, делаю на pdoCrumbs, нужно что бы в хлебных крошках выводилась мультикатегория товара, а родная категория нет. Как это сделать?
ITEM (родительскаяя категория)
-товар 1
— товар 2
— товар 3
CAT1 (мультикатегория)
CAT2 (мультикатегория)
CAT3 (мультикатегория)
Сейчас на странице товара хлебные крошки всегда выглядят так: ГЛАВНАЯ/ КАТАЛОГ / ITEM / ТОВАР.
А нужно так: ГЛАВНАЯ/ КАТАЛОГ / CAT1 / ТОВАР.
Помогите пожалуйста. Подскажите куда копать? Как получить мультикатегорию товара, на странице товара?
Комментарии: 7
@Василий Наумкин уже отвечал на данный вопрос. Поиск это наше все)
Код @Василий Наумкин, так как уже создан новый вопрос на Modx.Pro
Код @Василий Наумкин, так как уже создан новый вопрос на 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;
@Олег Щавелев БЛАГОДАРЮ! Подскажите пожалуйста, а как получить родителя мультикатегории? Например если так:
ITEM
-товар 1
CAT1 (мультикатегория)
-SUBCAT (этой мультикатегории присвоен товар 1)
Да я искал, все перерыл, но решения для мультикатегорий + PDOcrumbs нет :(
ITEM
-товар 1
CAT1 (мультикатегория)
-SUBCAT (этой мультикатегории присвоен товар 1)
Да я искал, все перерыл, но решения для мультикатегорий + PDOcrumbs нет :(
@Олег Щавелев БЛАГОДАРЮ! Сейчас получается выводит мультикатегорию, и категорию товара CAT1 / ITEM, думаю как бы ITEM убрать из цикла, это контейнер всех товаров.
Подскажите пожалуйста, а как получить еще родителя мультикатегории? Например если так:
ITEM
-товар 1
CAT1 (мультикатегория)
-SUBCAT (этой мультикатегории присвоен товар 1)
Да я искал, все перерыл, но решения для мультикатегорий + PDOcrumbs нет :(
Подскажите пожалуйста, а как получить еще родителя мультикатегории? Например если так:
ITEM
-товар 1
CAT1 (мультикатегория)
-SUBCAT (этой мультикатегории присвоен товар 1)
Да я искал, все перерыл, но решения для мультикатегорий + PDOcrumbs нет :(
Давайте разбираться поэтапно.
Я думаю что в данной ситуации, не важно какой это ID. По сути это документ Modx в первую очередь.
Для того что бы получить ID родителя на 1 уровень выше можно воспользоваться pdoField или воспользоваться переменной шаблона {$parent}
Если к примеру вы выбрали способ воспользоватся переменной шаблона то вы можете получить по ID любое поле.
К примеру так {$parent | resource: 'pagetitle'} получаем pagetitle по ID родителя.
Как-то так.
Я думаю что в данной ситуации, не важно какой это ID. По сути это документ Modx в первую очередь.
Для того что бы получить ID родителя на 1 уровень выше можно воспользоваться pdoField или воспользоваться переменной шаблона {$parent}
Если к примеру вы выбрали способ воспользоватся переменной шаблона то вы можете получить по ID любое поле.
К примеру так {$parent | resource: 'pagetitle'} получаем pagetitle по ID родителя.
Как-то так.
Нет, к сожалению простые снипеты не работают с мультикатегориями 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, в который попадает вся цепочка мультикатегорий товара,
Сделал так
Сейчас застрял на этом, осталось получить pagetitle этих alias, но их нет в массиве :( и убрать из этой цепочки контейнер товаров ITEM. В общем сдвинулся, но не получается пока сделать хлебные крошки из мультикатегорий товаров.
Как получить pagetitle в сниппете от Василия?
И как бы минусовать основного родителя товаров ITEM?
Если вызвать это {$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?
Нет, к сожалению простые снипеты не работают с мультикатегориями 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?
Сформулируйте более четко что вы хотите сделать в виде алгоритма потому что я даже не знаю с чего начать что дать в свою очередь четкий ответ.
Если просто, то хочу что-бы хлебные крошки для страницы товара, выводить с УЧЕТОМ МУЛЬТИКАТЕГОРИЙ В КОТОРЫХ он ДОБАВЛЕН :) Наверное так правильно сформулировать.
Если мы переходим на страницу товара из мультикатегории его, то в хлебных крошках должен быть путь от мультикатегории, а не настоящей категории в которой он создан. Понимаете?
Даже на сайте Василия который создан для примера работы, этого нет, вот посмотрите, показаны товары из КАТЕГОРИИ 2 minishop2.com/catalog/?resource|parent=12
Пройдите на страницу ТОВАРА 2 minishop2.com/catalog/category-3/product-2
И увидите, что в хлебных крошках его реальная категория, КАТЕГОРИЯ 3, а не 2 с которой мы пришли.
Как сделать так что бы в хлебных крошках была виртуальная категория я не знаю :(
Если мы переходим на страницу товара из мультикатегории его, то в хлебных крошках должен быть путь от мультикатегории, а не настоящей категории в которой он создан. Понимаете?
Даже на сайте Василия который создан для примера работы, этого нет, вот посмотрите, показаны товары из КАТЕГОРИИ 2 minishop2.com/catalog/?resource|parent=12
Пройдите на страницу ТОВАРА 2 minishop2.com/catalog/category-3/product-2
И увидите, что в хлебных крошках его реальная категория, КАТЕГОРИЯ 3, а не 2 с которой мы пришли.
Как сделать так что бы в хлебных крошках была виртуальная категория я не знаю :(
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.