Вывести теги товара на странице товара zoomx (smarty)

Здравствуйте!

upd 29.05.2024:

Это простое решение как вывести теги товара на странице товара используя сниппет msOptions.
Просто выводит список тегов теги, которые можно оформить как нужно.

Вызов в шаблоне товара через сниппет (zoomx, smarty):

{'msOptions'|snippet:[
	  'options' => 'tags',
	  'tplRow' => '',
	  'tplOuter' => '',
	  'tplEmpty' => '',
	  'tpl' => '@FILE chunks/tpl.msProductOptionsTags.tpl'
  ]}

Код чанка:

{foreach $options as $tagsname => $tags}
    {foreach $tags as $tag}
        {$tag} 
    {/foreach}
{/foreach}

Загрузить в /core/elements/chunks (создать папки «elements» и «chunks» если нет. Если изменяли путь до ядра — заменить на свой).

{ $tag } Можно оформить как нужно:

<a href="/search?tag={$tag}" class="some-class">{$tag}</a>

т.е:

{foreach $options as $tagsname => $tags}
    <p>
    {foreach $tags as $tag}
        <a href="/search?tag={$tag}" class="some-class">{$tag}</a>
    {/foreach}
    </p>
{/foreach}
Егор
28 мая 2024, 11:44
modx.pro
384
0

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

Павел Романов
28 мая 2024, 12:22
2
+2
Сделайте сниппет getTags:
<?php
$id = $modx->getOption('id', $scriptProperties, $modx->resource->get('id'));
$table = $modx->getOption('table_prefix').'ms2_products';
if($query = $modx->query("SELECT * FROM {$table} WHERE id = {$id}")){
	$prod = $query->fetch(PDO::FETCH_ASSOC);
	$tags = json_decode($prod['tags'], 1);
	foreach($tags as $tag){
	    $out .= $modx->getChunk($tpl, array('tag' =>  $tag));
	}
}
return $out;

Вызывайте:
[[getTags? &tpl=`tag_tpl`]]

Если не на странице товара, указывайте &id:
[[getTags? &id=`[[+id]]` &tpl=`tag_tpl`]]

Чанк tag_tpl:
<a href="/search/?[[+tag]]" class="some-class">[[+tag]]</a>
    Егор
    28 мая 2024, 12:47
    0
    Спасибо больше! На fenom, наверное, будет работать. На zoomx не работает. Пути проверил, файлы все загрузил. Это трудная дорога…
    Алексей
    28 мая 2024, 13:57
    +1
    Добрый день.
    Делал вот на этом сайте АнтикМагаз. Там называются метки товаров. Там это отдельное поле «Теги» (список автодополнение). Если надо, напишу как.
    Вот здесь описывал Облако тегов для miniShop2
      Егор
      28 мая 2024, 14:10
      0
      Там это отдельное поле «Теги» (список автодополнение).
      В том то и дело, что все используют какие-то свистелки и… к тегам, а обычный, классический способ для zoomx нигде не написан. Я написал автору дополнения, вряд ли он ответит, конечно, но вдруг.
      На счет коммерческого предложения, спасибо, откажусь. Потому что во-первых, нищеброд, а во-вторых, делаю не коммерческий сайт для себя, типа как хобби о рыбалке. Спасибо за ваш ответ!
    Артур Шевченко
    28 мая 2024, 17:51
    +1
    {foreach $options as $option}
    			  {if $option is array}
    				  {$option | join : ', '}
    			  {else}
    				  {$option}
    			  {/if}
      {/foreach}
      Егор
      29 мая 2024, 14:09
      0
      Да, я пробовал… На zoomx (smarty) получаю ошибку:

      Syntax error in template "string:{foreach $options as $option} {if $optio..." on line 2 "{if $option is array}" 
      too many shorthand attributes

      Синтаксическая ошибка в шаблоне "строка: {foreach $options as $option} {if $option..." в строке 2 "{if $optio is array}"
      слишком много сокращенных атрибутов
        Егор
        29 мая 2024, 14:31
        0
        Вот так заработал вывод тегов на zoomx (smarty). Всем спасибо!
        {foreach $options as $tagsname => $tags}
            {foreach $tags as $tag}
                {$tag}
            {/foreach}
        {/foreach}
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8