Подключение javascript в joomla и немного powershell
Во многих случаях возникает необходимость подключения javascript в модуль или в компонент.
Начнём с того, что подключать javascript следует в шаблоне модуля или компонента, чтобы в случае необходимости переопределить шаблон не приходилось ещё и код модуля/компонента менять и помнить об этом изменении при обновлении.
В joomla это можно сделать несколькими способами:
- добавив тег script
- Через JDocument
- Через JHtml
Добавлять подключение скрипта через тег script не очень хорошая идея, для автоматической обработки скриптов придётся парсить результирующий html.
Писать в шаблоне
1 | <?php JFactory()->getDocument()->addScript('script.js')?> |
Уже лучше, но код в шаблоне тоже не очень хорошая практика.
У JHtml этих недостатков нет и при этом есть дополнительные преимущества.
1 | JHtml::_('script','script.js'); |
дополнительные параметры:
1 2 3 4 5 | boolean $framework Подключать ли mootools boolean $relative указан путь до файла относительно папки /media boolean $path_only возвращает только путь до файла boolean $detect_browser определение браузера для подключения специфичных js boolean $detect_debug подключать не сжатые файлы для дебага |
$detect_browser по умолчанию true
происходит поиск специфичного js файла для конкретного браузера имя должно формироваться по следующим правилам:
filename.ext, filename_browser.ext, filename_browser_major.ext, filename_browser_major_minor.ext
$detect_debug по умолчанию true
если для подключаемого скрипта script.js есть файл script-uncompressed.js, то в режиме отладки будет подключён именно он.
На днях поставил powershell, поэтому решил попробовать на нём написать функцию для упаковки js с учётом требований joomla.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | function pack-js($arg){ $yuicompressor = "C:\\work\\tools\\yuicompressor-2.4.8.jar" $path = "" if ([string]::IsNullOrEmpty($arg)){ $path = Get-Location $path = $path.toString()+"" } else { $path = $arg } $js = Get-ChildItem $path -Filter *.js|Foreach-Object {$_.Name} foreach($file in $js){ $unpack = $file -replace ".js","-uncompressed.js" if (($file -notmatch "\.min\.") -and ($file -notmatch "\.pack\.") -and ($file -notmatch "\-uncompressed\.js") -and (-not ($js -contains $unpack))){ Copy-Item $path$file $pack$unpack &"java" -jar $yuicompressor --type js --charset utf-8 -o $path$file $path$file } if ($file -match "-uncompressed\.js"){ $compress = $file -replace "-uncompressed.js",".js" &"java" -jar $yuicompressor --type js --charset utf-8 -o $compress $path$file } } } |
Работа функции заключается в том, чтобы упаковывать через yuicompressor js файлы, находящиеся в папку переданной в аргументе или в текущей папке, если без аргументов. Специфика в том, что если файл не упакован, т.е. для него нет uncompressed версии, то сначала такая создаётся, а уже потом файл упаковывается.
Удобство заключается в том, что на сервере для разработки joomla в debug режиме и подключаются несжатые файлы, а на рабочем будут подключатся упакованные без каких либо изменений в коде.