Вывод всех категорий товара

Привет всем!
Есть такой сниппет:
Вывод всех категорий товара
docs.modx.pro/komponentyi/minishop2/poleznyie-vyiborki/vyivod-vsex-kategorij-tovara
<?php
if (empty($rid)) {$rid = $modx->resource->id;}
if (empty($pid)) {$pid = $modx->resource->parent;}
if (empty($delimeter)) {$delimeter = ' , ';}
$scheme = $modx->getOption('link_tag_scheme', null, 'full', true);

$q = $modx->newQuery('msCategory');
$q->leftJoin('msCategoryMember', 'msCategoryMember', array(
    '`msCategory`.`id` = `msCategoryMember`.`category_id`'
));
$q->sortby('pagetitle','ASC');
$q->groupby('id');
$q->select(array('id','pagetitle'));
$q->where('`msCategoryMember`.`product_id` = '.$rid.' OR `id` = '.$pid);

$result = array();
if ($q->prepare() && $q->stmt->execute()) {
    while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
        $url = $modx->makeUrl($row['id'], '', '', $scheme);
        $result[] = '<a href="'.$url.'">'.$row['pagetitle'].'</a>';
    }
}
return implode($delimeter, $result);
Но он выводит категории только на странице товара.

Кто знает, как вывести тоже самое на странице категории в товарах, Напишите, пожалуйста.
kudesia
17 мая 2023, 23:12
modx.pro
293
0

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

Артур Шевченко
17 мая 2023, 23:21
+1
На Fenom так
{'!SnippetName' | snippet: [
'rid' => $id,
'pid' => $parent
]}
На родном синтаксисе так
[[!SnippetName?
&rid=`[[+id]]`
&pid=`[[+parent]]`
]]
SnippetName — заменить на название сниппет.

Но лучше в msProducts дописать параметр leftJoin, кажется так будет немного оптимизированнее
    kudesia
    17 мая 2023, 23:27
    0
    Спасибо огромное, работает.

    Можете еще сказать, как вывести только ID или только pagetitle?
      Артур Шевченко
      17 мая 2023, 23:40
      0
      <?php
      if (empty($rid)) {$rid = $modx->resource->id;}
      if (empty($pid)) {$pid = $modx->resource->parent;}
      if (empty($delimeter)) {$delimeter = ' , ';}
      $pdo = $modx->getService('pdoTools');
      $scheme = $modx->getOption('link_tag_scheme', null, 'full', true);
      
      $q = $modx->newQuery('msCategory');
      $q->leftJoin('msCategoryMember', 'msCategoryMember', array(
          '`msCategory`.`id` = `msCategoryMember`.`category_id`'
      ));
      $q->sortby('pagetitle','ASC');
      $q->groupby('id');
      $q->select($modx->getSelectColumns('msCategory'));
      $q->where('`msCategoryMember`.`product_id` = '.$rid.' OR `id` = '.$pid);
      
      $result = array();
      $html = '';
      if ($q->prepare() && $q->stmt->execute()) {
          while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
              if($tpl){
                  $html .= $pdo->parseChunk($tpl, $row);
              }
              else{
                   $result[] = $row;
              }
          }
      }
      return $html ?: $result;
      Добавил параметр tpl это обычный чанк, в нём доступен массив полей ресурса в виде плейсхолдеров типа {$pagetitle} или [[+pagetitle]]. Можете выводить что угодно и как угодно.
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    3