Joomla i Phoca gallery - problem w IE

Rozwiązanie:

Nie było to takie oczywiste, jednak po analizie dostępnych źródeł i testowaniu różnych danych dostępnych w sieci otrzymałem następujące rozwiązanie:

 

1. Otwieramy plik \libraries\joomla\html\html\behavior.php

 

Odnajdujemy linię numer 155 od której zaczyna się następujący kod:

<?php
// Attach modal behavior to document
$document->addScriptDeclaration("
window.addEvent('domready', function() {
SqueezeBox.initialize(".$options.");
$$('".$selector."').each(function(el) {
el.addEvent('click', function(e) {
new Event(e).stop();
SqueezeBox.fromElement(el);
});
});
});");
?>

Następnie zamieniamy linię:

window.addEvent('domready', function() {

na taki wpis:

window.addEvent('load', function() {

 

Po zamianie plik zapisujemy i odświeżamy stronę. Wszystko powinno działać poprawnie.

Jeżeli jednak na naszej stronie występują inne moduły, czy komponenty, które z pewnych względów nie tolerują takiego rozwiązania istnieje druga możliwość umożliwiająca uzdrowienie sytuacji.

 

Mianowicie należy wykonać modyfikację deklaracji inicjujących skrypty JS po przez dodanie atrybutu 'defer' który spowoduje iż skrypty będą ładować się dopiero po załadowaniu całej strony.

 

Wersja standardowa:

<script type="text/javascript" >

Wersja zmodyfikowana:

<script type="text/javascript" defer="defer">

 

Rozwiązanie to również przynosi efekty w postaci działającego komponentu galerii.

 

Zmiany dokonujemy w pliku libraries/joomla/document/html/renderer/head.php

 

Odnajdujemy funkcję fetchHead() znajdująca się w 54 linii.

 

Kolejny krok kierujemy w stronę zaglądnięcia do linii 129. Znajduje się tam fragment kodu odpowiedzialny za generowanie deklaracji skryptu JS.

//Generate script file links
foreach ($document->_scripts as $strSrc => $strType) {
$strHtml .= $tab.'<script type="'.$strType.'" src="'.$strSrc.'"></script>'.$lnEnd;

Modyfikujemy dany fragment kodu po przez dodanie atrybutu defer

//Generate script file links
foreach ($document->_scripts as $strSrc => $strType) {
$strHtml .= $tab.'<script type="'.$strType.'" src="'.$strSrc.'" defer="defer"></script>'.$lnEnd;

Rozwiązanie to może - ale nie musi - odbijać sie echem na działaniu joomli w związku z czym sugeruje się zastosowanie warunku, który spowoduje iż dana modyfikacja zostanie wykonana tylko w przypadku gdy przeglądana będzie galeria.

foreach ($document->_scripts as $strSrc => $strType) {
if($_GET['option'] == 'com_phocagallery' )
$strHtml .= $tab.'<script type="'.$strType.'" src="'.$strSrc.'" defer="defer"></script>'.$lnEnd;
else
$strHtml .= $tab.'<script type="'.$strType.'" src="'.$strSrc.'"></script>'.$lnEnd;
}

 

Dodatkowa możliwość:

W razie braku pomyślnego wyniku po zastosowaniu powyższych wskazówek, możemy skasować z nagłówna automatycznie generowane wywałania skryptów mootools.js i caption.js.

Solucje możemy znaleźć na stronie http://www.blog.highub.com/cms/remove-mootools-from-joomla-header/

W wolnym tlumaczeniu chodzi o to aby podmienić kilka linijek kodu, w zalezności od efektu jaki chcemy osiągnąć. Jeżeli chcemy wyrzucić wszystkie skrypty *.js które robia problem, stosujemy pierwszy wariant w postaci:

<?php
$user =& JFactory::getUser();
if ($user->get('guest') == 1) {
$headerstuff = $this->getHeadData();
$headerstuff['scripts'] = array();
$this->setHeadData($headerstuff); }
?>
<jdoc:include type="head" />

Jeżeli jednak pragniemy pozostawić skrypt caption.js, który często jest wymagany przez niektóre moduły, stosujemy wariant numer dwa w postaci:

<?php
// Remove auto generated mootool from header
$headerstuff = $this->getHeadData();
reset($headerstuff['scripts']);
$moo = key($headerstuff['scripts']);
unset($headerstuff['scripts'][$moo]);
$this->setHeadData($headerstuff);
?>
<jdoc:include type="head">

Osobiście nie używałem żadnych z tych wariantów dodatkowych, gdyż problem ustał po zastosowaniu wczesniej opisanych czynności.

 

Podsumowanie:

Po wykonaniu powyższych wskazówek nasza galeria powinna działać sprawnie na wszystkich przeglądarkach, jednak przydał by się jeden IF'ek uruchamiajacy w zależności od uzywanej przegladarki, wersje zmodyfikowaną (w razie uzycia IE), lub wersje standardową (w razie FF, itp.) kodu nagłówka.

Mam nadzieję iż zebrane w tym artykule informacje zostały zaprezentowane jasno i klarownie. Jeżeli znalezione zostało inne rozwiązanie, bądź do mojego opracowania wkradł się błąd to będę bardzo wdzięczny za informację o tym fakcie.

 

 

Dane techniczne:

W testach użyte zostały:

Joomla 1.5.14

PhocaGallery 2.6.2

 

Bibliografia:

http://www.phoca.cz  ->  FAQ

http://forum.joomla.pl