Problembeschreibung / Zielstellung

Jedem Webmaster ist dieses leidliche Problem bekannt und es betrifft in J!1.5 auch Joomla-Projekte: Sie haben Modifikationen an einer wichtigen CSS-Datei vorgenommen aber auf den Browsern erscheinen diese Änderungen erst nach einem hart erzwungenem Reload per Strg.+F5. Mit Recht befürchten Sie nun, dass evtl. Ihr Layout auf Userrechnern nicht die gewünschte Änderungen anzeigen oder die Darstellung sogar gestört ist.

Den meisten Webmastern ist nun auch die Methode bekannt an die zu ladenden CSS-Datei einfach einen Parameter anzuhängen z.B. in der Form /templates/css/template.css?v=101. Über die hochzählbare Versionsnummer kann ich nun mit jeder Änderung auch die Version und damit den URI ändern und erzwinge damit, dass diese CSS neu geladen wird. So weit so gut, aber wie sage ich das Joomla.

 



 

Workaround / Core-Modifikation

Bitte beachten: Diese Workaround bedeutet einen Eingriff in den Joomla-Core! Nur so können wir dieses Problem automatisiert umsetzen. Wer sich davor scheut, dem bleibt nicht viel anderes übrig als die CSS-Datei im Template statt einfach per <jdoc:include type="head" /> zu laden aufwändig jede einzelne CSS-Datei im Header einzubinden und dabei ggf. die Versionsnummer anzuhängen. Mit nachfolgender Modifikation wollen wir es uns einfacher machen.

So gehen wir vor:

  1. In unserer Joomla-Configurationsdatei legen wir zwei neue Parameter an:
    var $TmplUniqueCount_CSS = 'V102';
    var $TmplUniqueCount_JS = 'V101';
  2. Verantwortlich für die Ausgabe des Headers ins Template ist das Core-Script head.php im Verzeichnis libraries/joomla/document/html/renderer/. Hier gibt es eine Methode fetchHead(&$document) die für unsere Zwecke erweitert werden muss. Eingefügt werden drei Code-Schnippsel:
    1. Wir benötigen das globale Object $mainframe und binden es am Anfang der Funktion ein
      global $mainframe; Es wird benötigt, um auf die Parameter der configuration.php zugreifen zu können.
    2. Um pauschal alle CSS-Dateien mit einer Versionsnummer versorgen zu können, fügen wir beim Zusammensetzen der Variable $strHtml bei den StyleSheets-Links folgendes ein .'?'.$mainframe->getCfg('TmplUniqueCount_CSS') Vorher war diese Anweisung ein Einzeiler. Der Übersicht halber habe ich das hier auf nun drei Zeile aufgeteilt, um die Einfügung herauszustellen:
      $strHtml .= $tab . '<link rel="stylesheet" href="'.$strSrc 
      	.'?'.$mainframe->getCfg('TmplUniqueCount_CSS')
      	.'" type="'.$strAttr['mime'].'"';
      
    3. Fast baugleich erweitern wir auch den $strHtml für die Scripts kurz darunter durch folgenden Zeile:
      .'?'.$mainframe->getCfg('TmplUniqueCount_JS') zu dann diesem Konstrukt:
      $strHtml .= $tab.'<script type="'.$strType.'" src="'.$strSrc
      	.'?'.$mainframe->getCfg('TmplUniqueCount_JS')
      	.'"></script>'.$lnEnd;
      

Das war's dann auch schon.

Hinweis: Greifen Sie in den Joomla-Core nur ein, wenn Sie wissen was Sie tun.