записываться в сессию (или запишется 1 какой-нибудь и всё) ?
https://modstore.pro/packages/ecommerce/looked
ну, тебе надо функцию "Вы смотрели такие то товары"?
я обычно looked ставлю, проблем не замечал за ним
Такая функция уже есть. Только данные о просмотренных товарах могут не записываться в сессию (или запишется 1 какой-нибудь и всё)
ну, у тебя как я понял "getviewed", он видимо тупит с записью, так?
ну, а я предлагаю компонент выполняющий твою задачу, который таких проблем не имеет
следовательно, попробуй заменить, или "getviewed" магию особенную имеет?
да вроде магии нет, но хочется понимать, почему не рабоатет)
не ищешь лёгких путей?) показывай его код тогда, будем посмотреть
<?php $id = $modx->resource->id; $tpls = explode(',', $modx->getOption('ms2_template_product_default')); if (!isset($limit)) {$limit = 10;} if (!isset($tpl)) {$tpl = 'tpl.msProducts.row';} // Вносим ID просмотренных товаров if (in_array($modx->resource->template, $tpls)) { if (!isset($_SESSION['viewed'])) { $_SESSION['viewed'] = array($id); } else { if (in_array($id, $_SESSION['viewed'])) { $key = array_search($id, $_SESSION['viewed']); unset($_SESSION['viewed'][$key]); } if (count($_SESSION['viewed']) > $limit) { array_shift($_SESSION['viewed']); } $_SESSION['viewed'][] = $id; } } // Если указано действие returnViewed - выводим просмотренные товары if ($action == 'returnViewed') { $ids = array_reverse($_SESSION['viewed']); if (empty($ids)) {return;} $config = array( 'resources' => '-'.$modx->resource->id.','.implode(',', $ids) ,'parents' => -1 ,'tpl' => $tpl ,'limit' => $limit ,'includeContent' => 1 ); $config = array_merge($config, $scriptProperties); return $modx->runSnippet('msProducts', $config); }
не знал, надо запомнить)
{$limit = 10}; может так?
{$tpl = 'tpl.msProducts.row'}; и тут
ну а как тогда лимит задавать при вызове getViewed ?
в смысле) у тебя ; не там просто
'parents' => -1 я бы так не писал, а написал бы 'parents' => 0
а) ща я в IDE закину тож
а, ну да, в принципе всё верно
хрень-какая то я хожу по товрам а в сессии пусто viewed
ms2_template_product_default шаблон в настрйоках правильно выставлен
может быть трабл если я его везде через ajaxSnippet вызываю?
Ты же по сути в своём коде запускаешь msProducts, вот и перепиши его под запуск ajaxSnippet с использованием msProducts
// Если указано действие returnViewed - выводим просмотренные товары if ($action == 'returnViewed') { $ids = array_reverse($_SESSION['viewed']); if (empty($ids)) {return;} $config = array( 'snippet' => 'msProducts' ,'resources' => '-'.$modx->resource->id.','.implode(',', $ids) ,'parents' => -1 ,'tpl' => $tpl ,'limit' => $limit ,'includeContent' => 1 ); $config = array_merge($config, $scriptProperties); return $modx->runSnippet('ajaxSnippet', $config); }
короче это ajaxSnippet тупит походу и не пишет в сессии
поэтому иди лучше помучай looked)
я вернул как было изначально [[!getViewed:toPlaceholder=`viewOuter`? &action=`returnViewed` &tpl=`tpl.msProducts.row.custom` &includeThumbs=`medium` &limit=`12` &sortby=`RAND()` &templates=`6` ]] [[!+viewOuter:notempty=` <div class="push40"></div> <h2>Вы недавно просматривали</h2> <div class="catalog"> [[!+viewOuter]] </div> <div class="push20"></div> `]]
так работает
ты какой то велосипед делаешь) есть же готовый компонент под такую задачу)
да я понял, это не я делал)
исправь) я вот например, вообще не понял смысле впиливания AjaxSnippet
это уже я впилил
да в приципе оно рабоатет, зачем ставить ещё один компонент
зато выяснил, что сессии через ajaxSnippet тупят
вообще странно что не в куки пишет id просмотренных товаров а в сессию, нафига в сессиию... я бы в куки сделал
да я понял уже, спасибо))))
я смотрю он тоже в сессию пишет
++
хм, я думал в куки 🤷♂️ не задавался этим вопросом
не факт что если его вызвать через ajaxSnippet то не будет таких же проблем
Параметры: &limit — Ограничение записи в *сессию*, по умолчанию 5
тебе вообще зачем в этот AjaxSnippet всё пихать то?)
а что не лишнее вызывать через AjaxSnippet?
зачем? AjaxSnippet по большей части делает вызов не кешируемым разве что вроде как
в доке написано, Сниппет можно вызывать кэшированным.
Обсуждают сегодня