MinifyX
Автоматизированное сжатие и кэширование скриптов и стилей сайта.
Параметры
Название | Описание |
---|---|
&cssFilename | Префикс или полное имя скомпилированного CSS файла. По-умолчанию указан префикс «styles». |
&cssGroups | Названия групп стилей (через запятую). |
&cssPlaceholder | Имя плейсхолдера css. Используется, если ®isterCss=`placeholder` . По-умолчанию «MinifyX.css». |
&cssSources | Список CSS файлов для обработки. Можно указывать «*.css», «*.less» и «*.scss». |
&cssTpl | Шаблон для скомпилированного файла стилей. Должен быть указан плейсхолдер [[+file]] . По-умолчанию <link rel="stylesheet" href="[[+file]]"> . |
&forceUpdate | Отключить проверку изменения файлов и генерировать новые скрипты и стили каждый раз. |
&hooks | Список хуков через запятую для обработки полученного результата. Укажите имя сниппета или файла с расширением. |
&jsFilename | Префикс или полное имя скомпилированного JS файла. По-умолчанию указан префикс «scripts». |
&jsGroups | Названия групп скриптов (через запятую). |
&jsPlaceholder | Имя плейсхолдера javascript. Используется, если ®isterJs=`placeholder` . По-умолчанию «MinifyX.javascript». |
&jsSources | Список JS файлов для обработки. Можно указывать «*.js» и «*.coffee». |
&jsTpl | Шаблон для скомпилированного файла скриптов. Должен быть указан плейсхолдер [[+file]] . По-умолчанию <script type="text/javascript" src="[[+file]]"></script> . |
&minifyCss | Включает минификацию CSS. По-умолчанию отключена. |
&minifyJs | Включает минификацию JS. По-умолчанию отключена. |
&preHooks | Список хуков через запятую для предварительной обработки. Укажите имя сниппета или файла с расширением. |
®isterCss | Подключение сss: «placeholder» - сохранить в плейсхолдер, «default» - подключить в теге <head>, «print» - подключить в месте вызова сниппета. По-умолчанию, «placeholder». |
®isterJs | Подключение javascript: «placeholder» - сохранить в плейсхолдер, «startup» - подключить в теге <head>, «default» - разместить перед закрывающим <body>, «print» - подключить в месте вызова сниппета. По-умолчанию, «placeholder». |
Кэш
Во время работы компонента все готовые файлы кэшируются в директорию, указанную в системной настройке minifyx_cacheFolder
. По умолчанию она находится в директории assets компонента.
Если вы указываете собственную директорию, то будьте внимательны - Minifyx будет удалять все файлы в ней. Всегда используйте отдельную пустую директорию для готовых файлов!
Группы
Для удобства файлы скриптов и стилей можно объединять в группы. Группы указываются в файле core/components/minifyx/config/groups.php.
Хуки
Хуки - это сниппеты или файлы, которые позволяют выполнять необходимые манипуляции в процессе обработки файлов. Файловые хуки должны находится в папке core/components/minifyx/hooks.
Хуки бывают 2-х типов — хуки предварительной обработки и хуки пост обработки. Они указывают в параметрах «preHooks» и «hooks» соответственно. В прехуках можно добавлять группы и файлы. В постхуках изменять имя сформированного кэш-файла и его содержимое, что может пригодиться для дополнительной обработки полученного результата. Например, распарсить плейсхолдер MODX.
В хуках доступен объект $MinifyX, у которого есть методы для подключения как групп так и отдельных файлов, а также ряд других полезных методов.
Методы для работы в прехуках
- addCssGroup('строка или массив') - добавить группу в список групп стилей.
- addJsGroup('строка или массив') - добавить группу в список групп скриптов.
- addCssSource('строка или массив') - добавить файл в список источников стилей.
- addJsSource('строка или массив') - добавить файл в список источников скриптов.
- setCssGroup('строка или массив') - заменить список групп стилей.
- setJsGroup('строка или массив') - заменить список групп скриптов.
- setCssSource('строка или массив') - заменить список файлов стилей.
- setJsSource('строка или массив') - заменить список файлов скриптов.
- getCssGroup('название группы') - получить указанную группу или все группы стилей.
- getJsGroup() - получить указанную группу или все группы скриптов.
Методы для работы в постхуках
- isCss() - true, если компилируется css файл.
- isJs() - true, если компилируется javascript файл.
- getContent() - получить содержимое скомпилированного файла.
- setContent($content) - заменить содержимое скомпилированного файла.
- setFilename($filename) - заменить название файла.
- getFileUrl() - получить полный URL скомпилированного файла.
- getFilePath() - получить путь к скомпилированному файлу.
Примеры
Вывод сниппета с регистрацией стилей перед </head> и скриптов перед </body>
[[MinifyX?
&minifyCss=`1`
&minifyJs=`1`
®isterCss=`default`
®isterJs=`default`
&cssSources=`
assets/templates/himyf/css/normalize.css,
assets/templates/himyf/css/foundation.css,
assets/templates/himyf/css/font-awesome.css,
assets/templates/himyf/css/app.css
`
&jsSources=`assets/templates/himyf/js/foundation.js`
]]
Для удобства можно создать набор параметров, в котором указать первые 4 параметра как в примере выше, и назвать его MinifyDefault (т.е. минифицировать и регистрировать в режиме default). Тогда вызов будет выглядеть так:
[[MinifyX@MinifyDefault?
&cssSources=`
assets/templates/himyf/css/normalize.css,
assets/templates/himyf/css/foundation.css,
assets/templates/himyf/css/font-awesome.css,
assets/templates/himyf/css/app.css
`
&jsSources=`assets/templates/himyf/js/foundation.js`
]]
Вывод в плейсхолдеры
Если указан режим вывода в плейсхолдеры, то скомпилированный файл стилей будет сохранён в плейсхолдере, указанном в параметре &cssPlaceholder (по-умолчанию MinifyX.css
), а файл скриптов соответственно в плейсхолдере, указанном в параметре &jsPlaceholder (по-умолчанию MinifyX.javascript
).
[[MinifyX?
&minifyCss=`1`
&minifyJs=`1`
&cssSources=`
assets/templates/himyf/css/normalize.css,
assets/templates/himyf/css/foundation.css,
assets/templates/himyf/css/font-awesome.css,
assets/templates/himyf/css/app.css
`
&jsSources=`assets/templates/himyf/js/foundation.js`
]]
[[+MinifyX.css]]
[[+MinifyX.javascript]]
Если вы собираете сайта на шаблонизаторе Fenom, тогда вызов будет следующим:
{'!MinifyX' | snippet : [
'minifyCss' => 1,
'minifyJs' => 1,
'jsSources' => '
assets/plugins/jquery/jquery-2.1.4.min.js,
assets/js/scripts.js
',
'cssSources' => '
assets/plugins/bootstrap/css/bootstrap.min.css,
assets/css/essentials.css,
assets/css/layout.css,
assets/css/header-1.css,
assets/css/color_scheme/green.css
'
]}
{$_modx->getPlaceholder('MinifyX.css')}
{$_modx->getPlaceholder('MinifyX.javascript')}
Использование групп
Файл groups.php.
<?php
return [
'baseCss' => [
'[[+assets_url]]templates/himyf/css/normalize.css',
'{assets_url}templates/himyf/css/foundation.css',
'assets/templates/himyf/css/font-awesome.css',
'assets/templates/himyf/css/app.css'
],
'baseJs' => [
'assets/templates/himyf/js/foundation.js',
'{assets_url}templates/himyf/js/scripts.js'
],
];
Вызов сниппета
[[MinifyX?
&minifyCss=`1`
&minifyJs=`1`
®isterCss=`default`
®isterJs=`default`
&cssGroups=`baseCss`
&jsGroups=`baseJs`
]]
Пример прехука, добавляющего необходимые скрипты и стили для тикетов
<?php
if ($modx->resource->parent == 10) {
// Добавляем группы
$MinifyX->addCssGroup('ticketsCss,officeCss');
$MinifyX->addJsGroup('ticketsJs,officeJs');
// Добавляем файлы
$MinifyX->addCssSource("{assets_url}css/jquery.fancybox.css");
$MinifyX->addJsSource("{assets_url}js/jquery.fancybox.js");
}
Пример постхука, исправляющего проблему с единицами измерения vmax и vmin
<?php
if ($MinifyX->isCss()) {
$data = preg_replace('#vm (ax|in)#', 'vm$1', $MinifyX->getContent());
$MinifyX->setContent($data);
}
Этот хук уже входит в пакет и называется fixVm. Также из коробки есть хук cssToPage, который регистрирует содержимое файла стилей прямо на страницу. Найти эти хуки можно в папке core/components/minifyx/hooks.