Andrey Extra

Andrey Extra

С нами с 07 февраля 2014; Место в рейтинге пользователей: #599

Оптимизации и тонкости работы с БД для больших магазинов на MODX Revolution

Небольшое вступление

Данная статья не претендует на универсальное решение. Всегда пользуйтесь собственной головой. Всё описанное ниже актуально для MODX Revolution 2.8.3-pl, miniShop2 2.9.1-pl.

wfoojjaec
16 сентября 2021, 19:09
modx.pro
31
2 889
+26

Теория выгрузок из 1С в MODX (часть 1 из 2)

И снова привет!
Выгрузка товаров на сайт — это самый, самый частый кейс моей мини-студии. Для реализации мелких-средних интернет-магазинов используем классическую и сверхпопулярную связку MODX+miniShop2, для крупых — нет, но я как-нибудь обязательно расскажу почему.
Павел Бигель
06 апреля 2020, 19:10
modx.pro
13
6 001
+17

Подзапросы для pdoTools

Добрый день всем! Мне понадобилось сделать сложные запросы в mysql и, так как уже привык к pdoTools, решил доработать его, чтоб с ним делать подзапросы. Извиняюсь, загружен работой и не хватило времени оттестировать все и расписать.
Вкратце под катом.
Александр Туниеков
03 марта 2020, 20:02
modx.pro
2
1 897
-1

Выдаем вместо кэша 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 секунды, так как выдается готовая разметка.
Вопрос знатокам, на сколько такой подход вообще жизнеспособный по отношению к системе? Очень бы хотелось услышать комментарии.

Спасибо за донаты:
@Павел Бигель
Михаил
20 февраля 2020, 10:55
modx.pro
11
1 411
+16

siteDev - установка компонента

Обновил компонент для разработки сайтов/компонентов. Добавил немного полезных плюше.
Так как разработку своих компонентов я всегда начинаю именно с siteDev

modExtra


Например, во время установки можно переименовать modExtra, который перед переименованием копируется в папку:

Андрей Степаненко
18 февраля 2020, 18:11
modx.pro
2
1 777
+12

SEOtabs — работаем со вкладками

Мы — DSMC Agency. Занимаемся поисковой оптимизацией, разработкой сайтов, а теперь и разработкой приложений для сайтов на CMS MODX. Представляем наш первый самостоятельный компонент SEOtabs для работы со вкладками товара.

Официальный сайт пакета. Есть демо — можно URL посмотреть и пощелкать seotabs.ru

Что делает компонент?

Компонент позволяет создавать, редактировать, удалять табы товаров, а также формировать из них виртуальные страницы с уникальными переменными URL, Title, Description. Пакет призван упростить администрирование этого блока, помочь в продвижении интернет-магазинов и каталогов.

Если смотреть на компонент глобально, то он в несколько раз ускоряет процессы поискового маркетинга. От кластеризации семантики до внедрения решений по ее обработке всего один шаг. И этот шаг — SEOtabs.

Олег Щавелев
17 февраля 2020, 11:17
modx.pro
5
2 810
+15

Шпаргалка на все случаи жизни

Полезные ссылки, которые Вам пригодятся в некоторых ситуациях.
Михаил
07 февраля 2020, 21:42
modx.pro
71
2 303
+35

[multiSite] - Мультисайт на MODX

Привет! Компонент реализует собственно мультисайт на modx. Что он делает по факту? В зависимости от города он ищет во всей странице ключи в соответствии вашего паттерна и заменяет их на содержимое конкретно этого города.


Pavel Zarubin
10 декабря 2019, 03:17
modx.pro
12
1 847
+23

Поле стоимость доставки значение "Бесплатно" и "Индвидуальный рассчет"

Появилась еще одна задача с которой я хочу с Вами поделиться.

Две задачи:

1. Не нравиться значение доставки 0 руб хочется заменить на Бесплатно
2. Через настойки MS2 адмистратору сайта устанавливать значение стоимости доставки «Индивидуальный рассчет.

Для того что бы это реализовать нам нужно выполнить все действия расписанные в статье Стоимость доставки отдельной строкой в оформление заказа MS2

Олег Щавелев
08 декабря 2019, 23:51
modx.pro
5
1 200
+10

Выведение опций товара по категориям

Сниппет msProductOptions выводит товары общим массивом. В принципе, никто не запрещает в чанке вывода делать с этим массивом всё что угодно, в том числе и делить по категориям. Однако всё чаще поступает запрос от клиента не только вывести категории, но и соблюсти их сортировку.

Для этих целей мне пришлось msProductOptions переписать. Мой вариант сниппета воспроизводит запрос msProductData::loadOptions с сортировкой по полю rank категории, затем группирует все опции по категориям с соблюдением сортировки самих опций.
mngatoff
24 ноября 2019, 06:44
modx.pro
8
2 635
+6