Sphinx
С нами с 12 января 2015; Место в рейтинге пользователей: #351Как в 14 раз снизить нагрузку на базу данных MySQL
Tickets
Если кратко, то таблица modx_tickets_views — критически увеличивает нагрузку на базу данных MySQL. Уменьшить нагрузку можно отключив (если включен) счетчик просмотра неавторизованными пользователями tickets.count_guests или обнулить (очистить)/удалить таблицу modx_tickets_views из базы данных MySQL.
Если кратко, то таблица modx_tickets_views — критически увеличивает нагрузку на базу данных MySQL. Уменьшить нагрузку можно отключив (если включен) счетчик просмотра неавторизованными пользователями tickets.count_guests или обнулить (очистить)/удалить таблицу modx_tickets_views из базы данных MySQL.
Канал OpenModx
Прокачиваем навык программирования на Fenom
Информация для разработчиков. Сложность средняя.
Практически все разработчики MODX используют тот или иной шаблонизатор. Большинство в рунете сделали свой выбор в пользу Fenom. Благодаря Василию конечно. Этот шаблонизатор достаточно простой и лёгкий. И его функционала хватает для решения практически всех своих задач. В этой статье мы посмотрим на него немного под другим углом и попробуем его возможности расширения.
Практически все разработчики MODX используют тот или иной шаблонизатор. Большинство в рунете сделали свой выбор в пользу Fenom. Благодаря Василию конечно. Этот шаблонизатор достаточно простой и лёгкий. И его функционала хватает для решения практически всех своих задач. В этой статье мы посмотрим на него немного под другим углом и попробуем его возможности расширения.
Использование модификаторов Fenom в PHP
Заметка коротенькая, но может быть полезной.
Все знают, что мы можем добавлять собственные модификаторы Fenom на событие pdoToolsOnFenomInit. А как быть, если мы хотим потом использовать этот же модификатор не в чанках и шаблонах, а в своих PHP скриптах?
А очень просто:
Все знают, что мы можем добавлять собственные модификаторы Fenom на событие pdoToolsOnFenomInit. А как быть, если мы хотим потом использовать этот же модификатор не в чанках и шаблонах, а в своих PHP скриптах?
А очень просто:
$pdoTools = $modx->getService('pdoTools');
$string = 'Some very very long string';
if ($truncate = $pdoTools->getFenom()->getModifier('truncate')) {
$string = $truncate($string, 10);
}
return $string;
Здесь мы получаем модификатор truncate и обрезаем строку до 10 символов, если она больше. mFilter2 и оптимизация скорости на 7k товарах
Всем, кто хоть раз пытался завести mFilter2 на большом кол-ве товаров и хотя-бы 10 опциях в фильтре, известно, что тормозов не избежать. Вот и мне попался на днях сайт, в котором, казалось бы, всего-то 7000 товаров и 10 опций на странице каталога. Однако сниппет фильтра отрабатывал за 3-4 секунды. Переписал на Fenom — стал отрабатывать за 2-3 секунды.
Не годится! Тем более, что у заказчика было требование: «Чтобы сайтом было комфортно пользоваться». Что-ж, взял задачу — надо решать!
Дебаг показал, что проблема в методе mse2FiltersHandler::getMsOptionValues, а именно в запросе (7k товаров!), который выглядит как-то так:
SELECT `product_id`, `key`, `value` FROM `modx_ms2_product_options` AS `msProductOption`
WHERE (`msProductOption`.`product_id` IN (3394,3408,еще 7 тысяч ID)
AND `msProductOption`.`key` IN ('atr_n1','atr_n6','atr_n5','atr_n12','atr_n43','atr_n46','atr_n29','atr_n11','atr_n44','atr_n2'))
msOptionsPrice2 и составной товар
Возникла необходимость при помощи msOptionsPrice2 реализовать составной товар. Оказалось, что компонент не умеет прибавлять к начальной цене товара несколько цен из модификаций одной опции.
Например, есть опция Наполнители, у нее около 20 значений. На фронте, при выборе каждого из значений, цена товара должна увеличиваться на N рублей. Проблема заключается в том, что имена тегам чекбоксов мы даем в виде массива:
<input type="checkbox" name="cb[]">
Компонент, в свою очередь, с таким работать не умеет. Предлагаю решение в четыре простых шага!Мультидоменность контекстами
В сообществе часто проскакивают вопросы про мультидоменность на одной копии MODX. А у меня, как раз, сайты демо версий компонентов реализованы таким образом. Думаю, информация будет полезной!
Анонс SeoFilter - ЧПУ+SEO для mFilter2 и не только
[SeoFilter] — удобное управление ЧПУ ссылками, мета-тегами и генерация текстов.
[Купить компонент в modstore] [Демо-версия]
Добрый день! Представляю компонент, идея которого зародилась довольно таки давно, и уже было подобное решение, с которого я и начинал. Большое спасибо Дмитрию Зарубину — автору того поста, а также Василию, за прекрасные уроки по написанию компонентов.
Основные возможности:
— работа из коробки с mFilter2;
— поддержка любых полей в фильтре: поля ресурса, поля товара, опций miniShop2, TV и любых своих;
— работа без двойной транслитерации (подробнее дальше);
— любой формат ссылок для поля (/color-white, /white-color, /white, /belyi и т.д);
— статистика переходов на страницы как по ссылкам, так и через фильтр;
— интеграция с компонентом frontendManager (добавлен контроллер для редактирования с фронта);
— возможность выбирать и прописывать в шаблоны мин/макс значения по числовым полям;
— prepareSnippet для дополнительной обработки шаблонов, для большей гибкости выборок;
— SEO шаблоны с Fenom и склонения через сервис morpher (Заголовок на скриншоте:)
Подробнее под катом.
[Купить компонент в modstore] [Демо-версия]
Добрый день! Представляю компонент, идея которого зародилась довольно таки давно, и уже было подобное решение, с которого я и начинал. Большое спасибо Дмитрию Зарубину — автору того поста, а также Василию, за прекрасные уроки по написанию компонентов.
Основные возможности:
— работа из коробки с mFilter2;
— поддержка любых полей в фильтре: поля ресурса, поля товара, опций miniShop2, TV и любых своих;
— работа без двойной транслитерации (подробнее дальше);
— любой формат ссылок для поля (/color-white, /white-color, /white, /belyi и т.д);
— статистика переходов на страницы как по ссылкам, так и через фильтр;
— интеграция с компонентом frontendManager (добавлен контроллер для редактирования с фронта);
— возможность выбирать и прописывать в шаблоны мин/макс значения по числовым полям;
— prepareSnippet для дополнительной обработки шаблонов, для большей гибкости выборок;
— SEO шаблоны с Fenom и склонения через сервис morpher (Заголовок на скриншоте:)
{$category_i} {$color_r} цвета у метро {$metro}
Подробнее под катом.
[xLike] Идеальная система лайков с оптимистичным интерфейсом и правильной формулой
Пакет довольно прост и одновременно функционален. Выполняет систему рейтинга для любого объекта, по-умолчанию, для ресурсов. Чем-то напоминает систему лайков на YouTube, в частности, в пакете реализован оптимистичный интерфейс.
Также, особенностью компонента является правильный подсчет рейтинга на основе вычисления нижней границы доверительного интервала Вильсона для параметра Бернулли. По-простому: эта формула не даст встать новым записям с 1 лайком и 0 дизлайками выше более старых записей с сильным рейтингом.
Список преимуществ:
Также, особенностью компонента является правильный подсчет рейтинга на основе вычисления нижней границы доверительного интервала Вильсона для параметра Бернулли. По-простому: эта формула не даст встать новым записям с 1 лайком и 0 дизлайками выше более старых записей с сильным рейтингом.
Список преимуществ:
- Оптимистичный интерфейс,
- Наиболее правильная формула вычисления рейтинга,
- Работа с любыми объектами (modResource, modUser, кастомные объекты),
- Голосование гостями,
- Анимированное изменение полосы/числа рейтинга,
- Событие плагина — xLikeOnVote.
[ExtJS] Расширяем нативную гриду юзеров
После статьи о расширении профиля юзера правильными дополнительными полями мне посыпались вопросы о расширении нативной таблицы со списком юзеров. Мы знаем, что практически любой стандартный компонент системы, работающий на ExtJS, можно расширить не затрагивая исходника. Главное
Сразу опишем задачу, которую реализуем в рамках статьи:
- Убрать слева каждой записи ненужный чекбокс,
- Добавить столбцы: Фото, Дата рождения, Страна, Город,
- Добавить возможность отфильтровать пользователей по стране,
- Заменить некрасивое поле поиска на симпатичное и компактное,
- Подсветить заблокированных красным цветом.