Angepasste 404 Seite mit Concrete5
Es sollte nicht oft vorkommen, aber manchmal landen Internetseiten Besucher auf einer nicht vorhandenen Seite. Oft wird dann eine simple Seite angezeigt mit dem Hinweis dass die Seite nicht verfügbar ist. Etwas mehr Informationen können da hilfreich sein. Besonders wenn eine Seite einem kompletten Redesign unterzogen wurde, kommt es vor, dass Google Besucher auf nicht vorhandene Seiten schickt. In diesem Tutorial geht es um die Anpassung der “Standard 404-Seite”.
Concrete5 erlaubt es, ohne grossen Aufwand die 404-Seite anzupassen. Allerdings gibt es ein paar Dinge die man kennen muss. Als Ausgangslage dient diese Seite – die Standard Concrete5 404-Seite:
Wie man sieht, wird standardmässig das Concrete5 Dashboard Layout verwenden. Als erstes wollen wir unser eigenes Theme einsetzen. Dazu öffnen wir diese Datei: “config/site_theme_paths.php”. Es gibt bereits einige Beispiele welche auskommentiert sind, neu sollte die Datei jedoch folgendermassen aussehen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php defined('C5_EXECUTE') or die(_("Access Denied.")); $v = View::getInstance(); $v->setThemeByPath('/page_not_found', "yourtheme"); /* you can override system layouts here - but we're not going to by default For example: if you would like to theme your login page with the Green Salad theme, you would uncomment the lines below and change the second argument of setThemeByPath to be the handle of the the Green Salad theme "greensalad" $v = View::getInstance(); $v->setThemeByPath('/login', "yourtheme"); // $v->setThemeByPath('/403', "yourtheme"); // $v->setThemeByPath('/register', "yourtheme"); // $v->setThemeByPath('/dashboard', "yourtheme"); */ |
Zeile 5 und 6 definieren unser eigenes Theme. “yourtheme” muss natürlich mti dem Namen des eigenen Themes ersetzt werden. Der Name ist identisch mit dem Verzeichnisname des Themes welches sich im Ordner “themes” befindet.
Es ist wichtig, dass das Theme eine Datei mit dem Namen view.php für “Single Pages” hat. Sie kann ungewähr folgendermassen aussehen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php defined('C5_EXECUTE') or die(_("Access Denied.")); $this->inc('elements/header.php'); ?> <div id="content"> <div id="body"> <!-- begin --> <?php echo $innerContent; ?> <!-- end --></div> </div> <?php $this->inc('elements/footer.php'); ?> |
$innerContent enthält alle Informationen und muss zwingend ausgegeben werden.
Nachdem site_theme_paths.php gespeichert wurde, sollte die 404-Seite unser Layout übernommen haben. In meinem Fall sieht das folgendermassen aus:
Sitemap
Machmal ist es hilfreich, wenn die 404-Seite die Seitenstruktur ausgibt. Auch das lässt sich relativ einfach umsetzen. Dazu muss von dieser Datei /concrete/single_pages/page_not_found.php hier eine Kopie erstellt werden /single_pages/page_not_found.php. Dadurch können wir den Inhalt der Datei anpassen, ohne im “Concrete5 Core” Änderungen vorzunehmen. Folgendes Beispiel zeigt den Code mit einer eingebauten Sitemap:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php defined('C5_EXECUTE') or die(_("Access Denied.")); ?> <h1 class="error"><?php echo t('Page Not Found')?></h1> <?php echo t('No page could be found at this address.')?> <?php if (is_object($c)) { ?> <?php $a = new Area("Main"); $a->display($c); ?> <?php } ?> <?php $bt = BlockType::getByHandle('autonav'); $bt->controller->orderBy = 'display_asc'; $bt->controller->displayPages = 'top'; $bt->controller->displaySubPages = 'all'; $bt->controller->displaySubPageLevels = 'all'; $bt->render('view'); ?> <a href="<?php echo DIR_REL?>/"><?php echo t('Back to Home')?></a>. |
Die Zeilen 13 bis 20 verwenden den Autonav Block um eine Sitemap auszugeben. Mehr braucht’s nicht! In meinem Fall sieht die Seite so aus:

Etwas überflüssig in meinem Fall, je nach Struktur/Seite aber vielleicht ganz nützlich.




on Januar 18th, 2010 at 16:24:40
Thank you Remo! Been struggling with redirects in page_not_found.php, but this is a much better solution.
on Januar 18th, 2010 at 19:47:40
Thanks for these great tutorials – just getting started with Concrete5 and I am constantly referring back to your site!
on Januar 23rd, 2010 at 18:01:59
Hey thanks Remo!
That’s a good tutorial, wish it was there earlier before I’ve gone the stony way to my 404 page with c5.. but mine looks like this, probably an inspiration for others: http://www.fif-moebel.de/404
on Februar 11th, 2010 at 08:28:47
How can i make the nav render in the header.php of a theme globally for all single pages?
Thx for this tutorial!
on Februar 13th, 2010 at 12:36:54
Anyone have an English translation please?
on Februar 13th, 2010 at 13:55:15
It is translated?!
English: http://www.codeblog.ch/de/2010/01/concrete5-custom-404-page/
German: http://www.codeblog.ch/de/2010/01/concrete5-custom-404-page/
on Februar 13th, 2010 at 14:30:59
Thanks, I didn’t even notice the German/English translation flags at the top of the page earlier. Thanks a lot, great procedure!