Bewertung: 5 / 5

Stern aktivStern aktivStern aktivStern aktivStern aktiv
 

Nach einem Wechsel des Providers, der Umzug der Domain und Umstrukturierung der Homepage laufen viele Seiten ins Leere. Joomla zeigt dann die im jeweiligen Template vorhandene Fehlerseite error.php mit dem mehr oder minder gefälligem Layout. Der Besucher bekommt einen Hinweis über den Fehlercode, einen Link zur Startseite und eventuell ein Suchfeld für eine Suche, falls die Suchmaske in Joomla aktiviert wurde. Eine andere Möglichkeit 404-Fehler abzufangen, ist die Weiterleitung der Anfrage zur Suchkomponente von Joomla.

Eigene 404-Fehlerseite

Standardmäßig enthält die error.php im Template jede Menge Codezeilen, die sich leicht ersetzen lassen. Ich habe einfach alles gelöscht. Mich haben weder die Standardtexte noch vordefinierte Modulpositionen interessiert. Ich wollte einfach eine Weiterleitung zur Suchkomponente.

<?php
# error.php for Joomla 1.6.x
# Marian Kulisch (www.mariankulisch.de)
# 07.04.2011 - V1.5

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
 
$link = strtolower($_SERVER['REQUEST_URI']);
 
if($ar = parse_url($link))
{
  $link = $ar['path'];
  $extension = strrchr($link, ".");
  $link = basename($link, $extension);
  $link = str_replace("-", " ", $link);
  $link = str_replace("_", " ", $link);
  $link = trim($link);
 
  $lang = JFactory::getLanguage();
  $upper_limit = $lang->getUpperLimitSearchWord();
 
  if (JString::strlen($link) > $upper_limit)
  {
    $link = JString::substr($link, 0, $upper_limit - 1);
  }
 
  $uri = JURI::getInstance();
  $post = array();
 
  $post['searchword'] = $link;
  $post['ordering'] = "newest";
  $post['searchphrase'] = "any";
 
  $uri->setQuery($post);
  $uri->setVar('option', 'com_search');
 
  $link = JRoute::_('index.php'.$uri->toString(array('query', 'fragment')), false);
 
  JApplication::redirect($link."&Itemid=1");
}
 
die();
 
?>
 

 

Besonderheiten

Dazu bearbeitete ich den letzten Teil der angefragten Seite (REQUEST_URI). Mögliche Dateiendungen und Sonderzeichen wurden entfernt und der so entstandene Suchbegriff auf die in der Joomla-Suche maximale Suchwortlänge begrenzt. In dem Suchbegriff vorkommende Leerzeichen führen zur Aufteilung des Suchbegriffes in mehrer Suchwörter. Der Besucher bekommt so im Idealfall eine Liste mit möglichen Seiten, in denen einer der Begriffe vorkommt. Das zusätzliche Setzen der Itemid auf einen Wert größer Null bewirkte in meinem Template das Anzeigen der Inhalte an den Modulpositionen auf der linken Seite der Homepage (Hauptmenu, Who's Online) und würde bei Übereinstimmung mit einer Menupunktid auch die Breadcrumbs passend dazu aktualisieren.

Alternativen:

Eine differenzierte Auswertung des 403-Errorcodes bei fehlendem Zugriffsrecht und Weiterleitung auf einen dafür vorbereiteten Artikel wären denkbar. Nicht gefundene Seiten erzeugen einen 404-Error. Es gibt aber auch Fälle, da bringt Joomla den Hinweis, das der geschriebene Beitrag nicht gefunden wurde. Eine Weiterleitung zur Fehlerseite hat hier nicht statt gefunden. Eine Standard-Fehlermeldung wird in der Datei index.php im jeweiligen Template ausgegben, falls beim Ermitteln des Beitrages der Nachrichtenpuffer aufgrund eines Fehlers vollgelaufen ist. Der Bereich für die Inhaltskomponente bleibt dafür leer.