Ako si prispôsobiť 404 error stránku v CakePHP
publikované: od: Tibor PiňoNedávno som narazil na výborný článok od Chris Coyier – 404 Best Practices, v ktorom popisuje možnosti, ako upraviť 404 error stránku. V tomto článku sa bližšie pozrieme nato, ako toho docieliť prostredníctvom CakePHP.
Ako ste sa mohli dočítať v spomínanom článku od Chris Coyier – 404 Best Practices, 404 error stránka by mala byť veľmi dôležitou súčasťou každej profesionálnej aplikácie. Návštevníkom sa môže táto error stránka zobraziť veľmi jednoducho, a vôbec to nemusí byť jeho zásluhou (napr. chybný odkaz smerujúci na našu stránku alebo sme mohli presunúť stránku, ktorú sa pokúša návštevník zobraziť, na inú URL atď.) a preto by nám malo záležať na tom, aby sme návštevníka nestratili a poskytli mu určité informácie tak, aby našiel čo hľadá. Tu prichádza na rad prispôsobenie takejto stránky.
Layout pre 404 error stránku
Ako sme si už v CakePHP zvykli, štandardným chovaním pre zobrazenie akejkoľvek informácie je najprv vytvoriť layout a potom samotný obsah layoutu. Inak tomu nie je ani pri 404 error stránke. Layout umiestníme do súboru app/views/layouts/error404.ctp a jeho obsah by mohol vypadať následovne
<? echo $html->docType('xhtml-trans'); ?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<? echo $html->charset("utf-8"); ?>
<title>Tibor Pino - 404 not found</title>
<meta name="author" content="Tibor Piňo" />
<style type="text/css">
body { text-align: center; font-size: 1.3em;}
</style>
</head>
<body>
<? echo $content_for_layout; ?>
</body>
</html>
Po vytvorení layoutu je ďalším krokom vytvorenie obsahu stránky.
404 error stránka
V našom prípade budeme chcieť návštevníkovi oznámiť, že stránka, ktorú sa pokúša zobraziť neexistuje, ale zároveň mu poskytneme odkaz na úvodnú stránku, kde by mohol potrebné informácie nájsť. Súbor so stránkou umiestníme do súboru app/views/errors/404error.ctp a jeho obsah bude vypadať následovne
<?php $this->layout = 'error404'; ?>
<? echo $html->image('404-error-page.jpg',array('alt'=>'Page not found')); ?>
<h1>Stránka nenájdená!</h1>
<p>Stránka, ktorú sa pokúšate zobraziť neexistuje,
<br/>ale <? echo $html->link('úvodná stránka Tibor Piňo',array('controller'=>'pages','action'=>'display')); ?>
<br/>by vám mohla pomôcť.</p>
Tu si musíme trochu vysvetliť, ako CakePHP pracuje s chybovými odpoveďami zo servera. CakePHP automaticky spracováva chybové odpovede, ktoré prijíme od servera. Pri detekovaní chybovej odpovede 404 CakePHP automaticky zobrazí súbor app/views/errors/404error.ctp, ak takýto súbor existuje. V našom prípade tento súbor existuje a CakePHP ho správne zobrazí, takže nemusíme nič explicitne nastavovať. V tomto súbore je ešte jedna zvláštnosť a to to je určenie samotného layoutu $this->layout = ‚error404‘;. Toto určenie layoutu je nevyhnutné, pretože v opačnom prípade by CakePHP zobrazoval vlastný preddefinovaný layout, čo je v našom prípade nežiadúce.
Týmto máme všetko hotové a našu prispôsobenú 404 error stránku môžete vidieť priamo v praxi na stránke môjho portfólia blueweb.rockretail.com
Podobný postup môžete využiť aj pri ďalších chybových odpovediach zo strany servera napr. pre odpoveď 500 Internal Server Error by sme náš kód umiestnili do súborov app/views/errors/500error.ctp a app/views/layouts/500error.ctp
Na záver ešte doplním, že sa mi nepodarilo zaistiť podporu tém pri týchto chybový stránkach. Vo svojich projektoch často využívam témy, ktoré sú napríklad umiestnené v app/views/themes/default a i napriek správnemu fungovaniu tém v mojich projektoch, som musel umiestniť súbory s chybovými hláškami priamo do adresárov umiestnených v app/views namiesto očakávaných v app/views/themes/default
Rád uvítam vaše nápady a pripomienky v diskusii k článku.