Добавление тегов в HEAD документа, используемых в расширениях для Joomla

Четверг, 09 Сентябрь 2010

 

Разрабатывая расширения для Joomla (плагины, модули, компоненты), разработчики часто используют отдельные стилевые таблици (CSS) и javascript файлы. Из-за этого возникает вопрос каким образом подключить все эти файлы в документ, что бы при этом не нарушить стандарты W3C - структуры HTML документа. То есть ссылки на подключаемые таблици стилей и javascript файлы, по стандарту должны находится в HEAD документа.

 

Довольно часто в расширениях для Joomla, разработчики пренебрегают этим правилам и нарушают структуру HTML документа, внедряя каскадные таблици стилей и подключая javascript файлы в тело документа HTML, в позиции вывода модуля. Это не правильно... И может в лучшем случае привести к не валидному HTML коду, а в худшем к нарушению работы других javascript, используемых в документе HTML.

 

Решение этого вопроса довольно простое и удобное в использовании, для этого необходимо получить объект документа, вызвав метод getDocument() классa JFactory, который вернет нам объект JDocument со свойствами и методами. Вызывая эти методы, в объект JDocument будут добавляться новые значения свойств, то есть ссылки и теги для HEAD.

 

Выглядит это так:

 

Создаем объект:

 

 
<?php
$document =& JFactory::getDocument();
?>
 

 

Вызываем методы с передачей им параметров:

 

Так создаем и добавляем в HEAD документа ссылку на CSS файл, метод - addHeadLink():

 

 
$link = JURI::root().'modules/mod/tmpl/style.css';
$attribs = array('type' => 'text/css');
$document->addHeadLink(JRoute::_($link), 'stylesheet', 'rel', $attribs);
 

 

Так создаем и добавляем в HEAD документа ссылку на javascript файл, метод - addScript():

 

 
$document->addScript(JURI::root().'modules/mod/tmpl/script.js');
 

 

Так создаем и добавляем в HEAD документа произвольный HTML код, метод - addCustomTag():

 

 
$document->addCustomTag('<script type="text/javascript" src="http://vkontakte.ru/js/api/share.js?9" charset="windows-1251"></script>');
 

 

И еще один полезный метод который может пригодится, метод - getBase(), вернет текущий адрес страницы:

 

 
$url = $document->getBase();
 

 


PS. И не забудьте подписаться на ленту новостей RSS

Метки:

Похожие статьи:

Комментарии 

 
anonim Суббота, 20 Ноябрь 2010

Хай! Очень познавательная сообщение!! Обязательно буду читать и остальные сообщения!!!

 

 
 
anonim Четверг, 20 Январь 2011

Хорошмй у вас ЖЖ!

Поздравляю всех с крещенскими праздниками!

 

 
 
anonim Четверг, 20 Январь 2011

Привет ! Я библиотеки jquery подключил а в скрипте самом надо что то прописывать а то не работает? за ранее спасибо

 

 
 
anonim Четверг, 20 Январь 2011

Привет, как вы ее подключили? покажите код, иначе сказать трудно, и еще пользуйтесь Firebug, есть подозрение что вы подключили библиотеку jquery через свой скрипт или плагин, что там у вас я незнаю, но при этом не отключили стандартную подгрузку библиотеки mootools в документ (шаблон).
В этой статье пример того как отключить Mootools в шаблоне Joomla. Пример как для joomla 1.5 так и для новой joomla 1.6, способы различны.

 

 
 
anonim Четверг, 20 Январь 2011

Вот код

