Готовые решения
Просмотры страниц на Tickets в виджете админки
Попросили меня в предыдущей статье привести свой вариант виджета используя просмотры Tickets, но не вписался в комментарий и написал отдельный топик.

Подумал, что лучше всё-таки использовать pdoResources, чтобы выводило не только тикеты, а любую страницу сайта.
Вот моё готовое решение (нужны установленные pdoTools, Tickets):

Подумал, что лучше всё-таки использовать pdoResources, чтобы выводило не только тикеты, а любую страницу сайта.
Вот моё готовое решение (нужны установленные pdoTools, Tickets):
Количество просмотров страниц+виджет - удобное СЕО
Друзья! прежде всего пишу для себя, что бы не потерять.
Итак выглядит это примерно так

Решение же конечно до боли простое, но оно стало для меня таким полезным, т.к строится все на статистике!
Для кого пригодится? Для тех кто отслеживает позиции своего сайта, если мало просмотров соответственно, либо материал не интересен, либо он далеко в поиске и материал нужно менять, либо доработать. Ну и для тех кому впринцыпе интересно где люди чаще бывают, где возможно стоит разместить рекламу.
Итак приступим.
Итак выглядит это примерно так
Решение же конечно до боли простое, но оно стало для меня таким полезным, т.к строится все на статистике!
Для кого пригодится? Для тех кто отслеживает позиции своего сайта, если мало просмотров соответственно, либо материал не интересен, либо он далеко в поиске и материал нужно менять, либо доработать. Ну и для тех кому впринцыпе интересно где люди чаще бывают, где возможно стоит разместить рекламу.
Итак приступим.
Сортировка drag'n'drop в свойствах товаров
Автосоздание ресурсов в контекстах-дублях
Задача:
Один сайт, несколько городов, один и тот же контент у всех, но разные данные (переменные).
Поначалу думал использовать Babel, но с ним не все так просто. Поэтому пришлось писать самому при поддержке неравнодушных Максима Кузнецова и Сергея Шлокова.
Решение:
Один сайт, несколько городов, один и тот же контент у всех, но разные данные (переменные).
Поначалу думал использовать Babel, но с ним не все так просто. Поэтому пришлось писать самому при поддержке неравнодушных Максима Кузнецова и Сергея Шлокова.
Решение:
- Плагин для переключения контекстов (от Василия Наумкина)
- Плагин на события: OnDocFormSave, OnDocFormDelete.
- Снипет для вывода контекстов в качестве меню
- Чанк вывода меню контекстов
- Снипет для подтягивания полей ресурсов-оригиналов (чтоб не дублировать в базу весь контент к примеру)
- Js-скрипт для переключения контекстов
Обновление стоимости доставки в админке
Бывает иногда необходимо изменить способ доставки и стоимость доставки у ранее созданного заказа. И хотелось бы чтобы это выглядело так.

Приступим :)

Приступим :)
Семантически правильныe Breadcrumbs на pdoCrumbs
Верстая очередной проект для замороченных на SEO клиентов, столкнулся с тем, что pdoCrumbs конечно хорош в своей программной логике, но приведенные в документации примеры не совсем верно построены с точки зрения SEO и архитектуры HTML.
Под катом сам код, мои заметки и несколько полезных комментариев.

Под катом сам код, мои заметки и несколько полезных комментариев.

