[MinifyX] Новые возможности старичка
Всем привет! Сегодня поговорим про дополнение MinifyX. Все знают, что это, но не все, что оно больше не поддерживается автором. Основная причина — ядро минифая (библиотека Munee) уже давно не обновляется. Вроде есть проблемы с Bootstrap 4.
Но мне он нравится. А главное, он выполняет всё, что требуется — собирает и минифицирует мои скрипты и стили без ошибок. Я не компилирую сасы, лесы, кофе. Единственное, не хватало разных мелочей для удобства. Вот захотелось мне собирать всё в один файл — и обычные скрипты и скрипты дополнений. Сниппетом это сделать не очень просто, но можно — для каждого шаблона делать отдельный вызов с перечнем необходимых файлов. Но этот вариант не вызвал у меня энтузиазма. И я решил реализовать другой подход. У меня сниппет MinifyX вызывается в чанке head, в котором я определяю секцию HEAD страницы. Поэтому я подумал, а почему бы не использовать подход загрузки файлов по требованию.
Для тех, кто не знает, в MinifyX есть режим автоматической сборки скриптов и стилей с помощью плагина. Все файлы, зарегистрированные через специальные методы MODX, можно собрать и минифицировать. Но данный вариант меня не устраивает невозможностью управлять порядком загрузки файлов.
В общем, я сосредоточился на сниппете. Первое, что я добавил, это группы. Т.е. скрипты можно группировать и подключать указывая группы. Так стало гораздо удобнее. Вот как выглядят эти самые группы.
Но я выше уже говорил, что у меня только один вызов сниппета из чанка head для всех шаблонов. Поэтому я реализовал механизм хуков, позволяющий расширять функционал компонента. В них можно подгружать или заменять файлы в зависимости от условий. Работает это так
Хуки бывают 2-х типов — хуки предварительной обработки и хуки пост обработки. Они указывают в параметрах «preHooks» и «hooks» соответственно. Сделал по аналогии с FormIt, чтобы не путаться. В пре-хуках можно добавлять группы и файлы. В пост-хуках изменять имя сформированного кэш-файла и его содержимое, что может пригодиться в случае ошибок минификации (компрессии).
Мой пре-хук для блога
Методы addCssGroup, addJsGroup, addJsSource и addCssSource добавляют группы и файлы к уже добавленым. Методы setCssGroup, setJsGroup, setJsSource и setCssSource заменяют ранее добавленные файлы на указанные.
Пример пост-хука:
Но мне он нравится. А главное, он выполняет всё, что требуется — собирает и минифицирует мои скрипты и стили без ошибок. Я не компилирую сасы, лесы, кофе. Единственное, не хватало разных мелочей для удобства. Вот захотелось мне собирать всё в один файл — и обычные скрипты и скрипты дополнений. Сниппетом это сделать не очень просто, но можно — для каждого шаблона делать отдельный вызов с перечнем необходимых файлов. Но этот вариант не вызвал у меня энтузиазма. И я решил реализовать другой подход. У меня сниппет MinifyX вызывается в чанке head, в котором я определяю секцию HEAD страницы. Поэтому я подумал, а почему бы не использовать подход загрузки файлов по требованию.
Для тех, кто не знает, в MinifyX есть режим автоматической сборки скриптов и стилей с помощью плагина. Все файлы, зарегистрированные через специальные методы MODX, можно собрать и минифицировать. Но данный вариант меня не устраивает невозможностью управлять порядком загрузки файлов.
В общем, я сосредоточился на сниппете. Первое, что я добавил, это группы. Т.е. скрипты можно группировать и подключать указывая группы. Так стало гораздо удобнее. Вот как выглядят эти самые группы.
<?php
return [
'baseCss' => [
'[[+assets_url]]css/bootstrap.min.css',
'[[+assets_url]]css/font-awesome.min.css',
'[[+assets_url]]css/bootstrap-theme.css',
'[[+assets_url]]components/sitestatistics/css/web/style.css',
'[[+assets_url]]components/hybridauth/css/web/default.css'
],
'ticketsCss' => [
'{assets_url}components/tickets/css/web/default.css',
'{assets_url}components/tickets/js/web/editor/editor.css'
],
'ticketsJs' => [
'{assets_url}components/tickets/js/web/default.js',
'{assets_url}components/tickets/js/web/editor/jquery.markitup.js'
],
'officeCss' => [
'[[+assets_url]]components/office/css/main/default.css',
'[[+assets_url]]components/office/css/profile/default.css'
],
'officeJs' => [
'[[+assets_url]]components/office/js/main/default.js',
'[[+assets_url]]components/office/js/auth/default.js',
'[[+assets_url]]components/office/js/profile/default.js'
],
];
Для групп используется отдельный файл core/components/minifyx/config/groups.php. Для подключения групп предназначено 2 параметра — cssGroups и jsGroups. Вот пример для раздела с тикетами:{$_modx->runSnippet('MinifyX', [
'cssGroups' => 'baseCss,ticketsJs',
'jsGroups' => 'ticketsJs',
]
)}
Таким образом, выделяем в группу общие стили, которые нужны для всех страниц, а затем добавляем нужные группы для конкретного случая. Это реально удобно, так как можно управлять файлами в одном месте и не надо бегать по шаблонам, если нужно добавить или удалить файл из загрузки.Но я выше уже говорил, что у меня только один вызов сниппета из чанка head для всех шаблонов. Поэтому я реализовал механизм хуков, позволяющий расширять функционал компонента. В них можно подгружать или заменять файлы в зависимости от условий. Работает это так
{$_modx->runSnippet('MinifyX', [
'cssGroups' => 'baseCss',
'preHooks' => 'main' // main.php - хук-файл
]
)}
Хуки — это сниппеты. Но так как я сторонник файловых элементов, то добавил возможность указывать файлы. Нужно просто указать имя файла, который должен лежать в папке core/components/minifyx/hooks/. Можно указывать несколько хуков через запятую. В сниппете и файле доступен объект $MinifyX, у которого есть методы для подключения как групп так и отдельных файлов. Хуки бывают 2-х типов — хуки предварительной обработки и хуки пост обработки. Они указывают в параметрах «preHooks» и «hooks» соответственно. Сделал по аналогии с FormIt, чтобы не путаться. В пре-хуках можно добавлять группы и файлы. В пост-хуках изменять имя сформированного кэш-файла и его содержимое, что может пригодиться в случае ошибок минификации (компрессии).
Мой пре-хук для блога
<?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");
}
// Стили сайта. Должны подключаться самыми последними
$MinifyX->addCssSource("{assets_url}css/style.css");
Условия можно определить разные. Можно, например, прописать ТВшку у ресурсов с флагом или с названием файла для подключения, можно проверять урл или id шаблона. В общем, придумать можно много примеров.Методы addCssGroup, addJsGroup, addJsSource и addCssSource добавляют группы и файлы к уже добавленым. Методы setCssGroup, setJsGroup, setJsSource и setCssSource заменяют ранее добавленные файлы на указанные.
Пример пост-хука:
<?php
// Получаем и изменяем содержимое кэш-файла стилей
if ($MinifyX->isCss()) {
$content = preg_replace('#vm ax#', 'vmax', $MinifyX->getContent());
$MinifyX->setContent($content);
}
// Пример изменения названия файла скриптов. Имейте ввиду, что эти файлы при очистке кэша удаляться не будут.
if ($MinifyX->isJs()) {
$MinifyX->setFilename('main.min.js');
}
Данный функционал уже вовсю работает на моем сайте. Проблем пока не выявлено. Если посмотреть на исходники страниц, то можно увидеть только по одному файлу стилей и скриптов у каждой страницы. Правда пришлось подкрутить Tickets и Office, так как в них нельзя отключить все скрипты. Для каждого набора файлов генериться свой файл. Поэтому их у меня около 20 в общей сложности. В результате скорость загрузки страницы немного повысилась — плюс в копилку оптимизации.Итог
Так как Василий больше не поддерживает это дополнение, то и PR слать бессмысленно. Но он по доброте душевной решил отдать MinifyX в хорошие руки. На Гитхабе я уже могу хозяйничать, а вот добавлять в репозитории новые версии никак. Поэтому пока радуемся за меня. :) В дальнейшем чего-нибудь придумаем.
Поблагодарить автора
Отправить деньги
Комментарии: 80
На Гитхабе я уже могу хозяйничать, а вот добавлять в репозитории новые версии никак.Передал права и в магазине — на здоровье.
Вот и придумали :)
П.С. По Tickets и Office. С тикетс можно PR послать (возможность отключать файлы редактора markItUp). А вот с Office такой возможности нет. Если коротко о проблеме — если отключить загрузку скриптов, то перестает инициализироваться переменная OfficeConfig. Думаю, инициализацию javascript конфига нужно вынести из условия проверки наличия файла скриптов.
П.С. По Tickets и Office. С тикетс можно PR послать (возможность отключать файлы редактора markItUp). А вот с Office такой возможности нет. Если коротко о проблеме — если отключить загрузку скриптов, то перестает инициализироваться переменная OfficeConfig. Думаю, инициализацию javascript конфига нужно вынести из условия проверки наличия файла скриптов.
Делай OfficeConfig самостоятельно.
Заодно можешь посмотреть исходный код страниц нового dev.modx.pro — там это всё решено.
Заодно можешь посмотреть исходный код страниц нового dev.modx.pro — там это всё решено.
Пакет получается в 10 мегов. Главный виновник — imagine. Ты его оставлял как есть или чикал? Там папка resources около 8 Мб.
Конечно, чикал — github.com/bezumkin/MinifyX/blob/master/_build/build.prepare.php
хорошо было бы MinifyX css непортил
#id {height: 10vmax; }
возвращает: #id {height:10vm ax}
из-за пробела неработает
В текущей версии можно в хуке сделать замену «vm ax» на «vmax» через preg_replace например. Пока только так. Будет больше времени и желание, гляну как подсунуть другую библиотеку для обработки css.
Пожалуйста, подскажите где посмотреть как сделать хук для Minifyx… Актуальная тема для vmin\vmax
Напишу инструкцию как только оформлю пакет.
Добавил пример хука в пост.
Однозначно, крутое обновление, но — ядро минифая (библиотека Munee) портит весь кайф.
Вот если бы за минификацию css отвечал инструмент — github.com/css/csso
То оптимизация стилей стала бы просто сказкой на MODX, так как ещё не было случая когда эта библиотека что-то не могла правильно обработать в CSS, да и обновляется она регулярно.
А так, Сергей, как всегда, спасибо Вам за Ваши старания.
Вот если бы за минификацию css отвечал инструмент — github.com/css/csso
То оптимизация стилей стала бы просто сказкой на MODX, так как ещё не было случая когда эта библиотека что-то не могла правильно обработать в CSS, да и обновляется она регулярно.
А так, Сергей, как всегда, спасибо Вам за Ваши старания.
Спасибо!
Насколько я понял, csso — яваскрипт компрессор. Это не вариант.
Munee сам не работает с файлами напрямую. Он использует зависимости — для less, sass, coffeescript, javascript и т.д. А они практически все периодически обновляются. Вот например пакет для работы с css.
В принципе, никто не мешает форкнуть Munee и прикрутить другие зависимости.
Насколько я понял, csso — яваскрипт компрессор. Это не вариант.
Munee сам не работает с файлами напрямую. Он использует зависимости — для less, sass, coffeescript, javascript и т.д. А они практически все периодически обновляются. Вот например пакет для работы с css.
В принципе, никто не мешает форкнуть Munee и прикрутить другие зависимости.
Тогда я тоже поделюсь своим вариантом. Мне тоже нравится MinifyX, но сторонние библиотеки я подключаю отдельно. Надоело подключать их вручную, поэтому переместил все в MinifyX.
Добавил параметр
Добавил параметр
'modules' => 'jquery,lazysizes,magnific,sweetalert,slick'
а в сниппете:$modules = $modx->getOption('modules', $scriptProperties, '', true);
$arr_modules = explode(',',$modules);
foreach ($arr_modules as $value){
$moduleCss = $value . 'Css';
$pathCss = $modx->getOption($moduleCss, $scriptProperties, '', true);
if( $pathCss != '' ){
$link = '<link rel="preload" href="'.$pathCss.'" as="style" '.'onload="this.rel='."'".stylesheet ."'".'"'.' >';
$modx->regClientStartupHTMLBlock($link);
}
$moduleJs = $value . 'Js';
$pathJs = $modx->getOption($moduleJs, $scriptProperties, '', true);
if( $pathJs != '' ){
$link = '<link rel="preload" href="'.$pathJs.'" as="script">';
$script = '<script src="'.$pathJs.'" '.$attrJs.'></script>';
$modx->regClientStartupHTMLBlock($link.$script);
}
}
Пути к файлам определяются в параметрах сниппета.
неплохо бы добавить распечатку css в напрямую в код страницы и минификацию самой страницы…
case 'OnWebPagePrerender':
$html = $modx->resource->_output;
$html = preg_replace('|\s+|', ' ', $html);
$modx->resource->_output = $html;
Хуками, всё хуками. Для наглядности добавил хук cssToPage в пакет. Им можно пользоваться сразу после обновления.
[[!MinifyX?
&hooks = `cssToPage.php`
...
]]]
Выложил обновление в modStore. Пробуем, комментируем.
Установил пакет — все супер. Правда я отключил минификацию, так как у меня уже собраны минифицированные css и js. Использую для склейки скриптов и стилей дополнений.
Кому нужно больше примеров.
… а как обновится до 1,5,0?
У меня 1,4,4 — и говорит, что обновлений нет!
У меня 1,4,4 — и говорит, что обновлений нет!
Установите у пакета в качестве поставщика modstore.pro.
Спасибо! Тестирую новую версию на своём сайте. Где ж ещё :)
Пока далеко не ушёл запилил новую версию. Из основных фич:
— В сниппет добавлены параметры «cssTpl» и «jsTpl», в которых можно указать шаблоны для вывода файла стилей и скриптов.
— Добавлен пункт «print» в параметры «registerCss» и «registerJs» для немедленного вывода файла в месте вызова сниппета.
— Добавлена поддержка настройки «forceUpdate». Сейчас она не используется, так как если вы изменили что-то в файлах, то создается новый файл. Но при разработке это не удобно. На каждое изменение css стиля создается новый файл. За день их может наколбасится огромное количество. Решается указанием полного имени файла (см. ниже).
— Добавлена системная настройка «forceDelete», разрешающая удаление всех файлов в папке. Она используется при очистке кэша. В старой версии удаляются только файлы, соответствующие паттерну для кэш-файлов. А так как в хуках можно переименовывать файлы, то они могут не удалиться при очистке кэша из-за несоответствия паттерну.
— Теперь можно указывать полное имя файла, а не как раньше только префикс («all» или «styles»). Он и будет создан, а не хешированный файл типа «styles_2k784axf49.min.css». Сейчас это можно делать только в хуке. Вот тут и пригодится «forceUpdate».
Ну и так по мелочи. Пока гоняю. К вечеру выложу в modStore.
П.С. Комментарий тянет на целую статью :)
— В сниппет добавлены параметры «cssTpl» и «jsTpl», в которых можно указать шаблоны для вывода файла стилей и скриптов.
— Добавлен пункт «print» в параметры «registerCss» и «registerJs» для немедленного вывода файла в месте вызова сниппета.
— Добавлена поддержка настройки «forceUpdate». Сейчас она не используется, так как если вы изменили что-то в файлах, то создается новый файл. Но при разработке это не удобно. На каждое изменение css стиля создается новый файл. За день их может наколбасится огромное количество. Решается указанием полного имени файла (см. ниже).
— Добавлена системная настройка «forceDelete», разрешающая удаление всех файлов в папке. Она используется при очистке кэша. В старой версии удаляются только файлы, соответствующие паттерну для кэш-файлов. А так как в хуках можно переименовывать файлы, то они могут не удалиться при очистке кэша из-за несоответствия паттерну.
— Теперь можно указывать полное имя файла, а не как раньше только префикс («all» или «styles»). Он и будет создан, а не хешированный файл типа «styles_2k784axf49.min.css». Сейчас это можно делать только в хуке. Вот тут и пригодится «forceUpdate».
Ну и так по мелочи. Пока гоняю. К вечеру выложу в modStore.
П.С. Комментарий тянет на целую статью :)
ModxMinify такой еще есть.
те же яйца, только вид сбоку…
Некоторые правила CSS требуют пробелов. Например, Bootstrap имеет следующие элементы ввода: height: calc (2.25rem + 2px). «+» Требует пространства с обеих сторон или оно не работает. К сожалению, пробелы разделяются, оставляя входные данные странно.
ModxMinify использует библиотеку Assetic. Она нормально работает и с «calc» и с «vmax/vmin». Ради эксперимента прикрутил её в MinifyX вместо Munee. Отработала без ошибок.
может это проблему и решает, зато остается с пробелами calc (2.25rem + 2px)
Выпустил новый релиз 1.6.0. Подробности тут.
Здравствуйте, Сергей, спасибо за новую жизнь MinifyX! Заметил одну особенность при обработке css — почему-то в сжатом css отсутствуют стили вида (calc с плюсом), просто вырезаются:
width:calc(50% + 15px);
но при этом, если calc с минусом, то стили присутствуют, все нормально:width:calc(50% - 15px);
К сожалению, это опять же проделки css парсера sabberworm/PHP-CSS-Parser, о котором я писал. Видимо его нужно менять. Может знает кто хороший парсер?
Здравствуйте, Сергей.
Сейчас даже при отключённом сжатии идёт обработка CSS и на выходе получаем вырезанный calc.
Возможно ли полностью исключить обработку, но склеивать файлы как есть.
Сейчас даже при отключённом сжатии идёт обработка CSS и на выходе получаем вырезанный calc.
Возможно ли полностью исключить обработку, но склеивать файлы как есть.
Ещё раз. Собирает и обрабатывает css библиотека sabberworm/PHP-CSS-Parser. Она импортирует указанные через import файлы, меняет относительные пути на абсолютные и т.п. Именно она косячит. За минификацию отвечает другая библиотека CSSmin. Она работает как положено.
Если нужно всего лишь склеить файлы, то напишите простой сниппет, который зачитает указанные файлы и сохранит их в один.
Если нужно всего лишь склеить файлы, то напишите простой сниппет, который зачитает указанные файлы и сохранит их в один.
Версия парсера sabberworm/PHP-CSS-Parser 8.2 теперь работает с calc
Good news!
Вот уверен что все очень круто, но для дилетантов вроде меня, которые привыкли что из модстор почти все готово к работе из коробки – ничего не понятно.
Главная боль — PageSpeed Insights постоянно ругается на скрипты и стили минишопа, офиса, бутстрапа и даже на jquery который в head подключать надо иначе все перестает работать – что с этим делать?
Может сделать компонент платным, а взамен потратить какое-то время на доработку, подробную документацию и на примеры решения частых проблем?
Главная боль — PageSpeed Insights постоянно ругается на скрипты и стили минишопа, офиса, бутстрапа и даже на jquery который в head подключать надо иначе все перестает работать – что с этим делать?
Может сделать компонент платным, а взамен потратить какое-то время на доработку, подробную документацию и на примеры решения частых проблем?
А как совместить с MinifiX подключение media-стилей?
Типа такого:
Типа такого:
<link rel='stylesheet' href='assets/templates/site/smallscreen.css' type='text/css' media='only screen and (max-width: 768px)' />
Сорри, решил просто добавлением media в сам файл стилей:
@media only screen
and (max-width : 768px) {
/* Styles */
}
Загляни в параметры сниппета.
Даже при включенном параметре minifyx_forceDelete
Удаляются файлы из папки, указанной в системных настройках minifyx_cacheFolder,
при этом из папки указанной в параметре cacheFolder (при вызове сниппета) ничего не удаляется.
Удаляются файлы из папки, указанной в системных настройках minifyx_cacheFolder,
при этом из папки указанной в параметре cacheFolder (при вызове сниппета) ничего не удаляется.
Настройка forceDelete используется при очистке кэша в админке. Потребность в ней возникла из-за того, что может быть не соблюдена рекомендация использовать отдельную директорию для скомпилированных файлов. И чтобы случайно не удалить посторонние файлы, MinifyX перед очисткой кэша проверяет файлы папки на соответствие шаблону. Прочие файлы игнорируются. А так как я добавил возможность управлять именем скомпилированного файла, то он может также проигнорироваться. Выставляя настройку forceDelete, вы как бы говорите минифаю, что эта папка только для его файлов и он может её полностью очистить.
Сниппет тут не причем.
Сниппет тут не причем.
Спасибо, я понял. Про forceDelete мне было понятно, просто я имел в виду, что с этим параметром или без него удаление происходит только из папки указанной в системных настройках. Теперь понял, что при очистке кэша в админке плагин не может знать о других папках в которых могут формироваться файлы css
Calc в CSS всё ещё вырезается?
Не увидел вопрос выше, сорри.
Почему то вывод [[+MinifyX.css]] срабатывает через раз — в одном браузере сайт откроешь — вставляется в html-код сборный css-файл, в другом — как будто и нет его. В журнале ошибок пусто.
Проверь, что сниппет вызывается некэшированным, т.е. так [[!MinifyX?
Спасибо!
Два раза все перечитал, но так и не понял: как добавить скрипты и стили компонентов в MinifyX так, что бы они повторно не вызывались на странице самими компонентами?
При таком вызове скрипты/стили компонентов добавляются и в файл /assets/components/minifyx/cache/scripts_da96bb5729.min.js и повторно вызываются на странице самим дополнениями (tickets, PDOtools)
При таком вызове скрипты/стили компонентов добавляются и в файл /assets/components/minifyx/cache/scripts_da96bb5729.min.js и повторно вызываются на странице самим дополнениями (tickets, PDOtools)
[[MinifyX?
&minifyCss=`1`
&minifyJs=`1`
®isterCss=`default`
®isterJs=`default`
&cssSources=`
assets/template/css/bootstrap.css,
assets/template/css/style.css
`
&jsSources=`
/assets/template/js/bootstrap.js,
/assets/components/pdotools/js/pdopage.min.js,
/assets/components/tickets/js/web/default.js,
/assets/template/js/move-top.js,
/assets/template/js/easing.js,
/assets/template/js/classie.js,
/assets/template/js/uisearch.js,
/assets/template/js/share.js,
/assets/template/js/youtube-no-iframe.js,
/assets/template/js/copyright.js
`
]]
Такс, с стилями/скриптами Тикета разобрался — отключаем в настройках Тикетс: очистить поля tickets.frontend_css и tickets.frontend_js. А вот по PDOtools вопрос остается открытым
у сниппета pdopage есть параметры frontend_css и frontend_js, указывайте их пустыми и все будет норм. Или залезьте в набор параметров по умолчанию в админке у сниппета pdopage и укажите там пустые параметры (правда не уверен в данном случае, не потрутся ли параметры при обновлении pdotools). Или создайте свой набор параметров и указывайте его сниппету при вызове
Хорошо, спасибо
Подскажите, а добавить Source Map к CSS при компиляции LESS, реально?
Скорее нет, чем да.
Сергей, приветствую. Спасибо за доработки!
Есть ли возможность оформлять вывод скомпилированных файлов? Есть необходимость добавлять async к
Заранее благодарен.
Есть ли возможность оформлять вывод скомпилированных файлов? Есть необходимость добавлять async к
<script></script>
.Заранее благодарен.
Привет Илья! Ответ тут. И в документации.
1) Я так понимаю проблема с calc не решена? calc(100%/2) у меня вырезается.
2) Так же MinifyX при включенном плагине ругается на скрипты miniShop2 и mSearch2. В журнале ошибка:
3) Можно как-то сделать так, чтобы стили и скрипты подключаемые с других сайтов, автоматически игнорировались при включенном плагине? сейчас прописал регулярку в настройках, но все равно такие файлы не компилируются, поэтому думаю может сразу игнорировать их автоматически?
4) можно разделить папки кеша стилей и скриптов?
2) Так же MinifyX при включенном плагине ругается на скрипты miniShop2 и mSearch2. В журнале ошибка:
File does not exist: /assets/components/minishop2/jsdefault.js
Почему-то вырезается из пути "/web/"3) Можно как-то сделать так, чтобы стили и скрипты подключаемые с других сайтов, автоматически игнорировались при включенном плагине? сейчас прописал регулярку в настройках, но все равно такие файлы не компилируются, поэтому думаю может сразу игнорировать их автоматически?
4) можно разделить папки кеша стилей и скриптов?
Сергей, добрый день. Как получить значение группы?
Файл группы core/components/minifyx/config/groups.php:
Файл группы core/components/minifyx/config/groups.php:
return array(
'lightgalleryCss' => '/assets/frontend/module/lightgallery/css/lightgallery.min.css',
'lightgalleryJs' => '/assets/frontend/module/lightgallery/js/lightgallery.min.js'
);
В прехуке, хочу получить значение lightgalleryJs$url = $MinifyX->getJsGroup('lightgalleryJs');
$url пустой.
Во-первых, группа — это массив файлов.
Во-вторых, файл groups.php — это репозиторий групп. Он содержит список всех групп. Но они не подключаются. Для подключения группы её нужно указать в соответствующем параметре сниппета. А затем к ней можно обратиться через getJsGroup().
Во-вторых, файл groups.php — это репозиторий групп. Он содержит список всех групп. Но они не подключаются. Для подключения группы её нужно указать в соответствующем параметре сниппета. А затем к ней можно обратиться через getJsGroup().
А почему шаблон может не отрабатывать?
picplus.ru/img/1808/09/8adfd571.png
picplus.ru/img/1808/09/8adfd571.png
а… нет, все ок… сорри
Столкнулся с такой проблемой, после удаления скриптов фронтенда в минишопе (ms2_frontend_js), перестаёт инициализироваться переменная miniShop2Config в head, хотя все скрипты минишопа добавляются в минимизированный файл (проверил), причем в том порядке, в котором они работали до добавления в группы и прехуки.
Из за этого не работает нормально сайт,
вот собственно вызов сниппета:
Из за этого не работает нормально сайт,
вот собственно вызов сниппета:
{'!MinifyX' | snippet : [
'minifyCss'=>1,
'minifyJs'=>1,
'cssGroups' => 'baseCss',
'jsGroups' => 'baseJs',
'preHooks' => 'main.php, .......'
]}
а вот файл groups.php<?php
return [
'baseCss' => [
'{assets_url}css/bootstrap.min.css',
'{assets_url}css/style.css',
.......
'{assets_url}components/mspnnotify/js/web/pn/pnotify.custom.css'
],
'baseJs' => [
'{assets_url}js/jquery-1.10.2.min.js',
'{assets_url}js/bootstrap.min.js',
........
'{assets_url}components/mspnnotify/js/web/pn/default.js',
'{assets_url}components/mspnnotify/js/web/pn/pnotify.custom.js'
],
'ticketsCss' => [
'{assets_url}components/tickets/css/web/default.css',
'{assets_url}components/tickets/js/web/editor/editor.css'
],
'ticketsJs' => [
'{assets_url}components/tickets/js/web/default.js',
'{assets_url}components/tickets/js/web/editor/jquery.markitup.js'
],
'msearch2Css' => [
'{assets_url}components/msearch2/css/web/default.css'
],
'msearch2Js' => [
'{assets_url}components/msearch2/js/web/default.js'
],
'minishop2Css' => [
'{assets_url}components/minishop2/css/web/default.css?v=d667606381',
'{assets_url}components/minishop2/css/web/lib/jquery.jgrowl.min.css'
],
'minishop2Js' => [
'{assets_url}components/minishop2/js/web/default.js?v=d667606381',
'{assets_url}components/minishop2/js/web/lib/jquery.jgrowl.min.js',
'{assets_url}components/minishop2/js/web/message_settings.js'
],
'msoptionspriceCss' => [
'{assets_url}components/msoptionsprice/css/web/default.css?v=2385a7bc'
],
'msoptionspriceJs' => [
'{assets_url}components/msoptionsprice/js/web/default.js?v=2385a7bc'
],
'easycommCss' => [
'{assets_url}components/easycomm/css/web/ec.default.css'
],
'easycommJs' => [
'{assets_url}components/easycomm/js/web/ec.default.js'
],
'lookedJs' => [
'{assets_url}components/looked/js/web/looked.js'
],
'ajaxformCss' => [
'{assets_url}components/ajaxform/css/default.css'
],
'ajaxformJs' => [
'{assets_url}components/ajaxform/js/default.js'
],
];
и main.php:<?php
if ($modx->resource->template == 1 || $modx->resource->template == 3) {
$MinifyX->addCssGroup('msearch2Css,minishop2Css,msoptionspriceCss');
$MinifyX->addJsGroup('msearch2Js,minishop2Js,msoptionspriceJs');
}
короче, пока что не получается объединить в один файл скрипты дополнений, если есть минишоп)
В минишопе нельзя указывать пустое значение в настройке ms2_frontend_js. Напишите issue в репозиторий минишопа, чтобы добавить такую возможность. Пацаны сделают.
пользуясь случаем выражаю вам огромное гранд мерси за шикарную доработку компонента…
а по простенькому закостылить нет вариантов?)
а по простенькому закостылить нет вариантов?)
Пацаны посмотрели — и удостоверились что такая возможность была в минишопе изначально и есть по сей день
Странные пацаны — тыкнули пальцем туда, где как раз и запрещается указывать пустое значение. Что бы это могло значить? )
ну вроде правильно, условие есть, если ms2_frontend_js не пустой, то в шапке регистрируем скрипт прописывающий конфиг минишопа, а если пустой, то ничего…
или я что-то не так понимаю?
или я что-то не так понимаю?
Я вам ответил за
Я пропустил, что вопрос конкретно про miniShop2Config - да судя по всему если не добавлять эти данные в код JS приложения - будут проблемы. Нужно подумать - проблема ли это вообще, глобальная ли она, и есть ли смысл ее решать. У нас в любом случае планируется перестройка всего JS
В минишопе нельзя указывать пустое значение в настройке ms2_frontend_js.а не за
перестаёт инициализироваться переменная miniShop2ConfigДа — согласен — конфиг перестает регистрироваться, о чем конкретно вам Андрей еще и на Github написал
Я пропустил, что вопрос конкретно про miniShop2Config - да судя по всему если не добавлять эти данные в код JS приложения - будут проблемы. Нужно подумать - проблема ли это вообще, глобальная ли она, и есть ли смысл ее решать. У нас в любом случае планируется перестройка всего JS
Нужно подумать — проблема ли это вообщеКонечно проблема. Сейчас многие собирают скрипты в один файл, а конкретно в минишопе сделать это нельзя.
в общем закостылил такой вариант)
добавил в файл minishop2.class.php на строку 143 такой код:
добавил в файл minishop2.class.php на строку 143 такой код:
if (empty($js)) {
$message_setting = array(
'close_all_message' => $this->modx->lexicon('ms2_message_close_all'),
);
$js_setting = array(
'cssUrl' => $this->config['cssUrl'] . 'web/',
'jsUrl' => $this->config['jsUrl'] . 'web/',
'actionUrl' => $this->config['actionUrl'],
'ctx' => $ctx,
'price_format' => json_decode(
$this->modx->getOption('ms2_price_format', null, '[2, ".", " "]'),
true
),
'price_format_no_zeros' => (bool)$this->modx->getOption('ms2_price_format_no_zeros', null, true),
'weight_format' => json_decode(
$this->modx->getOption('ms2_weight_format', null, '[3, ".", " "]'),
true
),
'weight_format_no_zeros' => (bool)$this->modx->getOption('ms2_weight_format_no_zeros', null, true),
);
$data = json_encode(array_merge($message_setting, $js_setting), true);
$this->modx->regClientStartupScript(
'<script>miniShop2Config = ' . $data . ';</script>',
true
);
}
вроде работает и теперь можно подключаемые на страницу файлы минишопа засунуть в один файл minifix-а и теперь все функции на сайте работают нормально… теперь все функции на сайте работают нормально…До первого обновления.
Я в своё время делал такое же для mSearch2. Только создал новый класс, который наследовался от базового.
Это да, узнаю сразу если клиент захочет без моего ведома обновить минишоп)
Так понимаю в mSearch2 добавили такую возможность в базовую сборку? Почему нельзя сделать так же с minishop2 в одном из следующих обновлений?
Так понимаю в mSearch2 добавили такую возможность в базовую сборку? Почему нельзя сделать так же с minishop2 в одном из следующих обновлений?
В mSearch2 конфиг и инициализация подключаются в сниппетах. Сам компонент подключается в php-классе.
Можно, думаю сделают. Вопрос только когда?))) У них там полно работы судя по issue на github.
Можешь туда им написать, предложив свой код.
Почему нельзя сделать так же с minishop2 в одном из следующих обновлений?
Можно, думаю сделают. Вопрос только когда?))) У них там полно работы судя по issue на github.
Можешь туда им написать, предложив свой код.
Предложить свой код разработчикам?) Ахахаха… Отличная шутка!)
А у меня вторая серия, только теперь с tickets-ом), он тоже грузит свои скрипты и стили с пустыми настройками frontend_css и frontend_js, но с включенным enable_editor в положении 'да', и никак это побороть нельзя.
Придётся отключить этот редактор «markltUp» в комментариях, блин.
А у меня вторая серия, только теперь с tickets-ом), он тоже грузит свои скрипты и стили с пустыми настройками frontend_css и frontend_js, но с включенным enable_editor в положении 'да', и никак это побороть нельзя.
Придётся отключить этот редактор «markltUp» в комментариях, блин.
Предложить свой код разработчикам?) Ахахаха… Отличная шутка!)Там маленький кусочек — вряд ли его можно испортить. Зато сколько плюсов.
Во-первых в случае принятия кода — можно смело заявлять что входишь в число разработчиков ms2 — и даже показывать ссылку на список контрибьютеров компонента.
Во-вторых необходимость предложить свой код заставит включить голову и сделать это максимально качественно.
В третьих — github позволяет работать над кодом совместно, получать код ревью от более опытных товарищей и самому становиться более опытным.
Предложить свой код разработчикам?) Ахахаха… Отличная шутка!)А что конкретно смешного в этом?
так понимаю в настройке ms2_frontend_js можно прописать ".js" и должно заработать… хм… попробую..)
Ребят, а почему бы не написать нормальную доку, а то первую версию ты не скачаешь, а дока написана только первой версии…
Почему-то сниппет игнорирует указанные в настройках лиректориии и продолжает сохранять файлы в /assets/minifyx/ хотя указано /assets/cache/
Проверьте существует ли эта папка (/assets/cache/).
Проверьте путь на опечатки.
Проверьте права на запись у этой папки (может ли пользователь, из-под которого запускается php, записывать в неё).
Проверьте путь на опечатки.
Проверьте права на запись у этой папки (может ли пользователь, из-под которого запускается php, записывать в неё).
Вы можете не использовать MinifyX для некоторых компонентов, например ms2. Для этого надо унаследовать класс miniShop2 вместе с методом initialize(), и там где вызывается regClientScript() указать скрипт статично, далее обвернуть его каким-нибудь условием, например для определённых страниц или шаблонов, чтобы не боятся за то, что при обновлении что-то затрётся.
По поводу
// Пример версионности статичного файла.
public function initialize($ctx = 'web', $scriptProperties = array())
{
...
// Register JS
$js = trim($this->modx->getOption('ms2_frontend_js'));
if (!empty($js) && preg_match('/\.js/i', $js)) {
$jsFile = 'assets/components/minishop2/js/web/minishop.js';
$jsFileSize = filesize($_SERVER['DOCUMENT_ROOT'].'/'.$jsFile);
$this->modx->regClientScript($jsFile.'?v='.$jsFileSize);
...
}
...
}
miniShop2Config, а также можно обвернуть в условие. Или как в примере выше добавить конфиги.По поводу
и продолжает сохранять файлы в /assets/minifyx/ хотя указано /assets/cache/Тут лучше дождаться ответа разработчика, так как путь assets/components/minifyx/cache обычно идёт по умолчанию, возможно погрешность с вашей стороны или установлен кэш. Логируйте ошибки в журнал и смотрите, что там не так. Да, и ещё указывать из /assets/cache/ нельзя, так как это временная папка, которая очищается.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.