[MinifyX] Версия 1.3.0 - переписано всё

Хочу представить вам свежую бета-версию MinifyX, в которой я хотел добавить ровно одну функцию, а в итоге переписал всё заново.

Короткий список изменений:
  • Добавлен плагин для автосборки подключенных скриптов и стилей страницы, с последующей склейкой, минификацией и заменой оригиналов.
  • Так же плагин умеет обрабатывать изображения, если указана высота\ширина или специальный атрибут.
  • Переписан основной класс
  • Переписан сниппет
  • Другой формат хранения готовых файлов
В общем, принцип работы тот же, а вот исполнение совсем другое.

Автосбор скриптов и стилей

В MODX существует широкая практика использования методов modX::regClientScript, modX::regClientCSS и т.п., которые подключают скрипты и стили на страницу во время работы каких-то сниппетов. Так работают miniShop2, Tickets, mSearch2, AjaxForm и еще много компонентов.

В итоге на странице может быть собрано довольно много дополнительных тегов, которые будут содержать по 50 строк и тормозить загрузку страницы. Автоматически собрать их нельзя, потому что в MODX нет события на обработку этих подключений.
То есть, страница парсится — есть событие, страница готова — тоже есть, а вот между ними, когда теги встраиваются в контент страницы, событий нет.

Выходит, что нужно в настройках сниппетов отключать их скрипты и стили, и бережно добавлять в сниппет MinifyX, чтобы он их склеил и добавил на страницу.

Ну так вот, мне это как то поднадоело, и я решил дополнительно обработать страницу после встраивания тегов. То есть, взять системные массивы с тегами, разобрать, обработать и заменить ими уже имеющийся контент.

Попутно можно собрать не только теги, но и «сырой» контент — это когда код пишется прямо в тегах script или style, а не подключается в файле. В итоге у меня вышло так:
  • Было
  • Стало
Помимо уменьшения файлов для загрузки мы еще и прячем пути к компонентам системы. Конечно, кому нужно — найдёт, но исходный код выглядит гораздо приятнее.

Итак, для включения этой обработки активируйте системный параметр minifyx_process_registered. Это позволит плагину собирать подключенные файлы, но он будет оставлять сырой код «как есть».
Для того, чтобы обрабатывать и его, есть еще 2 параметра: minifyx_processRawJs и minifyx_processRawCss.

Обратите внимание, что обрабатывается не весь код на странице, а только то, что зарегистрировано через методы MODX (отсюда и название настройки). То, что вы указали в шаблоне руками никто не трогает!

Для исключения файлов из обработки используется системная настройка minifyx_exclude_registered. В ней вы можете указать собственное регулярное выражение, которое что-то исключит, а по умолчанию не обрабатываются файлы зарегистрированные сниппетом MinifyX c дефолтными настройками.

Остальные параметры, влияющие на работу со скриптами и стилями совпадают с таковыми у сниппета:
minifyx_cacheFolder — директория для хранения готовых файлов, которые браузер сможет закэшировать.
minifyx_cssFilename — базовое имя стилей, по умолчанию all.
minifyx_jsFilename — базовое имя скриптов, по умолчанию тоже all.
minifyx_minifyCss — включить или нет сжатие стилей. если да, к расширению файла добавится суффикс min.
minifyx_minifyJs — тоже самое для скриптов.

Если у вас что-то глючит — первым делом отключайте сжатие.

Обработка изображений

Как известно, с некоторого времени MinifyX тесно дружит с Munee, а тот умеет работать не только со скриптами\стилями, но и с изображениями.

Вот здесь подробная документация, а я вам расскажу, как этим управлять в MODX.

Первым делом нужно включить системный параметр minifyx_process_images — это запустит обработку картинок, которые соответствуют следующим правилам:
  • Отновительный путь к файлу или абсолютный с текущим именем домена. То есть, включать файлы с чужих доменов нельзя.
  • У тега с картинкой есть атрибут filters=""
  • Или width
  • Или height
  • Или сразу все 3 атрибута
