Joomla 2.5: Редирект после закрытия SqueezeBox (модальное окно)

Памятка для Joomla-программистов!

И так растолкую для некоторых кодеров парочку рабочих моментов встретившихся с редиректом после закрытия всплывающего окна SqueezeBox. Начну наверное с того, что в Joomla начиная с версии 1.5 (не помню точно) неплохо реализована система PopUp окон они же модальные окна. Вызывается все это добро как то так:

<a href="http://сайт.ру/forms?tmpl=component" class="modal" rel="{handler: 'iframe', size: {x: 600, y: 350}, onClose: function() {}}">

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

И так. Окно всплыло, показало некоторую информацию, и теперь нам его надо закрыть. Да, конечно есть крестик сверху-справа. Но иногда необходимо это сделать после выполнения некоторых манипуляций, чаще всего это встречается после выполнения отправки форм или нажатии на объект. А делается это все следующим javascript:

window.parent.SqueezeBox.close();

// клик по объекту
onclick="window.parent.SqueezeBox.close();"

Значит закрывать мы научились. А как же сделать редирект после закрытия PopUp окна? Не особо то и сложно, а именно так:

window.parent.location.href = 'http://сайт.ру/okay';
window.parent.SqueezeBox.close();

//клик по объекту
onclick="window.parent.location.href='http://сайт.ру/okay';window.parent.SqueezeBox.close();"

Ну а если мы событие хотим обработать через ссылку, по уму это будет выглядеть так:

<a href="http://сайт.ру/okay" onclick="window.parent.location.href=this.href;window.parent.SqueezeBox.close();">Сохранить и перейти на OKAY</a>

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

И напоследок немножко теории реализации модельных окон в Joomla. Для вызова модального окна нам необходимо подключить MooTools фреймворк, modal.js, modal.css и запустить скрипт

<script type="text/javascript">
window.addEvent('domready', function() {
	SqueezeBox.initialize({});
	SqueezeBox.assign($$('a.modal'), {
		parse: 'rel'
	});
});
</script>

все это реализуется ядром, если есть сигнал системы (компонент,модуль,плагин), но в нашем случае мы хотим вызвать это руками. Для этого нам и понадобится все это подключить на лету. Советую это делать в шаблоне до рендеринга, вот так:

// добавить после defined( '_JEXEC' ) or die( 'Restricted access' );
$document = JFactory::getDocument();
$document->addScriptDeclaration("window.addEvent('domready',function(){SqueezeBox.initialize({});SqueezeBox.assign($$('a.modal'),{parse:'rel'});});");
$document->addScript($this->baseurl.'/media/system/js/mootools-core.js');
$document->addScript($this->baseurl.'/media/system/js/core.js');
$document->addScript($this->baseurl.'/media/system/js/caption.js');
$document->addScript($this->baseurl.'/media/system/js/modal.js');
$document->addStyleSheet($this->baseurl.'/media/system/css/modal.css');

Но тут мы можем попасть с дублем инициализации SqueezeBox. Обойти это можно следующим образом, он же будет и конечный грамотный вариант.

$document = JFactory::getDocument();
if ($this->_scripts[$this->baseurl.'/media/system/js/modal.js']) {
	$document->addScriptDeclaration("window.addEvent('domready',function(){SqueezeBox.initialize({});SqueezeBox.assign($$('a.modal'),{parse:'rel'});});");
}
$document->addScript($this->baseurl.'/media/system/js/mootools-core.js');
$document->addScript($this->baseurl.'/media/system/js/core.js');
$document->addScript($this->baseurl.'/media/system/js/caption.js');
$document->addScript($this->baseurl.'/media/system/js/modal.js');
$document->addStyleSheet($this->baseurl.'/media/system/css/modal.css');

в двух словах тут мы проверяем поступал ли сигнал от ядра подключить modal.js и если это уже было то инициализация SqueezeBox так же прошла. Значит отрубаем нашу инициализацию. ну как то так )))))

Все я устал, если что спрашиваем в комментах.

Я спать, всем удачи!!!