V tomto krátkém videonávodu vám prozradím, jak si můžete pro své webové stránky v redakčním systému Joomla! vytvořit vlastní stránku pro chybu 404: stránka nenalezena, a tak nahradit výchozí nepříliš přívětivou chybovou stránku.
Co je chyba 404
Chyba 404: stránka nenalezena může vzniknout například z těchto důvodů:
- hledaná stránka byla odstraněna a vy jste nenastavili přesměrování 301
- návštěvník se překlepl v adrese za lomítkem a daná stránka opravdu na webu nikdy neexistovala
- máte u produktů v eshopu Virtuemart nastaveno, že se mají zneveřejnit, jakmile jsou vyprodané (i zde je dobré nastavit přesměrování, ale je pochopitelné, že každý na to nemá čas a lidi)
Každopádně, ať už k tomu dojde jakkoliv, je dobré nenechat návštěvníka tápat. Namísto toho mu můžete přátelsky vysvětlit, že došlo k chybě a nabídnout mu způsob, jak se dostat k tomu, co hledal - například tak, že na svou vlastní stránku 404 umístíte vyhledávací boxík nebo rozcestník kategorií.
Kvalitní stránka 404 je jedním ze způsobů, jak zlepšit použitelnost webu. Cílem je jednoznačně to, aby neodešel. Tak co mu třeba nabídnout nejnověší články, produkty, akční nabídky atd - no prostě obsah, který jste schopní vložit do článku formou modulu nebo textu a obrázků?
Jak vytvořit vlastní chybovou stránku 404
Podívejte se na můj názorný videonávod, jak chybovou stránku vytvořit na vašem webu:
Původní soubor error.php naleznete ve složce templates/system/.
Kód, který je třeba vložit do souboru error.php najdete zde pod bodem 4 v oficiální dokumentaci k Joomla!
Kreativitě se meze nekladou, takže s chutí do toho!
Tento návod asi prosím neplatí/upravit pro Joomla:
- weby používající ArtioJoom SEF se zapnutou chybou 404 v Artio
- weby používající např. framework T3 od JoomlArt, které mají již stránku 404 upravenou vlastní.
Například - https://helpdesk.easy.minion.cz/neco
Pro mě určitě přínosem volání článku v php error.php v šabloně. Jen nevím co udělá vypnutá položka menu na článek případě že mám Artio, to si ještě vyzkouším.
Jak odstranit hlášku User ID 62 not load asi netřeba psát, tu první hlášku nevím co znamená ? :)
Asi určitě funguje pro Joomla! neboť vychází z oficiální dokumentace k Joomla! a včera jsem to udělala na webu StaWEBnice, kde mimochodem mám i JoomSEF, ale v něm 404 nepoužívám. Obecně už se snažím ho používat jen tam, kde je to nutné.
Ta první hláška říká de facto to samé, že daná url nebyla nalezena a buď je výchozí nebo ze šablony, těžko říct.
User ID vyřeším, až budu mít chuť a čas :) Ten návod de facto vznikl spíš proto, že jsem to dělala na webu pro klienta - který teda JoomSEF nepoužívá, a i tam to funguje.
Obecně mi přijde lepší dát sem návod, který funguje všem než aby si museli dokupovat rozšíření nebo speciální šablonu. A to ty T3 teda vůbec nemám ráda :) Ale všechno je věc zvyku.
jen doplnim - takto udelany clanek jde pak ale dohledat pres vyhledavani, coz je imho spatne a navic ten nalezeny pak vraci kod 200 misto 404
osobne mi prijde lepsi upravovat rovnou error.php
Jak píše Ghost, takto pořešená 404 skončí přesměrováním na existující stránku, tedy kódem 200. Výsledkem je, že vyhledávač si myslí, že stránka existuje, což není úplně to pravé. Upravovat přímo error.php mi ale přijde nepohodlné, plno věcí je tam řešeno jinak, než v index.php.
Osobně řeším podobně, ale
- menu položku na stránku 404 nechám zveřejněnou.
- v parameterch šablony mám pole, kde tu položku zvolím (abych nemusel kódovat menuid natvrdo)
- v error.php mám přesměrování, v podstatě stejné jako v článku, jen doplněné o JRoute, abych měl "hezké" url
- v index.php kontroluji, zda náhodou nejsem na stránce s příslušným itemid, pokud ano, vrátím status 404
tzn.:
templateDetails.xml
error.php
$app = JFactory::getApplication();
$params = $app->getTemplate(true)->params;
$page404 = $params->get('404_page');
if ($page404 && $this->error->getCode() == '404') {
header('Location: '.JRoute::_('index.php?Itemid=' . $page404));
exit;
}
index.php
$app = JFactory::getApplication();
$params = $app->getTemplate(true)->params;
$page404 = $params->get('404_page');
if ($app->input->getInt('Itemid') == $page404) {
$app->setHeader('status', '404 Not found');
}
Hmm, XML nejde vložit :/ v templateDetails.xml má být prostě jen pole s názvem 404_page typu menuitem.
Jen si to chci ujasnit - celý tento článek a vynikající rady jsou zde jen proto, že si chci 404 upravovat ve článku. Pokud je moje touha si 404 vytvořit v php a html, upraviji jen error.php, je to tak?
No ono je to hlavně o tom, jak pracovat s uživatelem když narazí na chybu 404. Osobně mi přijde nesmysl ukazovat mu holou stránku, max. rozšířenou o nějaké hledání apod. Rozumnější mi přijde ukázat mu klasickou stránku, s navigací po menu, vyhledáváním, popř. nějakými doporučeními (nejnovější články apod.). Toho by šlo samozřejmě docílit i úpravou error.php ale daleko složitěji, protože v error.php prostě fungují některé věci jinak než v index.php (např. nahrávání modulů). Jednodušší je tedy přesměrovat na klasickou stránku webu, a tu si standardními prostředky Joomly přizpůsobit k obrazu svému.