Andrey Extra
С нами с 07 февраля 2014; Место в рейтинге пользователей: #599Оптимизации и тонкости работы с БД для больших магазинов на MODX Revolution
Небольшое вступление
Данная статья не претендует на универсальное решение. Всегда пользуйтесь собственной головой. Всё описанное ниже актуально для MODX Revolution 2.8.3-pl, miniShop2 2.9.1-pl.
Данная статья не претендует на универсальное решение. Всегда пользуйтесь собственной головой. Всё описанное ниже актуально для MODX Revolution 2.8.3-pl, miniShop2 2.9.1-pl.
Теория выгрузок из 1С в MODX (часть 1 из 2)
И снова привет!
Выгрузка товаров на сайт — это самый, самый частый кейс моей мини-студии. Для реализации мелких-средних интернет-магазинов используем классическую и сверхпопулярную связку MODX+miniShop2, для крупых — нет, но я как-нибудь обязательно расскажу почему.
Выгрузка товаров на сайт — это самый, самый частый кейс моей мини-студии. Для реализации мелких-средних интернет-магазинов используем классическую и сверхпопулярную связку MODX+miniShop2, для крупых — нет, но я как-нибудь обязательно расскажу почему.
Подзапросы для pdoTools
Добрый день всем! Мне понадобилось сделать сложные запросы в mysql и, так как уже привык к pdoTools, решил доработать его, чтоб с ним делать подзапросы. Извиняюсь, загружен работой и не хватило времени оттестировать все и расписать.
Вкратце под катом.
Вкратце под катом.
Выдаем вместо кэша html файлик
Предыстория. Возник такой вопрос. Есть какой то сайт, и в нем получается в каталоге было так. В вызов mFilter2 вложено в чанк еще парочка вызовов msProducts ну и так далее. В итоге, раздел грузился за овер 10 секунд. Да, сейчас напишите, что вот надо оптимизировать. Это понятно, но я решил подойти с другой стороны.
Итак, идея была такая, что бы вместо кэша выдавать уже готовую разметку целой страницы.
В итоге, у нас есть плагин:
Вопрос знатокам, на сколько такой подход вообще жизнеспособный по отношению к системе? Очень бы хотелось услышать комментарии.
Спасибо за донаты:
@Павел Бигель
Итак, идея была такая, что бы вместо кэша выдавать уже готовую разметку целой страницы.
В итоге, у нас есть плагин:
<?php
switch($modx->event->name){
case 'OnWebPagePrerender':
// Тут просто условие, чтобы срабатывал только на категории (можно по сути задавать разные условия)
if($modx->resource->class_key != 'msCategory'){
return;
}
//Забираю отрендеренный ресурс
$_output = &$modx->resource->_output; //Забираю отрендеренный ресурс
// Создаю файлик разметки этого ресурса (можно по сути указать любой путь и так далее, сейчас и так сойдет)
$file = MODX_BASE_PATH . 'resourcecache/' . $modx->resource->uri . '/' . $modx->resource->id . '.txt';
if(is_file($file)){
// Если такой файлик уже существует, то просто отдаю его содержимое
$output = file_get_contents($file);
}else{
// Если файлика нету, то записываю туда отрендеренную страницу
$cache = $modx->getCacheManager();
$cache->writeFile($file, $_output);
$output = $_output;
}
// Подменяю вывод на готовый
$modx->resource->_output = $output;
break;
case 'OnLoadWebPageCache':
// Это событие срабатывает до рендера страницы, оно проверяет, есть ли кэш страницы, и если он есть...
$file = MODX_BASE_PATH . 'resourcecache/' . $modx->event->params['resource']->uri . '/' . $modx->event->params['resource']->id . '.txt';
//...мы проверяем файлик, так как страница уже грузилась и файлик есть и подменяем кэш на содержимое неашего файлика.
if(is_file){
$modx->event->params['resource']->_content = file_get_contents($file);
}
break;
}
Итог, раздел грузился за 10 секунд (ну да, такой раздел, идея в другом), после плагина уже за 0.006 секунды, так как выдается готовая разметка.Вопрос знатокам, на сколько такой подход вообще жизнеспособный по отношению к системе? Очень бы хотелось услышать комментарии.
Спасибо за донаты:
@Павел Бигель
siteDev - установка компонента
Обновил компонент для разработки сайтов/компонентов. Добавил немного полезных плюше.
Так как разработку своих компонентов я всегда начинаю именно с siteDev
Например, во время установки можно переименовать modExtra, который перед переименованием копируется в папку:
Так как разработку своих компонентов я всегда начинаю именно с siteDev
modExtra
Например, во время установки можно переименовать modExtra, который перед переименованием копируется в папку:
SEOtabs — работаем со вкладками
Мы — DSMC Agency. Занимаемся поисковой оптимизацией, разработкой сайтов, а теперь и разработкой приложений для сайтов на CMS MODX. Представляем наш первый самостоятельный компонент SEOtabs для работы со вкладками товара.
Официальный сайт пакета. Есть демо — можно URL посмотреть и пощелкать seotabs.ru
Что делает компонент?
Компонент позволяет создавать, редактировать, удалять табы товаров, а также формировать из них виртуальные страницы с уникальными переменными URL, Title, Description. Пакет призван упростить администрирование этого блока, помочь в продвижении интернет-магазинов и каталогов.
Если смотреть на компонент глобально, то он в несколько раз ускоряет процессы поискового маркетинга. От кластеризации семантики до внедрения решений по ее обработке всего один шаг. И этот шаг — SEOtabs.
Официальный сайт пакета. Есть демо — можно URL посмотреть и пощелкать seotabs.ru
Что делает компонент?
Компонент позволяет создавать, редактировать, удалять табы товаров, а также формировать из них виртуальные страницы с уникальными переменными URL, Title, Description. Пакет призван упростить администрирование этого блока, помочь в продвижении интернет-магазинов и каталогов.
Если смотреть на компонент глобально, то он в несколько раз ускоряет процессы поискового маркетинга. От кластеризации семантики до внедрения решений по ее обработке всего один шаг. И этот шаг — SEOtabs.
Шпаргалка на все случаи жизни
Полезные ссылки, которые Вам пригодятся в некоторых ситуациях.
[multiSite] - Мультисайт на MODX
Привет! Компонент реализует собственно мультисайт на modx. Что он делает по факту? В зависимости от города он ищет во всей странице ключи в соответствии вашего паттерна и заменяет их на содержимое конкретно этого города.
Поле стоимость доставки значение "Бесплатно" и "Индвидуальный рассчет"
Появилась еще одна задача с которой я хочу с Вами поделиться.
Две задачи:
1. Не нравиться значение доставки 0 руб хочется заменить на Бесплатно
2. Через настойки MS2 адмистратору сайта устанавливать значение стоимости доставки «Индивидуальный рассчет.
Для того что бы это реализовать нам нужно выполнить все действия расписанные в статье Стоимость доставки отдельной строкой в оформление заказа MS2
Две задачи:
1. Не нравиться значение доставки 0 руб хочется заменить на Бесплатно
2. Через настойки MS2 адмистратору сайта устанавливать значение стоимости доставки «Индивидуальный рассчет.
Для того что бы это реализовать нам нужно выполнить все действия расписанные в статье Стоимость доставки отдельной строкой в оформление заказа MS2
Выведение опций товара по категориям
Сниппет msProductOptions выводит товары общим массивом. В принципе, никто не запрещает в чанке вывода делать с этим массивом всё что угодно, в том числе и делить по категориям. Однако всё чаще поступает запрос от клиента не только вывести категории, но и соблюсти их сортировку.
Для этих целей мне пришлось msProductOptions переписать. Мой вариант сниппета воспроизводит запрос msProductData::loadOptions с сортировкой по полю rank категории, затем группирует все опции по категориям с соблюдением сортировки самих опций.
Для этих целей мне пришлось msProductOptions переписать. Мой вариант сниппета воспроизводит запрос msProductData::loadOptions с сортировкой по полю rank категории, затем группирует все опции по категориям с соблюдением сортировки самих опций.