Skip to content

registerCss inline - #3

Open
Boshnik wants to merge 2 commits into
modx-pro:masterfrom
Boshnik:master
Open

registerCss inline#3
Boshnik wants to merge 2 commits into
modx-pro:masterfrom
Boshnik:master

Conversation

@Boshnik

@Boshnik Boshnik commented Jun 10, 2018

Copy link
Copy Markdown

Прошу добавить опцию inline для css

Boshnik added 2 commits June 10, 2018 16:22
Добавление опции inline для css.
@sergant210

Copy link
Copy Markdown

Пишем хук

if ($MinifyX->isCss() && $MinifyX->config['registerCss'] == 'inline') {
    $content = '<style>'.$MinifyX->getContent().'</style>';
    $modx->regClientCSS($content);
    $MinifyX->setFilename("");  // Отключаем сохранение файла.
} 

Хуки для того и придуманы, чтобы решать частные задачи.

@Boshnik

Boshnik commented Jun 12, 2018

Copy link
Copy Markdown
Author

Есть 2 прехука:

  • addSource, где добавляются файлы к cssSources ( $MinifyX->addCssSource(file) )
  • modules, где компилируются еще файлы отдельно.

Ваш хук нужно поместить в hooks, который вызывается каждый раз когда сохраняется файл, соответственно, он будет брать содержимое всех скомпилированных файлов, а мне нужно, только тот файл, который скомпилировался из cssGroups и cssSources.
И если отключить сохранение файла $MinifyX->setFilename("") то последнее содержимое не выводиться.
В итоге получается, что ваш вариант не подходит.

@sergant210

Copy link
Copy Markdown

Честно говоря, я вообще ничего не понял.

Ваш хук нужно поместить в hooks, который вызывается каждый раз когда сохраняется файл, соответственно, он будет брать содержимое всех скомпилированных файлов, а мне нужно, только тот файл, который скомпилировался из cssGroups и cssSources.

Что значит "каждый раз"? И хук и ваше решение будет отрабатывать для единственного скомпилированного файла, созданного из всех указанных файлов, только один раз.

Решение - это разные вызовы сниппета отдельно для инлайн стилей и отдельно для всех остальных.

@Boshnik

Boshnik commented Jun 12, 2018

Copy link
Copy Markdown
Author

Есть прехук modules в котором вызывается функция saveFile, а она уже вызывает хуки ( $this->processHooks($this->config['hooks']); ). Вызывается ваш хук, который берет содержимое скомпилированных файлов, а их может быть несколько, но содержимое их мне вообще не нужно.

Затем сниппет MinifyX тоже вызывает функцию saveFile и соответственно опять ваш хук и получаем содержимое нужного файла.

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

Решение - это разные вызовы сниппета отдельно для инлайн стилей и отдельно для всех остальных.

Да, это решение. Но и добавить registerCss inline тоже решение, и не нужно вызывать 2 раза сниппет.

@sergant210

sergant210 commented Jun 12, 2018

Copy link
Copy Markdown

Ничто не мешает в прехуке modules удалить из конфига ненужный хук. Или наоборот добавить его, а в сниппете соответственно его не указывать.

Решение - это разные вызовы сниппета отдельно для инлайн стилей и отдельно для всех остальных.
...
Да, это решение. Но и добавить registerCss inline тоже решение, и не нужно вызывать 2 раза сниппет.

С точки зрения читаемости и поддержки кода это решение лучше вашего. Ибо даже Вы через год можете забыть реализацию. И я уже молчу про стороннего разработчика.

Объясню в чём проблема. Вы указываете в вызове сниппета тип регистрации "inline", а за кулисами делаете манипуляции с другими файлами и в другом режиме. Т.е. как бы обманываете разработчика, который будет ломать голову над поиском места регистрации определённых скриптов. Такие вещи проф. разработчики делать не советуют. Почитайте про принцип SOLID, один из принципов которого принцип единственной ответственности. Поэтому лучше вызвать 2 сниппета каждый со своей задачей.

@Boshnik

Boshnik commented Jun 12, 2018

Copy link
Copy Markdown
Author

Сергей, большое спасибо)))
Прехук modules :

// в самом начале сохраняем и очищаем хуки
$hooks = $MinifyX->config['hooks'];
$MinifyX->setConfig(array('hooks' => ''));

code...

// в конце возвращаем обратно
$MinifyX->setConfig(array('hooks' => $hooks));

И все работает!

Почитайте про принцип SOLID

Обязательно прочитаю.
Спасибо.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants