Вывод полей второстепенной категории
Привет всем еще раз!
Такая нарисовалась проблема:
Есть товары, которые лежат сразу в нескольких категориях. Соответственно, одна у них основная, а остальные второстепенные (отмечены галочками на вкладке Категория).
Вывод на странице всех категорий через [[!msProducts?]].
Спасибо огромное Павлу!
РЕШЕНИЕ:
Павел Романов
modx.pro/help/23970#comment-139307
Сделайте копию сниппета msProducts и перед этой строкой:
Для вывода в чанках именно pagetitle делайте так:
Такая нарисовалась проблема:
Есть товары, которые лежат сразу в нескольких категориях. Соответственно, одна у них основная, а остальные второстепенные (отмечены галочками на вкладке Категория).
Вывод на странице всех категорий через [[!msProducts?]].
КАТАЛОГ
[[!msProducts?
&parents=`150`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
[[!msProducts?
&parents=`151`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
[[!msProducts?
&parents=`180`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
Надо вывести в tpl pagetitle именно категории, указанной в [[!msProducts?]]. Если такая категория является основной — проблем нет. А вот если она дополнительная — то не выводится.Спасибо огромное Павлу!
РЕШЕНИЕ:
Павел Романов
modx.pro/help/23970#comment-139307
Сделайте копию сниппета msProducts и перед этой строкой:
$output[] = $pdoFetch->getChunk($tpl, $row);
добавьте:
$row['parents'] = $scriptProperties['parents'];
Поменяйте вызовы msProducts на новый сниппет и теперь сможете в чанках использовать плейсхолдер [[+parents]], который будет выводить то, что указано в параметре &parents в вызове.Для вывода в чанках именно pagetitle делайте так:
[[#[[+parents]].pagetitle]]
//или на Fenom{$parents | resource : 'pagetitle'}
Комментарии: 36
Вы зачем спамите похожими вопросами? Предыдущий ваш вопрос был про это же, только с другого бока.
Тот вопрос про вывод всех категорий, а этот про одну второстепенную, конкретно указанную в [[!msProducts?]]
Я не понял задачу. Что за страница со второстепенными категориями?
Вот так может лучше
joxi.ru/823NelZCwlwnym
Вот нужно вывести pagetitle этот дополнительной, а не основной категории
joxi.ru/823NelZCwlwnym
Вот нужно вывести pagetitle этот дополнительной, а не основной категории
getParentIds возвращает список ИДшек всех родителей ресурса. Только на него ни как не влияет категории отмеченные во вкладке Категории
у т.е. вообще нельзя вывести поле именно такой категории?
Но надо вывести в каждом товаре pagetitle такой категории. А выводится pagetitle только основной категории, а не той, что задана через [[!msProducts?]]Имеется в виду в карточке товара, находясь на странице категории, вывести название текущей открытой категории? Не совсем понятен вопрос.
Если да, то может покажете как у вас в чанке выводится? Видимо просто
{$parent | resource : 'pagetitle'}
?Просто в чанке укажите так:
{$_modx->resource.pagetitle}
если включен fenom, если нет, то [[*pagetitle]]
{$parent | resource : 'pagetitle'}
так выводится основная категория товара, а не та, что на странице вызывается.а на странице вызывается дополнительная категория
Как вывести именно ту, которая в вызове msProduct участвует?
так выводится основная категория товара, а не та, что на странице вызывается.Если вы в момент вызова msProducts находитесь на странице нужной категории, то как я и писал выше, в чанке укажите
Как вывести именно ту, которая в вызове msProduct участвует?
{$_modx->resource.pagetitle}
так выведется название текущей страницы, т.е. текущей открытой категории, а не основной родительской категории товара В вызове msProducts вы указываете parents — это основные родители, а не второстепенные.Вовсе нет. Выводит любой ресурс msCategory по умолчанию.
Вообще не понимаю, что вы пишете. Причем тут msCategory, и где он выводится по умолчанию.
Вы не понимаете как это работает.
У каждого товара может быть ТОЛЬКО ОДНА основная категория, она указывается в бд в поле parent.
При этом товар может быть в других категориях, которые могут не являться дочерними категориями его parent.
В чанке parent — это то число, которое указано в бд у товара, а не то, что вы указали в parents при вызове сниппет msProducts
Вы не понимаете как это работает.
У каждого товара может быть ТОЛЬКО ОДНА основная категория, она указывается в бд в поле parent.
При этом товар может быть в других категориях, которые могут не являться дочерними категориями его parent.
В чанке parent — это то число, которое указано в бд у товара, а не то, что вы указали в parents при вызове сниппет msProducts
Я оговорилась: не msCategory, а сниппет msProducts
В чанке parent — это то число, которое указано в бд у товара, а не то, что вы указали в parents при вызове сниппет msProductsТак я Вам тоже самое и пишу. Что эта конструкция {$parent | resource: 'pagetitle'} не выведет то, что мне нужно, а выведет именно основного родителя.
А мне надо вывести именно ту категорию. которая в msProducts, как и писала об этом ранее и в самом вопросе.
{$_modx->resource.pagetitle}К сожалению — нет, в каталоге. Иначе, моего вопроса не возникло бы.
Каталог с категориями.
Есть категория id 150 в ней нет ни одного собственного товара.
Но есть товары из других категорий, у которых id 150 отмечена во вкладке Категории.
И при выводе в каталоге с категориями, id 150 выводит товары, в которых она отмечена. И без всяких дополнительных настроек, просто сниппетом msProduct
Вы попробуйте сами.
Какое название категории выводится в чанке, та и является основной для товара. Если это название категории с id 150, то значит у нее есть собственные товары и видимо все. Отсюда получается, что вы скорее всего неправильно свой каталог организовали.
Создайте в минишоп две категории.
В одной создайте товар, а другую отметьте в нем галочкой.
И вот выведите pagetitle этой другой категории.
Тогда Вы поймете, о чем я.
Мне не нужен pagetitle основной категории, я уже говорила, что мне нужен Pagetitle той категории, в которой выеден товар сниппетом msProducts, в данном случае id150 — она не его основная.
В одной создайте товар, а другую отметьте в нем галочкой.
И вот выведите pagetitle этой другой категории.
Тогда Вы поймете, о чем я.
Мне не нужен pagetitle основной категории, я уже говорила, что мне нужен Pagetitle той категории, в которой выеден товар сниппетом msProducts, в данном случае id150 — она не его основная.
Я прекрасно понимаю о чем вы и как это работает. Вы поймите, что этих вторичных категорий может быть несколько, поэтому должна быть какая то логика. Либо например вы находитесь на странице этой самой категории и в карточках товара нужно вывести ее название, либо вы хотите вывести название конкретной категории, id которой вы знаете заранее.
Если второй вариант, что довольно странно, то можно по той же аналогии, что и сейчас, просто вместо $parent в строке
По хорошему стоит показать ваш вызов msProducts
Если второй вариант, что довольно странно, то можно по той же аналогии, что и сейчас, просто вместо $parent в строке
{$parent | resource: 'pagetitle'}
укажите id этой категорииПо хорошему стоит показать ваш вызов msProducts
Что вторичных категорий несколько это и так понятно.
Вот я вывожу в каталоге такую категорию. и вывожу в ней товары, но своих собственных товаров она не имеет., а только отмечена галкой в товарах других категорий. И таких Категорий на странице каталога несколько.
Вызов msProducts стандартный.
Вот я вывожу в каталоге такую категорию. и вывожу в ней товары, но своих собственных товаров она не имеет., а только отмечена галкой в товарах других категорий. И таких Категорий на странице каталога несколько.
Вызов msProducts стандартный.
[[!msProducts?
&parents=`150`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
Так как мне вывести в товарах в &tpl=`programs.row` ее pagetitle? просто вместо $parent в строкеТак мне нужно как-то получить этот id, а не руками вписывать цифры, об этом и вопрос мой.
{$parent | resource: 'pagetitle'}
укажите id этой категории
Но вы же в msProducts напрямую указываете его, так укажите и в чанке.
Зачем мне для каждой категории создавать отдельный чанк tpl для вывода товаров. а не один универсальный?
50 категорий и 50 tpl? Отличающихся одной строкой?
50 категорий и 50 tpl? Отличающихся одной строкой?
Ну так у вас вызов msProducts неуниверсальный. Или вы в parents по другому указываете?
Так.
Может так понятнее будет.
Может так понятнее будет.
КАТАЛОГ
[[!msProducts?
&parents=`150`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
[[!msProducts?
&parents=`151`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
[[!msProducts?
&parents=`152`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
[[!msProducts?
&parents=`155`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
[[!msProducts?
&parents=`140`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
[[!msProducts?
&parents=`180`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
....
&tpl=`programs.row` у всех одинаковый, потому что универсальный.
Во, другой разговор, с этого и надо было начинать вопрос.
Вы можете использовать additionalPlaceholders, про который написано тут.
Но нужно обновить minishop2 как минимум до 4.2. Не знаю, как будет в синтаксисе PHx, но на феном вызов будет такой:
Вы можете использовать additionalPlaceholders, про который написано тут.
Но нужно обновить minishop2 как минимум до 4.2. Не знаю, как будет в синтаксисе PHx, но на феном вызов будет такой:
{'!msProducts' | snippet : [
'parents' => 180,
'limit' => 0,
'sortby' => '{"menuindex":"ASC"}',
'tpl' => 'programs.row',
'additionalPlaceholders' => [
'pr' => 180
]
]}
И в чанке programs.row вместо {$parent | resource: 'pagetitle'}
укажите {$additionalPlaceholders.pr | resource: 'pagetitle'}
Эх…
так выводит родителя этих всех категорий…
так выводит родителя этих всех категорий…
Чет вы неправильно делаете
Да тут сложно неправильно сделать.
Так Вы попробуйте сами.
Создайте в минишоп две категории.
В одной создайте товар, а другую отметьте в нем галочкой.
И вот выведите pagetitle этой другой категории.
modx.pro/help/23970#comment-139267
Создайте в минишоп две категории.
В одной создайте товар, а другую отметьте в нем галочкой.
И вот выведите pagetitle этой другой категории.
modx.pro/help/23970#comment-139267
Уже делал такое без проблем и не раз на многих проектах. Я же говорю, вы что-то делаете неправильно.
Этого не может быть. Поскольку все, что Вы рекомендовали я сделала один-в-один, а результата нет.
Значит, Вы не поняли мой вопрос.
Мне нужно вывести pagetitle той категории, которая указана в msproducts.
Если такая категория является основной — проблем нет. А вот если она дополнительная — то не выводится.
В любом случае, спасибо за попытку помочь.
Значит, Вы не поняли мой вопрос.
Мне нужно вывести pagetitle той категории, которая указана в msproducts.
Если такая категория является основной — проблем нет. А вот если она дополнительная — то не выводится.
В любом случае, спасибо за попытку помочь.
Если Вам нужно вывести второстепенные категории товара, сделайте сниппет myCategories:
В чанке msProducts (programs.row) вызывайте его так:
В чанке subcat_tpl доступны любые поля категории: [[+pagetitle]], [[+content]] и т. д.
<?php
$id = $modx->getOption('id', $scriptProperties, $modx->resource->get('id'));
$table_cont = $modx->getOption('table_prefix').'site_content';
$table_cat = $modx->getOption('table_prefix').'ms2_product_categories';
$sql = "SELECT * FROM {$table_cat} WHERE `product_id` = {$id}";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $category){
$cid = $category['category_id'];
if($result = $modx->query("SELECT * FROM {$table_cont} WHERE id = {$cid}")){
$row = $result->fetch(PDO::FETCH_ASSOC);
$out .= $modx->getChunk($tpl, $row);
}
}
return $out;
В чанке msProducts (programs.row) вызывайте его так:
[[myCategories? &id=`[[+id]]`&tpl=`subcat_tpl`]]
Или на Fenom{'myCategories' | snippet: ['id' => $id, 'tpl' => 'subcat_tpl']}
В карточке товара &id можно не указывать.В чанке subcat_tpl доступны любые поля категории: [[+pagetitle]], [[+content]] и т. д.
Спасибо, но мне нужно вывести pagetitle той категории, которая указана в msproducts.
Если такая категория является основной — проблем нет. А вот если она дополнительная — то не выводится.
Ваш сниппет выводит все дополнительные категории.
Может Вы знаете, как вывести именно ту, которая указана?
Если такая категория является основной — проблем нет. А вот если она дополнительная — то не выводится.
Ваш сниппет выводит все дополнительные категории.
Может Вы знаете, как вывести именно ту, которая указана?
Имеется та, что указана в вызове в &parents?
То есть тут нужно в чанке programs.row вывести pagetitle категории с ID = 180?
То есть тут нужно в чанке programs.row вывести pagetitle категории с ID = 180?
[[!msProducts?
&parents=`180`
&limit=`0`
&sortby=`{ "menuindex":"ASC" }`
&tpl=`programs.row`
]]
То есть тут нужно в чанке programs.row вывести pagetitle категории с ID = 180?Да, но таких категорий на странице несколько и programs.row у всех в tpl.
Он одинаков для всех категорий.
modx.pro/help/23970#comment-139274
Сделайте копию сниппета msProducts и перед этой строкой:
Поменяйте вызовы msProducts на новый сниппет и теперь сможете в чанках использовать плейсхолдер [[+parents]], который будет выводить то, что указано в параметре &parents в вызове.
Для вывода в чанках именно pagetitle делайте так:
$output[] = $pdoFetch->getChunk($tpl, $row);
добавьте: $row['parents'] = $scriptProperties['parents'];
Поменяйте вызовы msProducts на новый сниппет и теперь сможете в чанках использовать плейсхолдер [[+parents]], который будет выводить то, что указано в параметре &parents в вызове.
Для вывода в чанках именно pagetitle делайте так:
[[#[[+parents]].pagetitle]]
//или на Fenom
{$parents | resource : 'pagetitle'}
Спасибо!
То, что нужно!
То, что нужно!
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.