Wie ich ja vor geraumer Zeit schon berichtete, verursachen die beiden Lightbox bzw. Slimbox von Joomla! und VirtueMart untereinander Schwierigkeiten. In Folge dessen hatte ich ja die YOOEffects Lightbox (in Joomla! mitgeliefert) deaktiviert. Nun wollte ich die Lightbox aber ausserhalb von VirtueMart doch nutzen, jedoch nur für eine bestimmte, dritte Extension, nämlich die Freestyle FAQ Lite.

Nachdem ich ein bischen in der Joomla!-Dokumenation gestöbert hatte und versucht hatte, im Forum einen meinem Problem entsprechendem Beitrag zu finden, was jedoch weitestgehend erfolglos blieb. Denn mein Problem ist – anders formuliert und auf den Punkt gebracht:

Wie kann ich ein Stylesheet und ein JavaScript von einer Joomla!-Komponente für eine andere benutzen?

Und um es ein wenig einzugrenzen: Das Stylesheet und das JavaScript sollen nur bei dieser einen Komponente geladen werden.

Denn ich wollte das beides nicht einfach in die index.php-Seite schreiben. Denn dies bedeutet, dass die Slimbox von VirtueMart bei jeder anderen Joomla!-Seite, die dies zum einen nicht unbedingt benötigt und zum anderen dadurch die Ladezeiten und den HTML-Code unnötig vergrößert, mitliefern. Mit den im Forum und in der Dokumentation gewonnenen Informationen kurzentschlossen selbst Hand angelegt.

Der verantwortliche Code

Ein Leichtes war es nämlich herauszufinden, dass folgende drei Zeilen Code mit der Angabe der entsprechenden Konstanten für den Aufruf des Stylesheets und des JavaScriptes sorgen:

$document =& JFactory::getDocument(); // Referenz zum Dokument herstellen
$document->addStyleSheet($url);
$document->addScript($url);

Die Variable $url sollte nicht zwei mal verwendet werden, da Stylesheet und JavaScript an unterschiedlichen Orten liegen. Da ich die Variablen nicht definieren wollte, habe ich hier statt dessen direkt den Pfad eingetragen (siehe unten).

Welche Datei ist für das Laden des Codes verantwortlich?

Das war eigentlich das schwierigste Unterfangen hierbei: herauszufinden, in welcher Datei ich den Code einfügen muss, damit das Stylesheet und das JavaScript geladen werden. Da ich im Forum gelesen hatte, dass dies in der „Hauptdatei“ eingefügt werden müsse, habe ich nach einigem Suchen (das ist ja das schlimmste an Joomla!: diese Dateistruktur!) die richtige Datei gefunden.

/components/com_fsf/views/faq/tmpl/default.php

Der Code funktioniert aber genau so gut in der view.html.php unter

/components/com_fsf/views/faq/view.html.php

 

Den PHP-Code einfügen

Das Einfügen des Codes in die default.php ist hierbei nicht ganz trivial. Man muss nämlich darauf achten, es an die richtige Stelle zu bringen. Denn nach einer kurzen PHP-Deklaration folgt jede Menge HTML-Code – und in diesem nützt der PHP Code nicht viel, denn die Links zum Stylesheet und zum JavaScript müssen ja in den -Tag des HTML-Dokuments. Ich habe also die Stelle

<?php
// No direct access
defined('_JEXEC') or die('Restricted access'); ?>
 
<div class="component-header">
  <div class="componentheading">
    Frequently Asked Questions (FAQ) - H&auml;ufig gestellte Fragen
  </div>
</div>

ziemlich am Anfang der Datei genommen und es vor dem PHP-beendenden Tag ?> eingefügt. Wichtig: vor dem Fragezeichen muss immer ein Leerzeichen stehen.

Dort habe ich diesen angepassten Code eingefügt:

// adding Virtuemart Lightbox to this module
$document =& JFactory::getDocument();
$document->addScript('/components/com_virtuemart/js/slimbox/js/slimbox.js');
$document->addStyleSheet('/components/com_virtuemart/js/slimbox/css/slimbox.css');

Das Einfügen des Codes in die view.html.php im darüber liegenden Ordner habe ich auch probiert – das funktioniert genau so gut. Ich habe es dann dort gelassen, denn irgendwie erschien mir das Laden des Stylesheets und des JavaScriptes an dieser Stelle sinnvoller.

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.