--=REKLAMA=--

Własne strony błędów

Z Joomla!WikiPL

Gdy podasz niepoprawny adres internetowy

Gdy wpiszesz w przeglądarce internetowej błędny adres, możesz spotkać się z jedną z trzech sytuacji:

  • komunikatem przeglądarki, że Nie odnaleziono serwera, gdy podasz adres, którego nie ma w systemie nazw domenowych (DNS)
  • komunikatem przeglądarki, że Nie znaleziono strony (Not found), gdy podasz poprawny adres serwera i niepoprawny adres pliku, a serwer nie obsługuje błędu 404
  • wyświetleniem strony dopracowanej pod względem estetycznym z komunikatem, że żądana strona nie istnieje, w przypadku, gdy serwer obsługuje błąd 404.

Własne strony błędów

Joomla! używa pliku templates/system/error.php do obsługi kilku błędów protokołu HTTP, w tym:

  • 403 - dostęp zabroniony ["403 Forbidden"],
  • 404 - strony nie znaleziono ["404 Not Found"], oraz
  • 500 - wewnętrzny błąd serwera ["500 Internal Server"]

Jeśli chcesz, możesz je wystylizować stosownie do swoich potrzeb.

Ważne, aby zrozumieć, że plik error.php jest plikiem niezależnym od Joomla!, a to oznacza, że na stronach generowanych przez ten plik nie działają dodatki, że nie można włączać do tego pliku modułów, ani też używać dyrektywy <jdoc:include>.

Zastąpienie systemowego pliku błędów

Aby zastąpić systemowe strony błędów, skopiuj plik templates/system/error.php do katalogu templates/<nazwa_twojego_szablonu>

Gdy Joomla! znajdzie plik w katalogu stosowanego szablonu, użyje go zamiast pliku systemowego.

Możesz sformatować tę stronę tak jak chcesz, dopasowując ją do swojego szablonu.

Zastąpienie stylizacji systemowej

Jeśli chcesz zmienić formatowanie strony błędu, skopiuj plik templates/system/css/error.css do katalogu templates/<nazwa_twojego_szablonu>/css.

Następnie uaktualnij ścieżkę do pliku templates/<template-name>/error.php, modyfikując odpowiednio następującą linię:

<link rel="stylesheet" href="<?php echo $this->baseurl; ?>/templates/system/css/error.css" type="text/css" />

Potem po prostu ustal definicje stylów w pliku error.css, tak, jak chcesz.

Dostosowanie komunikatów o błędach

Możesz zastosować warunek logiczny, powodując reakcję zależną od określonego kodu błędu.

Poniżej znajduje się przykład wyświetlenia komunikatu w przypadku błędu 404:

<?php if ($this->error->code = '404') { ?>
	<div id="errorboxheader">Strona nie istnieje</div>
		<div id="errorboxbody"><p>Przykro nam! Taka strona nie istnieje.</p>
		</div>
	</div>
<?php } ?>

Kod stanu HTTP

Gdy do serwera zostanie wysłane żądanie odesłania strony Twojej witryny, serwer wysyła do przeglądarki odpowiedź zawierającą kod stanu HTTP – informację o rezultacie przetwarzania.

Jednym z problemów Joomla! jest zwracanie strony opatrzonej nagłówkiem poprawnej odpowiedzi – 200 Serwer pomyślnie przetworzył żądanie [200 – the server successfully returned the page] zamist strony błędu 404. Może to powodować problemy z wyszukiwarkami, ponieważ strony, które fizycznie nie istnieją, można znaleźć w wynikach wyszukiwania. Zwykle, gdy strona nie istnieje, oczekiwany jest komunikat błędu 404. Jeśli chcesz, aby Joomla! zwracał kod błędu 404, zmodyfikuj standardowe zachowanie Joomla!. Wystarczy w głównym pliku szablonu przed deklaracją <!DOCTYPE> wstawić poniższy kod:

<?php 
if ($this->error->code = '404') {
	header("HTTP/1.0 404 Not Found");
} ?>

Korzystanie z nagłówka i stopki szablonu na standardowych stronach błędu

Jeśli chcesz zobaczyć stronę błędu w układzie szablonu bez przekierowywania do adresu URL strony błędu albo powielania kodu HTML w szablonie strony błedu, skorzystaj z poniższego sposobu. Najpierw umieść następujący kod w pliku templates/<template-name>/error.php:

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
 
include dirname(__FILE__) . "/index.php";
?>

Następnie dokonaj poprawek w templates/<nazwa-szablonu>/index.php:: 1. Znajdź w index.php następujący kod:

<jdoc:include type="head" />

i wymień go na poniższy:

<?php if (!$this->error->code) : ?>
<jdoc:include type="head" />
<?php else : ?> 
<title><?php echo $this->error->code ?> - <?php echo $this->title; ?></title>
<?php endif; ?>

2. Znajdź w index.php następujący kod:

<jdoc:include type="component" />

i wymień go na poniższy:

<?php if ($this->error->code) : /* sprawdz, czy to jest strona bledu, jesli tak, wyswietl komunikat bledu */ ?>
<p><strong><?php echo $this->error->code ?> - <?php echo $this->error->message ?></strong></p>
 
<p><strong><?php echo JText::_('You may not be able to visit this page because of:'); ?></strong></p>
<ol>
<li><?php echo JText::_('An out-of-date bookmark/favourite'); ?></li>
<li><?php echo JText::_('A search engine that has an out-of-date listing for this site'); ?></li>
<li><?php echo JText::_('A mis-typed address'); ?></li>
<li><?php echo JText::_('You have no access to this page'); ?></li>
<li><?php echo JText::_('The requested resource was not found'); ?></li>
<li><?php echo JText::_('An error has occurred while processing your request.'); ?></li>
</ol>
<p><strong><?php echo JText::_('Please try one of the following pages:'); ?></strong></p>
<ul>
<li><a href="<?php echo $this->baseurl; ?>/index.php" title="<?php echo JText::_('Go to the home page'); ?>"><?php echo JText::_('Home Page'); ?></a></li>
</ul>
<p><?php echo JText::_('If difficulties persist, please contact the system administrator of this site.'); ?></p>  
<?php else : ?>  
<jdoc:include type="component" />
<?php endif; ?>

Teraz szablon strony będzie zastosowany również do stron błędów. Uwaga: Moduły zawarte w szablonie nie będą widoczne na stronach błędów wygenerowanych tą metodą (ale będą działać na innych stronach).

Zobacz też

Więcej informacji o kodach stanów HTTP:

© Ten materiał jest dokładnym albo swobodnym tłumaczeniem artykułu http://docs.joomla.org/Custom_error_pages Custom error pages udostępnionego na licencji JEDL na witrynie: Joomla! Official Documentation Wiki

Dziękujemy za wkład

» Stefan Wajda [zwiastun],