Вывод заказов пользователя и товаров заказа
Нужна была возможность вывода заказов клиента и товаров в этих заказах. Велосипедов много, мой один из них.
1) Снипет для вывода заказов:
2) Снипет вывода товаров заказа:
Писал потому как, во первых учусь писать, во вторых быстрее написать чем искать подходящее решение и допиливать его. Буду рад советам и исправлениям. Пригодились бы советы по поводу:
1) сырого SQL:
1) Снипет для вывода заказов:
<?php
// снипет выводит заказы текущего пользователя
$user_id = $modx->user->get('id');
$tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order');
// подхватываем заказы текущего пользователя
$q = $modx->newQuery('msOrder', array('user_id' => $user_id));
$results = $modx->getCollection('msOrder', $q);
// выводим или чанками или предупреждением что заказов пока нет
foreach ($results as $result) {
if ( $result ) {
$resultArray = $result->toArray();
$output .= $modx->getChunk($tpl,$resultArray);
} else {
$output = 'У вас пока еще нет заказов.';
}
}
return $output;и соответственно чанк tpl.order (на феноме):<div>
<div> Заказ <span>{$_pls['num']}</span> от <span>{$_pls['createdon']}</span> года</div>
<div>
{$_modx->runSnippet('!msOrdersProducts', ['order'=>$_pls['id']])}
</div>
</div>2) Снипет вывода товаров заказа:
<?php
// выводит товары заказа.
$tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order_cell'); // если товар найден
$tpl_empty = $modx->getOption('tpl',$scriptProperties,'tpl.order_cell_empty'); // если товар не найден
// ищем товар по id заказа
$q = $modx->prepare("SELECT * FROM ".$modx->getOption('table_prefix')."ms2_order_products WHERE order_id=".$order);
$q->execute();
$results = $q->fetchAll(PDO::FETCH_ASSOC);
$output;
// перебором либо выводим нужный заказ, либо оповещаем что его уже нет
foreach ($results as $result) {
$res = $modx->getObject('modResource', array('pagetitle'=>$result[name]));
if ($res) {
$resArray = $res->toArray();
$output .= $modx->getChunk($tpl,$resArray);
} else {
$prodName = $modx->setPlaceholder('name', $result[name]);
$output .= $modx->getChunk($tpl_empty);
}
}
return $output;и соответственно чанк tpl.order_cell (на феноме):<div>
<span><a href="{$id | url}">{$pagetitle}</a></span>
<span>{$price} Р</span>
</div>и чанк в том случае если товара уже нет tpl.order_cell_empty:<div>
<span>{$_pls['name']}</span>
<span>не найден</span>
</div>Писал потому как, во первых учусь писать, во вторых быстрее написать чем искать подходящее решение и допиливать его. Буду рад советам и исправлениям. Пригодились бы советы по поводу:
1) сырого SQL:
$q = $modx->prepare("SELECT * FROM ".$modx->getOption('table_prefix')."ms2_order_products WHERE order_id=".$order);
$q->execute();
$results = $q->fetchAll(PDO::FETCH_ASSOC);2) Первоначально хотел все в первом снипете вывести вот тут (далее в коде), но не получилось. Если кто подскажет буду рад.// выводим или чанками или предупреждением что заказов пока нет
foreach ($results as $result) {
// думал тут подхватить товары, но что с ними дальше так и не придумал...
if ( $result ) {
$resultArray = $result->toArray();
$output .= $modx->getChunk($tpl,$resultArray);
} else {
$output = 'У вас пока еще нет заказов.';
}
}Всем успехов. Мониторим свои сайты via modMonitor на node.js
Всем привет!
Для начала предлагаю зайти вот сюда: modmonitor.ru/
Если это не интересно, то можно дальше и не читать. А если интересно и хотите себе такое же, прошу под кат.
Для начала предлагаю зайти вот сюда: modmonitor.ru/
Если это не интересно, то можно дальше и не читать. А если интересно и хотите себе такое же, прошу под кат.
Копия ресурса - небольшой плагин.
Иногда возникает необходимость при копировании ресурса, присвоить дублю какие то свойства оригинала
из таблиц сторонних компонентов. Это достаточно просто сделать плагином на событие OnResourceDuplicate.
Под катом пример плагина для импорта опций пакета msOptionsColor
из таблиц сторонних компонентов. Это достаточно просто сделать плагином на событие OnResourceDuplicate.
Под катом пример плагина для импорта опций пакета msOptionsColor
cacheRegenerator. Авторегенерация кеша страниц
Сегодня публикую маленький, но очень полезный компонент (надеюсь в течение дня будет одобрен в modstore.pro). Сейчас это всего один плагин. Задача его состоит в том, чтобы сразу после сохранения документа выполнять регенерацию этой страницы, чтобы даже при первом заходе посетителя, документ уже был в кеше и отдавался быстрее.