Подключение js в плагине (Почти решено)
Есть ли разница в подключении js плагина?:
Может ли это сказаться на слиянии js?
Почему для некоторых js нужно запрещать слияние?
Как я понял, это можно сделать двумя способами:
Ну и, наверное, можно провести аналогию этих вопросов применительно к CSS…
UPDATE:
Выяснилось (спасибо PSNet ), что проблемы при слиянии могут возникнуть если js и css в плагине минифицированы. Поэтому, вероятно, в плагинах желательно использовать НЕминифицированные js и css.
Мало того, проблемы могут возникать даже если файлы не минифицированы. В этом случае может помочь расстановка последовательности слияния в конфиге плагина, где желательно «проблемные» файлы поставить в конец.
Как я понял это можно сделать в конфиге так:
Если что-то неверно — поправьте pls…
- Через хук:
public function InitAction() { $this ->Viewer_AppendScript (Plugin::GetTemplateWebPath (__CLASS__).'js/somejs.js'); ... }
- Или через класс плагина:
public function Init() { $this->Viewer_AppendScript (Plugin::GetWebPath (__CLASS__).'js/somejs.js'); ... }
Может ли это сказаться на слиянии js?
Почему для некоторых js нужно запрещать слияние?
Как я понял, это можно сделать двумя способами:
- Запретить слияние
$this ->Viewer_AppendScript (Plugin::GetTemplateWebPath (__CLASS__).'js/somejs.js', array("merge" => false));
- Подключив js прямо в шаблоне (тоже избегает слияния)
Ну и, наверное, можно провести аналогию этих вопросов применительно к CSS…
UPDATE:
Выяснилось (спасибо PSNet ), что проблемы при слиянии могут возникнуть если js и css в плагине минифицированы. Поэтому, вероятно, в плагинах желательно использовать НЕминифицированные js и css.
Мало того, проблемы могут возникать даже если файлы не минифицированы. В этом случае может помочь расстановка последовательности слияния в конфиге плагина, где желательно «проблемные» файлы поставить в конец.
Как я понял это можно сделать в конфиге так:
$config['head']['default']['js'] = array_merge($config['head']['default']['js'], array( "Plugin::GetTemplateWebPath(__CLASS__).'js/somejs1.js", "Plugin::GetTemplateWebPath (__CLASS__).'js/somejs2.js" )); $config['head']['default']['css'] = array_merge($config['head']['default']['css'], array( "Plugin::GetTemplateWebPath(__CLASS__).'css/somecss1.js", "Plugin::GetTemplateWebPath (__CLASS__).'css/somecss2.js" ));
Если что-то неверно — поправьте pls…
Недорогое продвижение web сайтов от компании WEB-DVD. Высокое качество исполнения и индивидуальный подход.
2 комментария
да
в первом варианте вы скорее всего повесели на хук «init_action», но при редиректе с одного экшена на другой этот хук может быть вызван несколько раз и, соответственно, будет добавлен жс файл несколько раз (если вы не указали дополнительно параметр name, который бы избавил от дублей).
поэтому либо второй вариант, либо использовать другой ранний хук, который исполняется единожды при запуске движка, например, engine_init_complete.
не обязательно, просто иногда они уже сжаты либо эти скрипты загружаются с cdn и могут использоваться другими сайтами т.е. браться из кеша и поэтому нецелесообразно сбивать их в кучу вместе со скриптами движка. например, скрипт шаринга яндекса.
да, обеими
Мало того, проблемы могут возникать даже если файлы не минифицированы. В этом случае может помочь расстановка последовательности слияния в конфиге плагина, где желательно «проблемные» файлы поставить в конец.
Как я понял это можно сделать в конфиге так:
Если что-то неверно — поправьте pls…
offtop: PSNet — случайно минусанул ваш каммент...