registerCss inline - #3
Conversation
Добавление опции inline для css.
|
Пишем хук Хуки для того и придуманы, чтобы решать частные задачи. |
|
Есть 2 прехука:
Ваш хук нужно поместить в hooks, который вызывается каждый раз когда сохраняется файл, соответственно, он будет брать содержимое всех скомпилированных файлов, а мне нужно, только тот файл, который скомпилировался из cssGroups и cssSources. |
|
Честно говоря, я вообще ничего не понял.
Что значит "каждый раз"? И хук и ваше решение будет отрабатывать для единственного скомпилированного файла, созданного из всех указанных файлов, только один раз. Решение - это разные вызовы сниппета отдельно для инлайн стилей и отдельно для всех остальных. |
|
Есть прехук modules в котором вызывается функция saveFile, а она уже вызывает хуки ( $this->processHooks($this->config['hooks']); ). Вызывается ваш хук, который берет содержимое скомпилированных файлов, а их может быть несколько, но содержимое их мне вообще не нужно. Затем сниппет MinifyX тоже вызывает функцию saveFile и соответственно опять ваш хук и получаем содержимое нужного файла. В итоге получается, что хук вызвался минимум 2 раза и определить нужный файл нет возможности.
Да, это решение. Но и добавить registerCss inline тоже решение, и не нужно вызывать 2 раза сниппет. |
|
Ничто не мешает в прехуке modules удалить из конфига ненужный хук. Или наоборот добавить его, а в сниппете соответственно его не указывать.
С точки зрения читаемости и поддержки кода это решение лучше вашего. Ибо даже Вы через год можете забыть реализацию. И я уже молчу про стороннего разработчика. Объясню в чём проблема. Вы указываете в вызове сниппета тип регистрации "inline", а за кулисами делаете манипуляции с другими файлами и в другом режиме. Т.е. как бы обманываете разработчика, который будет ломать голову над поиском места регистрации определённых скриптов. Такие вещи проф. разработчики делать не советуют. Почитайте про принцип SOLID, один из принципов которого принцип единственной ответственности. Поэтому лучше вызвать 2 сниппета каждый со своей задачей. |
|
Сергей, большое спасибо))) // в самом начале сохраняем и очищаем хуки
$hooks = $MinifyX->config['hooks'];
$MinifyX->setConfig(array('hooks' => ''));
code...
// в конце возвращаем обратно
$MinifyX->setConfig(array('hooks' => $hooks));
И все работает!
Обязательно прочитаю. |
Прошу добавить опцию inline для css