На примере моего сайта:
<img src="/logo.png" alt="" title="" /> - не попадает в обработку
<img src="/logo.png" width="200" /> - попадает, ширина 200, высота автоматическая
<img src="logo.png" height="200" /> - попадает, высота 200, высота автоматическая
<img src="http://bezumkin.ru/logo.png" filters="w[100]h[85]" /> - попадает, ширина 100, высота 85
<img src="http://yandex.ru/logo.png" filters="w[100]h[85]" /> - не попадает в обработку
Для дополнительной гибкости обработки изображений есть еще 2 системных настройки:
minifyx_exclude_images — регулярное выражение для исключения произвольных изображений, даже если они подпадают под правила. По умолчанию исключаются картинки со словом thumb в имени или размером типа 100х100.

minifyx_images_filters — фильтр картинок, по умолчанию. Он будет использовать, если у изображения нет параметра filters="".

MinifyX разбирает тег подходящих изображений, переправляет путь с картинки на коннектор Munee (по умолчанию он лежит в /assets/core/components/minifyx/munee.php) и добавляет к нему указанные параметры.
Атрибут filters="" удаляется из тега — он нужен только для плагина.

Конечно, в исходном коде страницы будут длинные и некрасивые url для картинок, но это небольшая плата за удобство.
<img src="[[++site_url]]assets/images/products/IMG_0050.jpg" height="100"/>
<img src="/assets/images/products/IMG_0050.jpg" height="100" width="100" />
<img src="/assets/images/products/IMG_0050.jpg" height="100" width="100" filters="f[true]fc[444444]" />
<img src="/assets/images/products/IMG_0050.jpg" filters="h[150]w[150]f[true]fc[444444]" />
<img src="/assets/images/products/IMG_00502.jpg" filters="h[100]w[100]" />
<img src="http://yandex.st/morda-logo/i/logo.png" width="100" height="100"/>
Превращается в:
<img src="/assets/components/minifyx/munee.php?files=assets/images/products/IMG_0050.jpg?resize=h[100]s[true]" height="100"/>
<img src="/assets/components/minifyx/munee.php?files=/assets/images/products/IMG_0050.jpg?resize=h[100]w[100]s[true]" height="100" width="100" />
<img src="/assets/components/minifyx/munee.php?files=/assets/images/products/IMG_0050.jpg?resize=h[100]w[100]f[true]fc[444444]" height="100" width="100"  />
<img src="/assets/components/minifyx/munee.php?files=/assets/images/products/IMG_0050.jpg?resize=h[150]w[150]f[true]fc[444444]"  />
<img src="/assets/components/minifyx/munee.php?files=/assets/images/products/IMG_00502.jpg?resize=h[100]w[100]"  />
<img src="http://yandex.st/morda-logo/i/logo.png" width="100" height="100"/>

На картинке видно еще одну особенность обработки: если файла нет, то он будет заменён плейсхолдером с надписью MinifyX. Ну, это чтобы вы знали, что ссылка указана некорректная.

Идея не нова, для Revolution уже было несколько подобных плагинов. Наверное, моя версия особо ничем и не отличается, ну может местами сделано получше, но основной мотив — «Это уже есть в Munee, нужно только задействовать!».

Так и сделал. Понятно, вы можете указывать такие пути к файлам сразу, без дополнительных атрибутов и плагина.

Работа с кэшем

От собственного кэша я таки решил отказаться, ибо Munee и так уже всё кэширует: и скрипты, и стили, и картинки, и даже плейсхолдеры для несуществующих изображения.

Предыдщий формат файлов использовал формат
базовоеимя_времясоздания.суффикс.расширение
И вот с этим временем создания бывали заморочки.

Мне уже предлагали заменить время на хэш, но длинные имена файлов меня не устраивали, пока я не придумал их просто сокращать.

Ну в самом деле, какова вероятность, что у вас на сайте сгенерируются два файлов со скриптами, у которых будут совпадать 10 первых символов хэша по алгоритму sha1?

А значит хранить длиннющие файлы не нужно, и мы получаем вот такие:
<link rel="stylesheet" href="/inc/min/styles_0acb183299.min.css" type="text/css" />
<link rel="stylesheet" href="/inc/min/all_c639fa3b07.min.css" type="text/css" />
<script type="text/javascript" src="/inc/min/all_961b68ee56.js"></script>
Заодно отказался и от удаления старых файлов — были жалобы.

Очистку старых файлов я добавил в тот же плагин, и повешал на событие общего обновления сайта в админке.

Но есть ньюанс: я не знаю, в какую директорию вы можете сохранить файлы сниппетом, поэтому удаляю старые файлы только в директории, указанной в системной настройке minifyx_cacheFolder.

