--=REKLAMA=--
Ta strona wymaga przetłumaczenia lub jest w trakcie tłumaczenia! Pomoc jest mile widziana. Ostatnio edytowane przez Zwiastun (dyskusja. Data edycji: Wed, 15 Apr 2009 12:32:34 +0000
Templates are executed in a 2-phase process that makes full use of the PHP parser to provide considerable flexibility and performance to the template designer. Templates are executed in the context of the document object so that the $this object is always the instantiation of the JDocument class.
Before template execution begins, the component and modules will have been executed and their output buffered for later use.
Template execution then proceeds as follows:-
Gdy Joomla! wyświetla komunikaty błędów, używa specjalnych szablonów. Szablony te umieszczone są w katalogu .../templates/system/. Ich nazwy pochodzą od kodu błędu. Dostępne są poniższe szablony:
Dodatkowo dostępne są również strony:
Uwaga: Na tych stronach elementy jdoc:include nie są przetwarzane.
Kody stanu zdefiniowane są jako część protokołu HTTM w RFC2616. Więcej informacji znajdziesz na stronie http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
Na stronach błędów stosowane są poniższe klasy CSS:
Gdy wpiszesz w przeglądarce internetowej błędny adres, możesz spotkać się z jedną z trzech sytuacji:
Joomla! używa pliku templates/system/error.php do obsługi kilku błędów protokołu HTTP, w tym:
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>.
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.
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.
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 } ?>
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"); } ?>
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).
Więcej informacji o kodach stanów HTTP:
Aby do dokumentu dodać kod JavaScript, trzeba najpierw pozyskać obiekt dokumentu. Aby tego dokonać, należy użyć poniższego kodu:
$dokument =& JFactory::getDocument();
a następnie wykonać metodę JDocument::addScript().
Na przykład:
Aby korzystać z biblioteki javascript /media/system/js/przyklad.js w swoim szablonie lub innym miejscu, należy napisać:
<?php $dokument = &JFactory::getDocument(); $dokument->addScript( 'media/system/js/przyklad.js' ); ?>
Jeśli skrypt dodajemy w pliku index.php szablonu, tzn np. /templates/nasz_szablon/index.php, możemy napisać po prostu:
<?php $this->addScript( 'media/system/js/przyklad.js' ); ?>
Dzięki zastosowaniu powyższego kodu, w wynikowej stronie HTML między znacznikami <head> ... </head> zostanie umieszczony znacznik <script> wskazujący dokument z kodem JavaScript:
<script type="text/javascript" src="/media/system/js/sample.js"></script>
Możemy również umieścić kod Javascript bezpośrednio w znaczniku <script> wewnątrz znacznika <head> HTML. Zrobimy to za pomocą metody JDocument::addScriptDeclaration()
// definicja kodu JavaScript $skrypt = "alert('Jakiś komunikat')"; // dodanie kodu do dokumentu $dokument -> addScriptDeclaration($skrypt);
Metody JDocument::addScript() oraz JDocument::addScriptDeclaration() mogą przyjąć również drugi opcjonalny parametr. Parametr ten określi nam typ MIME skryptu, który chcemy dodać do dokumentu. Standardowym typem jest text/javascript. Możemy także zadeklarować, czyli dodać do naszego dokumentu pliki w innych językach skryptowych, np. tcl (text/tcl) oraz VBScript (text/vbscript).
Przykład:$dokument->addScript('http://przyklad.com/scrypt.vb','text/vbscript');
Different web browsers sometimes show differences in the way that they render a page. For this reason you may wish to find out which particular browser a visitor is using, in order to use some browser-specific CSS.
The following javascript defines a simple browser detection object, by decoding the navigator.userAgent string
/************************************/ function browserDetect() { var browserNames=new Array("Opera", "MSIE","Netscape","Firefox"); this.name="NK"; this.mainVersion="NK"; this.minorVersion="NK"; for (var i=0; i< browserNames.length; i++) { var pattern='('+browserNames[i]+')'+'.([0-9]+)\.([0-9]+)'; var myRegExp=new RegExp(pattern); if (myRegExp.test(navigator.userAgent)) { var results=myRegExp.exec(navigator.userAgent); this.name=results[1]; this.mainVersion=results[2]; this.minorVersion=results[3]; break; } } } /*****************************/
In order to use this in a script, you then create an instance of this object:-
var browser = new browserDetect();
The property browser.name will then give you then name of the browser (MSIE, Opera, Netscape or Firefox), browser.mainVersion will give you the main version number, browser.minorVersion will give you the minor version number.
However you should be aware that this is not-foolproof, and it is generally better (in this writer's opinion) to avoid writing browser-specific code as far as possible.
You can define different CSS style sheets depending upon the device the user is browsing your site with
The recognised media types are:
You can assign a media type to a CSS declaration with the following syntax
@media print {
BODY { font-size: 12pt } }
To assign the declaration to more than one media type:
@media print handheld{
BODY { font-size: 12pt } }
Alternatively, and perhaps a neater solution is to create a separate style sheet for a given media type and include the following in your templates <head> (the following is taken from the beez template):
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/beez/css/print.css" type="text/css" media="Print" />
Poprawianie wydajności szablonu
Szablony administratora (zaplecza)