jQuery(function ($){
function formatText(inde x, panel) {
return index + "";
}
$(document).ready$(function () {
$('.anythingSlider').anythingSlider( {
easing: "easeInOutExpo", // Anything other than "linear" or "swing" requires the easing plugin
autoPlay: true, // This turns off the entire FUNCTIONALY, not just if it starts running or not.
delay: 3000, // How long between slide transitions in AutoPlay mode
startStopped: false, // If autoPlay is on, this can force it to start stopped
animationTime: 600, // How long the slide transition takes
hashTags: true, // Should links change the hashtag in the URL?
buildNavigation : true, // If true, builds and list of anchor links to link to each slide
pauseOnHover: true, // If true, and autoPlay is enabled, the show will pause on hover
startText: "Start", // Start text
stopText: "Stop", // Stop text
navigationForma tter: formatText // Details at the top of the file on this use (advanced use)
});
$("#slide-jump").click(function( ){
$('.anythingSlider').anythingSlider( 6);
});
});
});

 

 
 
anonim Четверг, 20 Январь 2011

сейчас по другому скину

 

 
 
anonim Четверг, 20 Январь 2011

вот

jQuery(function ($){
function formatText(inde x, panel) {
return index + "";
}
$(document).ready$(function () {

$('.anythingSlider').anythingSlider( {

easing: "easeInOutExpo",
autoPlay: true,
delay: 3000,
startStopped: false,
animationTime: 600,
hashTags: true,
buildNavigation : true,
pauseOnHover: true,
startText: "Start",
stopText: "Stop",
navigationForma tter: formatText
});
$("#slide-jump").click(function( ){
$('.anythingSlider').anythingSlider( 6);
});
});
});

 

 
 
anonim Четверг, 20 Январь 2011

Так а как вы его подключили? И подключен ли он вообще, проверяли в Firebug? Скрипт подгружается? Попробуйте в этом скрипте алертом проверить вот так
alert('скрипт подключен!'), если вылетит алерт значит все подключили правильно. Это первое что требуется выяснить, а затем уже возможные ошибки из-за несовместимости с Mootools который joomla подгружает в шаблон/документ.

 

 
 
anonim Четверг, 20 Январь 2011

все нормально пишет скрипт подключен.Значит это из-за с Mootools конфликт.Как его решить подскажи пожалуйста.

 

 
 
anonim Четверг, 20 Январь 2011

West я же вам ссылочку выше кинул :))

 

 
 
anonim Четверг, 20 Январь 2011

так это Joomla 1.6, а меня 1.5 или тоже пойдет?

 

 
 
anonim Четверг, 20 Январь 2011

Там пример для обоих версий и для joomla 1.5 и для новой joomla 1.6

 

 
 
anonim Четверг, 20 Январь 2011

НЕ подскажешь как это будет выглядеть на моем примере а то у меня не получается

 

 
 
anonim Четверг, 20 Январь 2011

Первый листинг кода в статье по ссылке - это и есть способ для joomla 1.5

 

 
 
anonim Четверг, 20 Январь 2011

вставил вот так все равно не идет

А ты еще что нибудь подсказать может у меня в скрипте где-то косяк посмотри пожалуйста

 

 
 
anonim Четверг, 20 Январь 2011

Все сделал.Спасибо за помощь

 

 
 
anonim Четверг, 20 Январь 2011

Так в чем была проблема, опишите здесь.

 

 
 
anonim Понедельник, 24 Январь 2011

Привет! А проблема была простая по запарки забыл css на слайдер прикрепить.А так и с Mootools работает я ее не отключал.

 

 
 
anonim Понедельник, 24 Январь 2011

Наверное версия mootools в joomla совпала с версией подключаемого скрипта.

 

 
 
anonim Суббота, 06 Август 2011

Нарешті знайшов, величезне превелике дякую!!!
Здоров'ячка вам і натхнення у роботі! )

 

 
 
anonim Среда, 04 Апрель 2012

Спасибо, статья помогла :)

 

 
 
anonim Воскресенье, 24 Март 2013

Добрый день!

Обнаружил прикольный эффект при использовании шаблонов от rockettheme (может и с другими сработает).

Если добавить в модуле, выводимом на сайт, присваивание - $attribs = то убивается оболочка для этого модуля rt-block,..., module-content

 

 

Добавить комментарий