Это значит, что если вы хотите, чтобы всё аккуратно очищалось — сниппет должен хранить файлы там же, где и плагин.

Значит, убираем у всех сниппетов MinifyX указание параметра &cacheFolder, указываем нужную директорию в minifyx_cacheFolder и весь кэш MinifyX удаляется прямо в админке, вместе с остальным кэшем сайта.

Заключение

Ну вот, вроде всё рассказал.

Как видите, изменений очень много, поэтому версия бета. Конечно, я её уже довольно неплохо протестировал, и сейчас мой сайт работает на ней, но всё же.

Еще раз напоминаю, что при любых искажениях скриптов или стилей, первым делам отключайте сжатие. Также можно указывать исходному файлу суффикс .min — тогда Munee его пропустит как есть.

Ах да, еще можно комментировать файлы, приставляя к ним дефис, как у тегов MODX:
[[!MinifyX?
	&cssSources=`
		/assets/components/themebootstrap/css/bootstrap.min.css,
		-/assets/components/themebootstrap/css/add.css
	`
]]
Файл add.css не будет обработан.

Обновляемся, пишем отзывы!
Мне очень интересно ваше мнение после двух дней бесперерывной работы.

Следующая заметка
[Tickets] Версия 1.2.4-rc Множество исправлений
Предыдущая заметка
[miniShop2] Версия 2.1.4-pl3: Обновление чанков


