Joomla 1.5 Herausfinden ob man auf der Startseite ist

Ein interessantes Problem in Joomla 1.5: „Befinde ich mich auf der Startseite?“

Dazu gibt es mehrere Möglichkeiten/Antworten: (für alle die es eilig haben – die beste Lösung steht ganz unten)

1. Für die Startseite wird das Modul „Frontpage“ benutzt

In diesem Fall kann z.B. im PHP-Code einfach ein

if(JRequest::getCmd( 'view' ) == 'frontpage')"

verwendet werden, oder man packt das ganze in eine Funktion:

function isFrontPage(){
return (JRequest::getCmd('view') == 'frontpage');
}

2. Ein beliebiger Menüpunkt (Artikel, Auflistung, …) wird über „Default“ zur Startseite gemacht.

Durchaus viele Seiten verwenden nicht das Modul Frontpage als Startseite sondern einen beliebeigen Artikel oder ähnliches.
In diesem Fall kann man davon ausgehen, dass man sich dann auf der Startseite befindet, wenn die Seite ohne Parameter aufgerufen wird: http://www.graz4u.at oder http://www.graz4u.at/index.php

Dies kann man wie folgt abfragen:

function isHome() {
//$uri = &JURI::getInstance(); //auch eine Möglichkeit
$uri = JFactory::getURI();
$query = $uri->getQuery();

if(empty($query))
{
return true;
}
return false;
}

Diese Funktion funktioniert fürs erste gut, versagt aber an zwei Stellen:

1. Wenn die Sprache direkt auf der Startseite gewechselt wid: Man befindet sich direkt auf der Startseite und klickt auf „Englisch“ – in diesem Fall wird „index.php?lang=en“ hinzugefüht obwol man sich weiterhin auf der Startseite befindet und die Funktion versagt, weil nun „lang=de“ in $query steht.

Hierfür gäbe es folgende Abhilfe:

if(empty($query) || $query == "lang=de" || $query == "lang=en" || $query == "lang=ru")

2. Die Funktion versagt auch, wenn SEO eingeschalten ist. In diesem Fall wird u.U. immer „true“ zurückgegeben, $query ist (fast) immer leer und jede beliebige Seite wird als Startseite interpretiert

Abhilfe – ein neues Script muss her:

function isHome() {
$router =& JSite::getRouter();
$url = '/index.php?'.JURI::buildQuery($router->getVars());
if ($url == '/index.php?')
return true;
else
return false;
}

Diese Funktion funktioniert bei mir mit und ohne SEO verlässlich – aber ich bin sicher, dass es auch wieder Umstände gibt unter denen sie versagt – darum habe ich hier alle Varianten gepostet, die ich kenne!

Veröffentlicht in FAQs.