Вывод карточек товара магазина в статьях на сайте
Несколько недель назад от заказчика поступила такая хотелка — надо чтоб в статьи блога на сайте магазина можно было бы вставлять карточки товаров этого самого магазина. Обдумывал разные варианты, но в итоге, совместно с чатиком в телеграме пришел к такому решению:
- В статье в нужном месте менеджер делает конструкцию такого вида: %%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 попробовать даже добавить.
Хотя можно эту конструкцию в шаблоны TinyMCE попробовать даже добавить.
{include 'products' id='34,35,36'}
В чанке products соответственно вызов msProducts с нужными resources.
Я рассматривал такой вариант. Для юзера он не сильно проще, а в реализации дольше.
Чем же дольше? В плагин добавить разметку, так себе решение.
Ну если делать это на чистом сайте с самого начала, то норм, у меня же феном глобально не включен и надо весь сайт перелопачивать, чтоб не было ошибок парсинга.
Плюс когда девочка менеджер видит непонятный ей код, она волнуется и может накосячить, а просто перечислить через запятую айди товаров это понятнее.
Плюс когда девочка менеджер видит непонятный ей код, она волнуется и может накосячить, а просто перечислить через запятую айди товаров это понятнее.
Дело хозяйское. Мы менеджеров не допускаем, если нет базовых знаний html/css и синтаксиса шаблонизатора. Не так сложно это выучить. Иначе нечего им делать в админке.
Не согласен. На мой взгляд контент менеджер не обязан знать html,css. Его задача грамотно наполнить необходимые позиции, все остальное должны предусмотреть мы с вами. Во первых это наиболее верный и «красивый» подход. Во вторых, если вдруг будет текучка менеджеров, то не нужно будет тратить время, на объяснения подобных «хаков». Для себя — пожалуйста. Использовать на работе, такая себе идея. Но да ладно, возможно тут
Дело хозяйское
Обязан. Отдельных полей не напасешься и всего не предусмотришь. А еще они должны понимать, что творится в wysiwyg редакторе, если им пользуются.
Понимание wysiwyg это очевидно, но блин понимание знать html, css и базовое знания шаблонизаторов. Может это тогда не контент менеджер а начинающий фронтендер. Всегда думал, что контент менеджер это прежде всего маркетолог.
Отдельных полей не напасешьсяА в чем сложность отдельных полей? Один раз сделал как надо и забыл. Я очень сомневаюсь, что вам надо на одном и том-же сайте в админке создавать дополнительные поля (это прям совсем абсурдный пример). Как правило вовремя тестового запуска такие проблемы выявляться и решаются.
Один раз сделал как надо и забыл.В суровой реальности так не работает.
Srs, Интересно если ваш контент менеджер все заголовки сделает h1… это будет хорошо для страницы? Полностью согласен с Alexander V без знания html/css это не контент менеджер ни разу на мой взгляд.
Если требуется сделать все заголовки h1, то хорошо, если нет, то нет… Проблем не вижу. Мы с вами по разному понимаем обязанности контент менеджера. Я считаю что html/css и тем более знание шаблонизаторов, точно не является приоритетным и важным знанием. А отличить заголовок h1 от h2-h3 можно визуально. Просто говоришь, что самый большой заголовок должен быть только 1-2-3-n раз и все.
Контент менеджер должен хорошо писать тексты и наполнять карточки товара. Я намеренно не стал продолжать диалог, так как реплика «В суровой реальности так не работает.», является частично ложной. У кого-то в реальности так не работает, а у меня именно так и работает (работало… я сейчас занимаюсь немного другим).
Контент менеджер должен хорошо писать тексты и наполнять карточки товара. Я намеренно не стал продолжать диалог, так как реплика «В суровой реальности так не работает.», является частично ложной. У кого-то в реальности так не работает, а у меня именно так и работает (работало… я сейчас занимаюсь немного другим).
Можно проверять html и устранять нежелательные тэги и атрибуты.
Например через модификацию HTML на лету или использовать что то вроде jevix
Например через модификацию HTML на лету или использовать что то вроде jevix
Подскажите пожалуйста, вродибы все сделал как написано, но не выводится изображение товара, как правильно сделать вызов?
у меня сейчас так
у меня сейчас так
{if $mediumprod?}
<img src="{$mediumprod}" alt="">
{/if}
prnt.sc/w2rlqy
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.