Комментарии ()

  1. Ilya Ev 26 декабря 2013, 22:18 # 0
    Василий, это шикарно))

    Я парился с компиляцией всех файлов а тут бац и все автоматом, особенно радует что уберается сырой код!

    Но заметил что сырой код ofice похоже остался

    <script type="text/javascript">
    	OfficeConfig = {
    		cssUrl: "/assets/components/office/css/"
    		,jsUrl: "/assets/components/office/js/"
    		,actionUrl: "/assets/components/office/action.php"
    		,close_all_message: "закрыть все"
    		,pageId: "1"
    	};
    	</script>
    1. Василий Наумкин 26 декабря 2013, 22:20 # 0
      Для того и бета, чтобы тестировать.

      По идее, код Office тоже должен собираться. Может он у тебя кэшированным вызывается?
      1. Ilya Ev 26 декабря 2013, 22:24 # 0
        Нет офис вызывается не кешируемым но он вложен в чанк, может в этом дело?

        и еще в конце страницы осталось
        <script type="text/javascript">
        	if(typeof jQuery == "undefined") {
        		document.write("<script src=\"/assets/components/minishop2/js/web/lib/jquery.min.js\" type=\"text/javascript\"><\/script>");
        	}
        </script>
        <script type="text/javascript">
        if(typeof jQuery == "undefined") {
        	document.write("<script src=\"/assets/components/office/js/main/lib/jquery.min.js\" type=\"text/javascript\"><\/script>");
        }
        </script>
        1. Василий Наумкин 26 декабря 2013, 22:26 # 0
          У меня всё собирается — вот страница магазина.

          Уверен, чтобы ты включил minifyx_process_registered и minifyx_processRawJs и в логе нет ошибок?
          1. Ilya Ev 26 декабря 2013, 22:33 # 0
            да ошибся, но потому что у вас перепутаны поля))
            в настройках
            minifyx_processRawJs — Обрабатывать сырой CSS
            minifyx_processRawCss — Обрабатывать сырой javascript

            Описание местами перепутано)

            Теперь все работает
            1. Василий Наумкин 26 декабря 2013, 22:36 # 0
              Ура!

              Пакет поправил и перезалил.
              1. Ilya Ev 26 декабря 2013, 22:47 # 0
                Да здорово), все работает отлично, пока багов не вижу. А код стал чище и пути спрятались. Красота!
    2. Виталий Князь 27 декабря 2013, 01:45 # 0
      Не знаю почему, но после обновления на сайте просто пустая белая страница…
      1. Василий Наумкин 27 декабря 2013, 08:02 # 0
        Вот бы узнать, что там произошло…
        1. Виталий Князь 27 декабря 2013, 16:43 # 0
          Удалил полностью пакет, загрузил, установил — проблемы нет. До этого делал обновление.
          1. Василий Наумкин 27 декабря 2013, 16:52 # 0
            Ну и прекрасно! Может, phar файл от старой версии мешался, или еще что.
      2. Мордынский Николай 27 декабря 2013, 03:19 # 0
        Василий, а сторонние скрипты по ссылке умеет подтягивать? таких как кнопка яндекса поделиться
        api.yandex.ru/share/?
        1. Чикин Артур 27 декабря 2013, 07:45 # 0
          Если пользователь уже заходил на сайт на котором была такая же кнопка поделиться от яндекса то он ее уже закэшировал, и тебе ее изменять только себе дороже.
          1. Мордынский Николай 27 декабря 2013, 11:24 # 0
            Проверял)) неработало )) но я склонен винить недостаток своего опыта)) поэтому и спросил… проверял на прошлых версиях.
            1. Василий Наумкин 27 декабря 2013, 11:36 # 0
              Нет, сторонние скрипты подтягиваться не будут.
              1. Чикин Артур 27 декабря 2013, 13:18 # 0
                Я к тому что Например многие используют google jquery и говорят что если он есть на одном сайте то если он используется на другом то браузер его не будет загружать так как ссылка
                https://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js
                уже улетела в кэш с другого сайта. Точно так же и с скриптом от yandex share.
                1. Alex Vakhitov 27 декабря 2013, 16:25 # 0
                  Прирост скорости нетолько в этом, браузеры имеют ограничение на количество соединений с одним доменом, поэтому перевод скриптов на другие домены или субдомены дает возможность их парралельной загрузке.

                  Это работает со всем содержимым страницы, поэтому хорошо выводить скрипты и картинки на соответствующие субдомены
            2. Виталий Киреев 27 декабря 2013, 06:48 # 0
              Есть пара вопросов:
              1) Как с относительными ссылками в css? Например был файл css/style.css с ссылкой в бекграунде на ../img/pict.jpg, как в итоге будет в /inc/min/styles_0acb183299.min.css?
              2) А что, если jQuery подключается перед закрывающим тегом body? Не получится так, что минифицированные скрипты с использованием jQuery подключатся раньше, чем сам jQuery и все поломается?
              1. Василий Наумкин 27 декабря 2013, 08:02 # 0
                А ты проверь и нам расскажи.
              2. Чикин Артур 27 декабря 2013, 07:49 # 0
                Не хватает возможности разбить на выбор, например сделать 2 параметра типа topjs первый заносить ссылки на скрипты которые должны грузиться в шапке, а 2 bootjs тут ссылки которые нужно грузить в подвале, и для них соответственно 2 дополнительных плейсхолдера.
                1. Василий Наумкин 27 декабря 2013, 08:01 # 0
                  То что ты подключаешь в шапку — будет в шапке. То что в body — будет в body.

                  Никаких плейсхолдеров нет, о чем ты? Смотри документацию.
                  1. Чикин Артур 27 декабря 2013, 08:08 # 0
                    Я имел в виду jsSources и jsPlaceholder тут тогда получится сжать свои скрипты и вывести их либо в хедере либо в футере. Было бы неплохо иметь возможность сделать что то вроде jsSourcesHead и jsSourcesBoot и соответственно jsPlaceholderHead и jsPlaceholderBoot что бы сжимать скрипты и в шапке и в подвале.
                    1. Василий Наумкин 27 декабря 2013, 08:16 # 0
                      Читай внимательно описание, про плейсхолдеры речи вообще нет. Речь о скриптах и стилях, зарегистрированных через методы MODX.

                      Плейсхолдеры не нужно использовать, это наследие от самой первой, еще не моей версии. Я бы и рад их отключить, но тогда обновление народу сайты поломает.

                      Похоже, ты не заметил, что у сниппета есть параметры &registerJs и &registerCss, где указывается, как их подключать на страницу.
                2. Антон Мамрашев 27 декабря 2013, 14:55 # 0
                  Спасибо за такую большую работу ) я как понимаю обработка изображений MinifyX не заменяет, а только дополняет использование phpThumbOn и аналогов?
                  1. Василий Наумкин 27 декабря 2013, 16:56 # 0
                    Да, конечно.

                    Включается по желанию и обрабатывает только файлы, подпадающие под правила.
                  2. Cyrax_02 27 декабря 2013, 17:04 # 0
                    Заодно отказался и от удаления старых файлов — были жалобы.
                    Очистку старых файлов я добавил в тот же плагин, и повешал на событие общего обновления сайта в админке.

                    «Железно» отказываться не нужно. Иначе при регулярной корректировке скриптов/стилей (без очистки кэша modx) в папке cacheFolder будет набираться куча лишних файлов.
                    В данном случае полезно было бы добавить сниппету MinifyX параметр, отвечающий за принудительное удаление старых минимизированных файлов (при создании новых). А удаление старых файлов (плагином) при очистке кэша modx пусть остаётся как есть.
                    1. Cyrax_02 27 декабря 2013, 17:07 # 0
                      Плейсхолдеры не нужно использовать, это наследие от самой первой, еще не моей версии. Я бы и рад их отключить, но тогда обновление народу сайты поломает.

                      Не смотря на то, что есть параметры registerJs и registerCss, должна быть возможность ручного подключения (т.е. своим кодом) скриптов и стилей после отработки MinifyX. А для этого сниппет должен иметь плейсхолдеры, в которых он будет сохранять полные имена подготовленных минимизированных файлов.

                      Вот примеры ситуаций, когда есть необходимость ручного подключения:
                      а) подключаются скрипты с внешних ресурсов наряду с локальными скриптами (локальные прогоняются через MinifyX), при этом необходимо соблюдать определённый порядок подключения — здесь уже нужно будет подключать скрипты не просто «в конце блока head», а «в определённом месте блока head» (или аналогично в футере).
                      б) наряду с локальными скриптами используется сырой код в html при отключенном minifyx_processRawJs. Здесь аналогичная ситуация
                      в) кому-то может понадобиться выполнить ещё некоторую обработку подготовленных сниппетом файлов либо просто считать их параметры — размер, время и пр. Здесь опять-таки нужно знать полное имя готового файла.
                      г) требуется подключить скрипты/стили с определёнными параметрами charset и media

                      В данный момент я регуляркой вытаскиваю имена готовых файлов из плейсхолдеров jsPlaceholder / cssPlaceholder и подключаю эти файлы там, где мне нужно, тем способом, какой мне нужен, и с теми параметрами charset и media, какие мне нужны. Плюс выполняю некоторую дополнительную обработку файлов.
                      Как никак, основная функция сниппета MinifyX — минификация/склейка и жёстко ограничивать возможности в плане подключения он не должен.
                      1. Cyrax_02 27 декабря 2013, 17:14 # 0
                        Мне уже предлагали заменить время на хэш, но длинные имена файлов меня не устраивали, пока я не придумал их просто сокращать.

                        Сейчас хэш берётся от чего? От [имена файлов + время последнего изменения]?
                        1. Василий Наумкин 27 декабря 2013, 17:15 # 0
                          От контента.
                          1. Cyrax_02 27 декабря 2013, 17:18 # 0
                            Отлично. Тогда проблема с одинаковыми базовыми именами, но с разными наборами файлов, решена.
                        2. Саша Пекшев 27 декабря 2013, 17:23 # 0
                          Обновился, все норм на страницах вызова, а вот страница где MinifyX не вызывается, плагин ругается

                          [2013-12-27 17:08:42] (ERROR @ /index.php) [OnWebPagePrerender][2013-12-27 17:08:42] (INFO @ /index.php) [MinifyX] Total time for page "20" = 2,2172927856445E-5
                          1. Василий Наумкин 27 декабря 2013, 17:36 # 0
                            Это ты успел неправильную версию скачать. Удали полностью и поставьте заново.

                            В любом случае, это не ошибка, это он время работы пишет, просто в неверный уровень лога.

                            Хотя, у тебя там и error и info сразу. Непонятно
                            1. Саша Пекшев 27 декабря 2013, 18:00 # 0
                              да все разобрался у меня на странице сниппет был, в нем
                              $modx->setLogLevel(xPDO::LOG_LEVEL_INFO);
                              $modx->setLogTarget('ECHO');
                          2. Evgeny Epifanov 27 декабря 2013, 19:54 # 0
                            Вот и я обновился, пока все нормально.
                            Спасибо за работу!
                            1. Evgeny Epifanov 28 декабря 2013, 21:22 # 0
                              Сразу не заметил, пропали слайдеры в фильтре mFilter. Отключение сжатия не помогает.
                            2. Chero 28 декабря 2013, 20:04 # 0
                              Поймал ошибку при работе с AdvSearch и включенном minifyx_process_registered.

                              regClientStartupScript перехватывается и файл создается, но вот с таким содеражанием:
                              <!--start AdvSearch header--><script type="text/javascript">advsea[advsea.length]='{"asid":"as0","cdt":"Поиск по сайту...","ls":"1","arh":"http://local-trevo.ru/technicalpages/rezultatyi-poiska/"}';</script><!--end AdvSearch header-->
                              Проблема в том, что в AdvSearch регистрируется так:

                              $jsonPair = array();
                                          foreach ($jsHeaderArray as $key => $value)
                                              $jsonPair[] = '"' . $key . '":"' . $value . '"';
                                          $json = '{' . implode(',', $jsonPair) . '}';
                                          $jsline = "advsea[advsea.length]='{$json}';";
                                          $jsHeader = <<<EOD
                              <!-- start AdvSearch header -->
                              <script type="text/javascript">
                              //<![CDATA[
                              {$jsline}
                              //]]>
                              </script>
                              <!-- end AdvSearch header -->
                              EOD;
                                          if ($this->config['addJs'] == 1)
                                              $this->modx->regClientStartupScript($jsHeader);
                                          else
                                              $this->modx->regClientScript($jsHeader);


                              Если удалить
                              <!-- end AdvSearch header -->
                              то все работает.

                              Решил отписаться, т.к. могут быть сниппеты, которые добавляют комментарии, чтобы проблемы не всплывали, можно предусмотреть и это.
                              За такую переработку отдельное спасибо, раньше тестировал вот это: minifyRegistered. Но что-то не срослось.
                              1. Василий Наумкин 28 декабря 2013, 20:28 # 0
                                Понял, нужно добавить вырезание комментариев.

                                Создай, плиз, issue на github, чтобы я не забыл.
                              2. Алина Карапчук 30 декабря 2013, 00:39 # 0
                                у меня кстати скорость загрузки страницы изменилась с 4 сек до 0.50. — если быть точно.
                                На стороне хостинга — использую две функции, интерестно это можно реализовать с помощью этого дополнения.
                                Вот мой сайт — Сайт мебели — villagemebel
                                А вот те 2 пункта что я включаю на стороне хостинга.
                                — Объединять все скрипты JavaScript в один файл
                                Объединение всех подгружаемых на страницу JavaScript файлов в один позволяет уменьшить время загрузки страницы браузером за счет уменьшения необходимого количества HTTP запросов и повышения эффективности сжатия.
                                — Отложенная загрузка JavaScript
                                Откладывание загрузки JavaScript до полной загрузки страницы может значительно ускорить первоначальное отображение страницы, если на ней используется много увесистых JavaScript библиотек. Внимание: эта оптимизация считается опасной и может дать неожиданные эффекты. Перед включением на рабочем сайте крайне рекомендуем испытать на тестовой версии.
                                1. Алина Карапчук 30 декабря 2013, 00:40 # 0
                                  Обьединение особо ничего не дало — а вот отложенная дает отличную скорость загрузки
                                2. Алексей Попов 02 января 2014, 17:34 # 0
                                  Есть небольшая проблема с путями при использовании винды и OpenServer
                                  [2014-01-02 17:24:44] (ERROR @ C:\OpenServer\domains\domain.loc\core\components\minifyx\munee\meenie\munee\src\Munee\Utils.php : 28) PHP warning: mkdir() [<a href='function.mkdir'>function.mkdir</a>]: Invalid argument
                                  [2014-01-02 17:24:44] (ERROR @ /index.php) [MinifyX] The follow directory could not be made, please create it: /C:/OpenServer/domains/domain.loc/core/cache/default/munee/\Css
                                  [2014-01-02 17:24:44] (ERROR @ /index.php) [MinifyX] Could not save cache file C:/OpenServer/domains/domain.loc/tpl/cache/all_da39a3ee5e.css
                                  Понятно, что винда — зло, нужно виртуалку, но тем не менее.

                                  Такую ошибку дает строка 282 в minifyx.class.php
                                  $dir = str_replace('//', '/', '/' . $this->config['munee_cache'] . '/');
                                  Можно убрать добавление начального слэша:
                                  $dir = str_replace('//', '/', $this->config['munee_cache'] . '/');
                                  но это решение частное и неидеальное, требуется более сложное колдунство.
                                  1. Василий Наумкин 02 января 2014, 17:42 # 0
                                    Забодали меня уже своим Windows, OpenServer и их путями.

                                    Уже чинил 2 раза, надоело. Используйте нормальное окружение, у всё будет хорошо.

                                    Думаю, дальнейшие вопросы про Windows буду просто удалять.
                                  2. Юрий Венедиктович 05 января 2014, 23:45 # 0
                                    Василий, не собирает сырой код, не собирает все <link и <script
                                    напиши как включаешь минификс
                                    с уважением!
                                    1. Чикин Артур 06 января 2014, 00:08 # 0
                                      Если ты руками в шаблоне вызываешь <link и <script то их и не будет собирать. Только те что генерируются плагинами и сниппетами.
                                      1. Василий Наумкин 06 января 2014, 06:53 # 0
                                        Все — и не должен.

                                        Только те, что зарегистрированы методами MODX и вставляются в страницу при её сборке. Попробуй что-то зарегистрировать вот этими сниппетами.
                                      2. Руслан Кундиус 08 января 2014, 16:31 # 0
                                        Почему то при включенной обработке изображений они периодически не грузятся, сайт bylovseo.ru
                                        Это только у меня так?
                                        1. Чикин Артур 08 января 2014, 16:49 # 0
                                          Тут телепатов нет, может конкретнее расскажешь?
                                          1. Руслан Кундиус 08 января 2014, 17:41 # 0
                                            Когда сайта ещё нет в кэше браузера, иногда, некоторые картинки долго грузятся и не загружаются. В логе чисто.
                                            Посмотрел в разных браузерах, наблюдается только в хроме, причем не только с обработанными изображениями, буду разбираться что ему не так…
                                            1. Василий Наумкин 08 января 2014, 18:00 # 0
                                              Если только в Chrome — попробуй проверить из режима инкогнито.

                                              Может, какие-то заморочки с сессией?
                                              1. Руслан Кундиус 08 января 2014, 18:06 # 0
                                                Попробовал в инкогнито, та же фигня, только еще заметил что файл яваскриптов так же иногда не грузит
                                                1. Руслан Кундиус 13 января 2014, 11:13 # 0
                                                  Методом тыка нашел что загрузка картинок и скриптов периодически зависает при установке заголовков в core/components/minifyx/model/minifyx/minifyx.class.php строчки 131,132. Если их закомментировать (или не передавать опцию setHeaders) то сайт грузится нормально, правда отдельно картинки уже откроются в текстовом виде, что логично(
                                                  Проверял на разных сайтах. Выходит это проблема в самом Munee?
                                                  1. Василий Наумкин 13 января 2014, 11:17 # 0
                                                    Вполне возможно, но лично я на тестах такого не замечал.

                                                    Попробуй проверить на modx-test.com.
                                                    1. Руслан Кундиус 13 января 2014, 12:18 # 0
                                                      Проверил и вот что заметил, чем больше ресурсов на странице (точнее запросов к серверу) тем чаще это случается, не справляется хром поди)
                                                      1. Василий Наумкин 13 января 2014, 12:20 # 0
                                                        Вряд ли. У меня все картинки открылись.

                                                        А если сделать тоже самое на phpthumbof, попробуй?
                                                        1. Руслан Кундиус 13 января 2014, 12:35 # 0
                                                          Ну они не всегда не грузятся, на примере 2-3 раза из 10 обновлений. Но когда запросов больше 100 то почти через раз…

                                                          До этого (на рабочем сайте) стоял phpthumbon, то норм было, правда из-за него не мог включить fastMode.
                                                          1. Василий Наумкин 13 января 2014, 12:41 # 0
                                                            Ну вот сколько обновляю — все открывается. А нет, не открывается. Очень похоже, что PHP не успевает отработать, видимо Munee или не кэширует картинки, или делает это плохо =(

                                                            Даже не знаю, чем помочь.
                                                            1. Руслан Кундиус 13 января 2014, 13:16 # 0
                                                              Как считаешь, насколько это плохо не устанавливать заголовки? Если это не делать то и грузится и отображается на сайте нормально, только отдельно откроется текстом, просто не знаю какие могут быть последствия…
                                                              1. Василий Наумкин 13 января 2014, 13:28 # 0
                                                                Да может быть, так и правильно.

                                                                Я же особо не тестировал.
                                                                1. Руслан Кундиус 13 января 2014, 13:30 # 0
                                                                  Тогда оставлю так, если что вылезет отпишусь.
                                              2. Алексей 02 апреля 2014, 18:31 # 0
                                                Интересно, что одинаковые js скрипты, подключаемые через modX::regClientScript, на каждой страничке имеют разное имя.
                                                Для чего так сделано?
                                                PS: у меня на сайте ~1500 страниц, и, получается, каждая страничка будет иметь свой js файлик. Не думаю что кол-во inode на моем сервере когда-нибудь закончится, но зачем плодить столько одинаковых файлов?
                                                1. Василий Наумкин 02 апреля 2014, 18:35 # 0
                                                  Имя генерируется из хэша содержимого.

                                                  Если на 1500 страниц собираются разные скрипты — будут разные имена. Если не нравится — отключи автосбор.
                                                  1. Алексей 02 апреля 2014, 18:38 # 0
                                                    а msearch2 такое делает? это его проделки? разные скрипты на страничках?
                                                    1. Василий Наумкин 02 апреля 2014, 18:39 # 0
                                                      Немаловероятно.
                                                      1. Алексей 02 апреля 2014, 18:42 # 0
                                                        otvet.mail.ru/question/45922055
                                                        -))
                                                        смайлы в тикетс нужны)
                                                        1. Чикин Артур 02 апреля 2014, 19:00 # 0
                                                          Зачем смайлы? Лучше написать плагин который при OnCommentSave проверяет твой вымышленный язык смайлов например (:smile: :boring: и ТД) и заменяет его соответствующим тегом с картинкой.
                                                          1. Василий Наумкин 02 апреля 2014, 19:02 # 0
                                                            Зачем?

                                                            Jevix умеет делать автозамену и через него проходят все комменты при сохранении и редактировании.
                                                            1. Чикин Артур 02 апреля 2014, 19:32 # 0
                                                              Вариантов реализации много:)
                                                        2. Алексей 03 апреля 2014, 09:27 # 0
                                                          В общем отключил minifyx_process_registered. Т.к. родной слайдер по выбору цены у mfilter2 не отображается. При установке minifyx_process_registered=0 все ОК работает.
                                                        3. Алексей 04 мая 2014, 13:45 # 0
                                                          да, это дел рук компонента msearch2.
                                                          mse2Config={"cssUrl":"\/assets\/components\/msearch2\/css\/web\/","jsUrl":"\/assets\/components\/msearch2\/js\/web\/","actionUrl":"\/assets\/components\/msearch2\/action.php","queryVar":"query","filter_delimeter":"|","method_delimeter":":","values_delimeter":",","start_sort":"product|pagetitle:asc","start_limit":"96","start_page":1,"start_tpl":"","sort":"","limit":"","page":"","tpl":"","parentsVar":"parents","key":"24aa72089c3763d278fc2cae46b7dd3ab37a621f","pageId":474,"query":"","parents":""};
                                                          он внедряет на каждую страничку свой конфиг, в котором указан ID странички
                                                          "pageId":474
                                                          — получается все скрипты инъецированные с помощью modX::regClientScript при использовании msearch2 для каждой категории товаров — разные.
                                                    2. Алексей 10 июля 2014, 23:37 # 0
                                                      Здравствуйте, возникла проблема при использовании данного сниппета в контекстах.
                                                      Файлы второго сайта находятся тут: /*site*/public_html/*sub_domain*/
                                                      В настройках сниппета путь для сохранения готовых файлов указан следующий: /assets/cache/
                                                      Сниппет сохраняет готовые файлы в папку кэша основного контекста: /*site*/assets/cache/
                                                      а вывести пытается отсюда: /*site*/public_html/*sub_domain*/assets/cache/
                                                      1. Алексей 10 июля 2014, 23:53 # 0
                                                        справился сам, если кто столкнётся — сделал так:
                                                        Создал символическую ссылку в панели управления хостинга с именем cache и значением ../../../assets/cache/

                                                        Правда теперь так и будет сохраняться в папке cache основного сайта.
                                                      Добавление новых комментариев отключено.