Подключение js в плагине (Почти решено)

Есть ли разница в подключении js плагина?:
  1. Через хук:
    public function InitAction() {
        $this ->Viewer_AppendScript (Plugin::GetTemplateWebPath (__CLASS__).'js/somejs.js');
        ...
    }
  2. Или через класс плагина:
    public function Init() {
        $this->Viewer_AppendScript (Plugin::GetWebPath (__CLASS__).'js/somejs.js');
        ...
    }

Может ли это сказаться на слиянии js?

Почему для некоторых js нужно запрещать слияние?

Как я понял, это можно сделать двумя способами:
  1. Запретить слияние
    $this ->Viewer_AppendScript (Plugin::GetTemplateWebPath (__CLASS__).'js/somejs.js', array("merge" => false));
  2. Подключив 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 комментария

avatar
Есть ли разница в подключении js плагина?:
да
Может ли это сказаться на слиянии js?
да
в первом варианте вы скорее всего повесели на хук «init_action», но при редиректе с одного экшена на другой этот хук может быть вызван несколько раз и, соответственно, будет добавлен жс файл несколько раз (если вы не указали дополнительно параметр name, который бы избавил от дублей).

поэтому либо второй вариант, либо использовать другой ранний хук, который исполняется единожды при запуске движка, например, engine_init_complete.

Почему для некоторых js нужно запрещать слияние?
не обязательно, просто иногда они уже сжаты либо эти скрипты загружаются с cdn и могут использоваться другими сайтами т.е. браться из кеша и поэтому нецелесообразно сбивать их в кучу вместе со скриптами движка. например, скрипт шаринга яндекса.

Как я понял, это можно сделать двумя способами:
да, обеими
avatar
Выяснилось (спасибо 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…

offtop: PSNet — случайно минусанул ваш каммент...
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.