Денис Чубенко
С нами с 02 марта 2017; Место в рейтинге пользователей: #616Изменение цены в корзине при переоценке
Привет.
Иногда возникает такая ситуация, когда пишите интернет-магазин на MODX и miniShop2 и при этом вы импортируете товары или переоцениваете их с какого-нибудь внешнего сервиса (Например 1С). Проблема которая возникает абсолютно всегда в таких случаях, что цены на товары меняются достаточно часто. В miniShop2 нет (пока нет) события, который бы позволял хендлить события перехода в коризну. Однако, мы можем сделать это на уровне MODX, его событий и API
Создаем плагин cartCheck и вешаем его на событие OnWebPagePrerender. Это событие уже спарсило ресус и его данные, но еще не вывело на страницу — все что нам нужно. В коде, делаем проверку на шаблон страницы. Обычно, корзина имеет свой выделенный шаблон. Далее нам предстоит инициализировать минишоп, получить корзину, модифицировать ее как угодно и назначить обратно. Так же мы сделаем проверку на то, опубликован или удален ресурс и не дадим его купить. На этом, собственно все. Ниже привожу код плагина
Иногда возникает такая ситуация, когда пишите интернет-магазин на MODX и miniShop2 и при этом вы импортируете товары или переоцениваете их с какого-нибудь внешнего сервиса (Например 1С). Проблема которая возникает абсолютно всегда в таких случаях, что цены на товары меняются достаточно часто. В miniShop2 нет (пока нет) события, который бы позволял хендлить события перехода в коризну. Однако, мы можем сделать это на уровне MODX, его событий и API
Создаем плагин cartCheck и вешаем его на событие OnWebPagePrerender. Это событие уже спарсило ресус и его данные, но еще не вывело на страницу — все что нам нужно. В коде, делаем проверку на шаблон страницы. Обычно, корзина имеет свой выделенный шаблон. Далее нам предстоит инициализировать минишоп, получить корзину, модифицировать ее как угодно и назначить обратно. Так же мы сделаем проверку на то, опубликован или удален ресурс и не дадим его купить. На этом, собственно все. Ниже привожу код плагина
<?php
if ($modx->event->name = 'OnWebPagePrerender'){
if ($modx->resource->id == 5) {
/** @var miniShop2 $miniShop2 */
$miniShop2 = $modx->getService('minishop2');
$miniShop2->initialize();
$cart = $miniShop2->cart->get();
foreach ($cart as $key => &$element) {
/** @var msProduct $product */
if ($product = $modx->getObject('msProduct', $element['id'])) {
$element['price'] = $product->get('price');
if (!$product->get('published') || $product->get('deleted')){
unset($cart[$key]);
}
}
}
$miniShop2->cart->set($cart);
}
}
Скрипт подмены конфигов сайта на лету
Надоело каждый раз при переносе сайтов между серверами прописывать конфиги в нескольких местах. Каждый раз напрягаешься, чтобы не перепутать. Написал скрипт, который делает это автоматически в зависимости от $_SERVER['HTTP_HOST'] сервера на котором он запускается.
Сборка элементов сайта в компонент (пакет), пошаговая инструкция
Привет, давно не виделись :)
Я в прошлой заметке, когда писал об уходе, обещал опубликовать свои черновики, так что выполняю обещание и сегодня рассмотрим пример с разработкой отдельных страниц сайта и сборкой их в компонент (или транспортный пакет), которые можно затем установить через обычный пакетный менеджер. Я буду все показывать на реальном случае, который я недавно закончил.
Итак, сначала описание задачи, которая стояла. Был сайт, на котором нужно было реализовать обновленный раздел с готовыми решениями. Был представлен новый дизайн с версткой, были описаны требования к некоторым аспектам работы этих новых страниц. В частности, автоматический расчет цены товаров с конвертация валют, автоматический расчет цены монтажа в зависимости от количества оборудования и прочее. Но не суть, задача была безболезненно все делать локально, пока основной сайт работает и выкладывать решение или по частям или сразу, в виде готового пакета.
Какие-то отдельные подзадачи я все же сделал руками, так как это было просто быстрее и проще. Например, нужно было в некоторых шаблонах (уже существующего сайта) добавить вызов нового снипета или настроить формы редактирования ресурса под клиента. Эти манипуляции были сделаны прямо на боевом сайте. Повторюсь, потому что так быстрее и проще и не влияет на остальной процесс. По методологии LEAN.
Вводная закончилась. Продолжаем внутри заметки.
Я в прошлой заметке, когда писал об уходе, обещал опубликовать свои черновики, так что выполняю обещание и сегодня рассмотрим пример с разработкой отдельных страниц сайта и сборкой их в компонент (или транспортный пакет), которые можно затем установить через обычный пакетный менеджер. Я буду все показывать на реальном случае, который я недавно закончил.
Итак, сначала описание задачи, которая стояла. Был сайт, на котором нужно было реализовать обновленный раздел с готовыми решениями. Был представлен новый дизайн с версткой, были описаны требования к некоторым аспектам работы этих новых страниц. В частности, автоматический расчет цены товаров с конвертация валют, автоматический расчет цены монтажа в зависимости от количества оборудования и прочее. Но не суть, задача была безболезненно все делать локально, пока основной сайт работает и выкладывать решение или по частям или сразу, в виде готового пакета.
Какие-то отдельные подзадачи я все же сделал руками, так как это было просто быстрее и проще. Например, нужно было в некоторых шаблонах (уже существующего сайта) добавить вызов нового снипета или настроить формы редактирования ресурса под клиента. Эти манипуляции были сделаны прямо на боевом сайте. Повторюсь, потому что так быстрее и проще и не влияет на остальной процесс. По методологии LEAN.
Вводная закончилась. Продолжаем внутри заметки.
Curl клиент modx
Встроенный curl клиент для отправки запросов на сторонние сервисы (RESTful и другие).
Так как все чаще используются сторонние сервисы в повседневной разработке сайтов, для этих целей в modx есть встроенный клиент, с помощью которого можно отправлять запросы:
Так как все чаще используются сторонние сервисы в повседневной разработке сайтов, для этих целей в modx есть встроенный клиент, с помощью которого можно отправлять запросы:
/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$response = $client->get('GET запрос');
или
$response = $client->post('POST запрос');
// Обработка полученных данных в json или xml формате и преобразование их в массив
$array = $response->process();
В заметке перечислены способы работы с клиентомНесколько Pdopage на странице
Добрый день, возникла проблема с удваиванием кнопки подгрузки на странице. Собственно выглядит вот так prnt.sc/nrz6m2, причем для обоих галерей.
Вызов сниппетов выглядит так:
Вызов сниппетов выглядит так:
<div id="pdopage">
[[!+page.nav]]
<div class="rows">
[[!pdoPage?
&element=`getImageList`
&tvname=`resourcealbum`
&tpl=`effects-img`
&limit=`15`
&ajaxMode=`button`
&wrapperTpl = `effects_wrapper`
&docid=`[[*id]]`
&processTVs=`1`
]]
</div>
</div>
<div id="pdopage">
[[!+nav.pagevar]]
<div class="rows">
[[!pdoPage?
&element=`getImageList`
&tvname=`resourcealbum1`
&tpl=`effects-img`
&limit=`15`
&ajaxMode=`button`
&wrapperTpl = `colors_wrapper`
&docid=`[[*id]]`
&processTVs=`1`
&pageNavVar= `nav.pagevar`
&pageVarKey=`page1`
]]
</div>
</div>
Создание таблиц через MIGX
У новичков часто возникает вопрос, как можно быстро создать какую нибудь таблицу и начать с ней работать на пример из сниппета. Я раньше делал всегда через пакет Василия modExtra, выпиливая из него то, что мне не нужно. Но это долго и не совсем удобно, если нужна одна — две таблички. MIGX решает эту проблему.
Вывод всех опций minishop2 и автоматическое их добавление в словарь одной кнопкой.
Всем привет, как всегда возникла задача максимально упростить и автоматизировать рутинные процессы в MODX. Будем делать автоматическое добавление опций в словарь и автоматически подтягивать список опций, куда вам угодно будет.
Генерация превью в формате webp для miniShop2
С приходом поддержки webp в MODX участились вопросы о возможности генерации превью товаров miniShop2 в этом формате. По началу казалось что все должно работать из коробки, но на практике этого нет.
Причиной оказалось отсутствие расширения webp в источнике файлов MS2 и в двух системных настройках ('upload_files','upload_images').
Причиной оказалось отсутствие расширения webp в источнике файлов MS2 и в двух системных настройках ('upload_files','upload_images').
[mFilter2] Вывод товаров со смежными значениями
Небольшая заготовка из вчерашнего рукоделия.
Имеем сайт с подбором товаров по характеристикам, реализованным на mFilter2.
Один из параметров «Мощность активная» выглядит так (увеличение по клику):
Как видно, есть большое разнообразие товаров с близкими значениями мощностей, но общее количество товаров не столь велико.
Это приводит к тому, что когда посетитель выбирает, к примеру, мощность 10 кВт, то он видит 1 товар в результатах подбора. А специфика продукции такова, что логично предложить пользователю аналогичные изделия как с чуть меньшей мощностью, например 9 кВт, так и с большей, до 12-15 кВт.
Нет, конечно можно сказать, что пусть нащелкает нужные цифры в подборе, но всегда есть «но». На страницу «Товары с мощностью 10 кВт» (где уже стоит галочка в фильтре) пользователь приходит из поисковых систем, фильтра он не видел и не нажимал. Если на странице будет 1 товар, пользователь может быстро уйти, решив, что мы предлагаем крайне скудный ассортимент, так и не увидев, что есть фильтр.
В общем, небольшая зарисовка на тему того, как при выборе в фильтре параметра со значением 10, показать все товары в диапазоне -x%....+y%.
Имеем сайт с подбором товаров по характеристикам, реализованным на mFilter2.
Один из параметров «Мощность активная» выглядит так (увеличение по клику):
Как видно, есть большое разнообразие товаров с близкими значениями мощностей, но общее количество товаров не столь велико.
Это приводит к тому, что когда посетитель выбирает, к примеру, мощность 10 кВт, то он видит 1 товар в результатах подбора. А специфика продукции такова, что логично предложить пользователю аналогичные изделия как с чуть меньшей мощностью, например 9 кВт, так и с большей, до 12-15 кВт.
Нет, конечно можно сказать, что пусть нащелкает нужные цифры в подборе, но всегда есть «но». На страницу «Товары с мощностью 10 кВт» (где уже стоит галочка в фильтре) пользователь приходит из поисковых систем, фильтра он не видел и не нажимал. Если на странице будет 1 товар, пользователь может быстро уйти, решив, что мы предлагаем крайне скудный ассортимент, так и не увидев, что есть фильтр.
В общем, небольшая зарисовка на тему того, как при выборе в фильтре параметра со значением 10, показать все товары в диапазоне -x%....+y%.
[MIGX] - Большой и страшный. UTM метки для MODX.
Привет сообществу!
Вот уж давненько я не писал вам о MIGX, соскучились небось? Можете не отвечать, знаю, что соскучились. Хотя и мои заметки с каждым разом получают всё меньше и меньше плюсов. Скажу вам по секрету: я подозреваю, что некто Василий Н. (Пальцем не буду показывать, но вот его профиль) подкручивает себе плюсы, мои также он присваивает себе и вообще он работает на Госдеп США. Ну или это просто паранойя.
Допустим у вас задача сделать так, чтобы у вас на сайте выводился разный контент в зависимости от GET параметра и вам лень устанавливать целый компонент для этого. Компонент это хорошо, но мы же извращенцы, давайте делать всё на MIGX? Даже MODX не нужен, «Ставьте лайки кто хочет MIGX CMS»
Вот уж давненько я не писал вам о MIGX, соскучились небось? Можете не отвечать, знаю, что соскучились. Хотя и мои заметки с каждым разом получают всё меньше и меньше плюсов. Скажу вам по секрету: я подозреваю, что некто Василий Н. (Пальцем не буду показывать, но вот его профиль) подкручивает себе плюсы, мои также он присваивает себе и вообще он работает на Госдеп США. Ну или это просто паранойя.
Зачем?
Допустим у вас задача сделать так, чтобы у вас на сайте выводился разный контент в зависимости от GET параметра и вам лень устанавливать целый компонент для этого. Компонент это хорошо, но мы же извращенцы, давайте делать всё на MIGX? Даже MODX не нужен, «Ставьте лайки кто хочет MIGX CMS»