Вывод карточек товара магазина в статьях на сайте
Несколько недель назад от заказчика поступила такая хотелка — надо чтоб в статьи блога на сайте магазина можно было бы вставлять карточки товаров этого самого магазина. Обдумывал разные варианты, но в итоге, совместно с чатиком в телеграме пришел к такому решению:
- В статье в нужном месте менеджер делает конструкцию такого вида: %%34,45,54%%, где 34,45 и 54 — айди товаров в магазине, таких вхождений может быть хоть сколько в статье.
- На событие onWebPagePrerender вешается плагин, который с помощью регулярки выбирает все вхождения нашего паттерна, для каждого вхождения вызывает сниппет msProducts и последним шагом заменяет в контенте страницы паттерны соответствующими результатами сниппета.
//проверяем нужное событие
if ($modx->event->name != 'OnWebPagePrerender') return;
//7 - номер шаблона записи блога
if ($modx->resource->template != 7) return;
$input = &$modx->resource->_output;
// ищем вхождения паттерна
preg_match_all('/(?<=%%)[\d*,]*(?=%%)/m',$input,$out, PREG_PATTERN_ORDER);
if (count($out) && count($out[0])) {
$items = [];
foreach($out[0] as $p) {
//тут надо подставить свои чанки
$tmp = [
'src'=>'%%'.$p.'%%',
'replace'=>$modx->runSnippet('msProducts',['parents'=>13,'resources'=>$p,'tpl'=>'tpl.catаlog-item','tplWrapper'=>'@INLINE <div class="catalog-items items" id="mse2_results">[[+output]]</div>'])
];
$items []= $tmp;
}
$output = $input;
foreach($items as $i) {
// подменяем
$output = str_replace($i['src'],$i['replace'],$output);
}
$input = $output;
}Если есть замечания — прошу в комменты. Комментарии: 13
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Хотя можно эту конструкцию в шаблоны TinyMCE попробовать даже добавить.
В чанке products соответственно вызов msProducts с нужными resources.
Плюс когда девочка менеджер видит непонятный ей код, она волнуется и может накосячить, а просто перечислить через запятую айди товаров это понятнее.
А в чем сложность отдельных полей? Один раз сделал как надо и забыл. Я очень сомневаюсь, что вам надо на одном и том-же сайте в админке создавать дополнительные поля (это прям совсем абсурдный пример). Как правило вовремя тестового запуска такие проблемы выявляться и решаются.
Контент менеджер должен хорошо писать тексты и наполнять карточки товара. Я намеренно не стал продолжать диалог, так как реплика «В суровой реальности так не работает.», является частично ложной. У кого-то в реальности так не работает, а у меня именно так и работает (работало… я сейчас занимаюсь немного другим).
Например через модификацию HTML на лету или использовать что то вроде jevix
у меня сейчас так
prnt.sc/w2rlqy