Вывод списка категорий для товаров через сниппет сильно тормозит сайт
Имеется база товаров, входящие в различные категории
Необходимо вывести список товаров с категориями (основной и дополнительными)
Всего примерно 50 категорий. У товара назначены от 1 до 3 категорий
Вывод 18 карточек товаров на странице с выводом категорий занимает 12секунд, при отключении сниппета 1с
Помогите привести сниппет в божеский вид или может есть другой вариант вывода?
Код Сниппета mscat.php
Необходимо вывести список товаров с категориями (основной и дополнительными)
Всего примерно 50 категорий. У товара назначены от 1 до 3 категорий
Вывод 18 карточек товаров на странице с выводом категорий занимает 12секунд, при отключении сниппета 1с
Помогите привести сниппет в божеский вид или может есть другой вариант вывода?
Код Сниппета mscat.php
<?php
if (empty($limit)) {$limit = 10;}
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);
$count = 1;
$result = array();
if ($q->prepare() && $q->stmt->execute()) {
while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
if ($count <= $limit){
$url = $modx->makeUrl($row['id'], '', '', $scheme);
$result[] = '<a href="'.$url.'">'.$row['pagetitle'].'</a>';
$count++;
}
}
}
return implode($delimeter, $result);В чанке карточки товара вызываю сниппет:{$_modx->runSnippet("@FILE snippets/mscat.php", [
'rid' => $id,
'pid' => $parent,
'delimeter' => ' / '
])} Комментарии: 6
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
заменить на:
Во-вторых, у таблицы msCategoryMember нет индекса для связи с таблицей категории (ресурсов). Попробуйте добавить.