Start arrow Programowanie arrow patTemplate arrow Szablon dla Joomla w patTemplate
Szablon dla Joomla w patTemplate: Drugi krok Drukuj Wyślij znajomemu
Spis treści
Szablon dla Joomla w patTemplate
Założenia
Pierwszy krok
Drugi krok
Trzeci krok
Czwarty krok

Drugi krok - Przekształcenie w szablon patTemplate

Przekształcimy najpierw ten kod na poprawny kod XML. Dla czytelności wykładu podzielimy całość na części.

Plik xml powinien zawierać deklarację XML, opisującą najogólniejsze cechy dokumentu, informując procesor XML, że niezbędne będzie zastosowanie parsera XML. Dodamy więc na początku linię:

001 <?xml version="1.0" encoding="iso-8859-2"?>

Określiliśmy wersję XML i zdefiniowaliśmy kodowanie znaków używanych w dokumencie. Konieczna jest również Deklaracja Typu Dokumentu. Dodajemy więc:

002  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

W kolejnej linii wprowadzamy element główny - szablon patTemplate. W tym celu używamy znacznika tmpl. Szablon nazwiemy zwiast_demopl, co deklarujemy atrybutem name. Aby nie nastąpiły kolizje z wykorzystywanymi być może w innych miejscach nazwami, wyraźnie zawężamy przestrzeń nazw w dokumencie; mos:. Od razu również wstawiamy znacznik zamykający, aby nie zapomnieć o nim, gdy skończymy pracę.

003 <mos:tmpl name="zwiast_demopl">
 
      tu wstawimy wszystkie niezbedne deklaracje szablonu
 
205 </mos:tmpl>

Wprowadźmy teraz ogólną strukturę strony.

001 <?xml version="1.0" encoding="iso-8859-2"?>
002  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
003    <mos:tmpl name="zwiast_demopl">
004     <html xmlns="http://www.w3.org/1999/xhtml" lang="pl" >
005       <head>
006          {HEAD}
007         <style type="text/css" media="all">
            @import url("{TEMPLATEPATH}/css/template_css.css");</style>
008      </head>
009      <body>
 
         tu wstawimy tabelke
 
203       </body>
204    </html>
205 </mos:tmpl>
206 <!-- koniec szablonu zwiast_demopl - ⇒    

W powyższym fragmencie mamy dwie zmienne: HEAD i TEMPLATEPATH. Zgodnie z zasadami znakowania patTemplate są one zapisane wielkimi literami i w nawiasach klamrowych. W miejsce pierwszej zmiennej po przetworzeniu szablonu zostanie podstawiona zawartość sekcji HEAD naszego serwisu. W miejsce drugiej ścieżka do pliku arkusza stylów. Zmienne te trzeba zadeklarować w kodzie PHP w pliku index.php, a następnie dodać do szablonu. Oto odpowiedni fragment pliku index.php:

 
// przypisz wartosc zmiennej $head
ob_start();
mosShowhead();
$head = ob_get_contents();
ob_end_clean();
// dodaj zmienna globalna $head do szablonu
$tmpl->addGlobalVar('HEAD', $head);
//przypisz wartosc zmiennej $templatePath
$templatePath = $GLOBALS['mosConfig_live_site'] . '/templates/zwiast_demopl';
// dodaj zmienna globalna $templatePath do szablonu
$tmpl->addGlobalVar('TEMPLATEPATH', $templatePath);

Aby przypisać do zmiennej {HEAD} szablonu zawartość generowanej przez Joomla sekcji HEAD pliku HTML, skorzystaliśmy z funkcji PHP ob_start(). Funkcja ta włącza buforowanie wyjścia. W efekcie ze skryptu nie są przekazywane żadne dane, ale są one zbierane w wewnętrznym buforze. Następnie, za pomocą funkcji ob_get_contents() przypisujemy wartość zmiennej $head, po czym usuwamy zawartość bufora, korzystając z funkcji PHP ob_end_clean().

Wartość $head przypisujemy teraz do zmiennej globalnej szablonu za pomocą funkcji addGlobalVar. Funkcja addGlobalVar wymaga dwóch parametrów: addGlobalVar("nazwa_zmiennej", "wartosc_zmiennej")

Dodanie zmiennej globalnej $templatePath jest nieco prostsze. Przypisujemy jej zawartość ścieżki dostępu do arkusza stylów, a następnie za pomocą funkcji addGlobalVar dodajemy do szablonu.

Mamy już gotową strukturę strony HTML. Dodajmy więc tabelę, a w niej jeden wiersz. Będzie to wiersz nagłówka, a zarazem pierwszy subszablon. Oto kod XML, jaki chcemy włączyć:

010       <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
011       <!-- wiersz naglowka :: szablon: header - ⇒ 
012       <mos:tmpl name="header">
013          <tr>
014             <td>
015                <!-- naglowek - ⇒ 
016                <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
017                   <tr>
018                      <td align="center" valign="top">
019                         {HEADER}
020                      </td>
021                   </tr>
022                </table>
023                <!-- koniec: naglowek - ⇒ 
024             </td>
025          </tr>
026       </mos:tmpl>
027       <!-- koniec: wiersz naglowka :: szablon: header - ⇒ 
 
139       </table>

Myślę, że zrozumienie tego fragmentu kodu nie powinno Ci sprawić żadnego kłopotu.

Mamy tutaj fragment przedstawionego wcześniej kodu HTML, przekształcony na szablon, a dokładniej subszablon patTemplate, zapisany za pomocą kodu xml. W linii 012 umieściliśmy znany nam już znacznik początkowy - tmpl, definiujący subszablon, wraz z atrybutem name="header" - nazwą subszablonu. Na zawartość subszablonu składają się HTML-owskie znaczniki wiersza i komórek oraz dwie zmienne {BORDER}, zadeklarowana w kodzie PHP definicja szerokości krawędzi tabeli, oraz - bardziej nas tutaj interesująca - zmienna {HEADER}, skrywająca faktyczną zawartość nagłówka serwisu.

Sposób dodania zmiennej {HEADER} do szablonu w kodzie PHP omówimy nieco później, aby nie zaciemnić czytelności tego fragmentu objaśnień.

Podobnie jak wiersz nagłówka wprowadzamy do kodu pozostałe elementy tabeli, przekształcając niektóre z nich na podszablony patTemplate. Zrozumienie tej kolejnej części nie powinno sprawić żadnej trudności. Nie ma tutaj bowiem niczego nowego w porównaniu z fragmentem powyżej.

Oto kod XML zawierający całą tabelę, w której będzie umieszczana zawartość serwisu. W poszczególnych wierszach i komórkach sygnalizowane wcześniej już obszary zawartości (głównej i pozycje modułów) zostały przekształcone na szablony patTemplate. Każdy ma swoją niepowtarzalną nazwę wyrażoną atrybutem name, taką jak nazwa pozycji modułu czy obszaru preznaczonego na głóną zawartość strony.

001 <?xml version="1.0" encoding="iso-8859-2"?>
002  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
003    <mos:tmpl name="zwiast_demopl">
004     <html xmlns="http://www.w3.org/1999/xhtml" lang="pl" >
005       <head>
006          {HEAD}
007         <style type="text/css" media="all">
            @import url("{TEMPLATEPATH}/css/template_css.css");</style>
008      </head>
009      <body>
 
010       <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
011       <!-- wiersz naglowka :: szablon: header - ⇒ 
012       <mos:tmpl name="header">
013          <tr>
014             <td>
015                <!-- naglowek - ⇒ 
016                <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
017                   <tr>
018                      <td align="center" valign="top">
019                         {HEADER}
020                      </td>
021                   </tr>
022                </table>
023                <!-- koniec naglowka - ⇒ 
024             </td>
025          </tr>
026       </mos:tmpl>
027       <!-- koniec: wiersza naglowka :: szablon: header - ⇒ 
028       <!-- wiersz srodkowy - ⇒ 
029       <!-- szablon: user34 - ⇒ 
031       <!-- wiersz z pozycjami opcjonalnymi user3 i user 4 - ⇒ 
032       <!-- bedzie pokazany, gdy w jednej z tych pozycji - ⇒ 
033       <!-- lub w obu pozycjach, zostanie umieszczona zawartosc - ⇒ 
034       <mos:tmpl name="user34">
035          <tr>
036             <td>
037             <!-- [user3] || [user4] - ⇒ 
038                <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
039                   <tr>
040                   <!-- szablon: user3 - ⇒   
041                   <mos:tmpl name="user3">
042                      <td align="center" valign="top">
043                         {USER3}
044                      </td>
045                   </mos:tmpl>
046                   <!-- koniec szablonu user3 - ⇒ 
047                   <!-- szablon: user4 - ⇒ 
048                   <mos:tmpl name="user4">
049                      <td align="center" valign="top">
050                         {USER4}
051                      </td>
052                   </mos:tmpl>
053                   <!-- koniec szablonu user4 - ⇒  
054                   </tr>
055                </table>
056             </td>
057          </tr>
058          </mos:tmpl>
059          <!-- koniec: szablonu user34  - ⇒ 
060          <!-- wiersz z 3 kolumnami: lewa, centralna i opcjonalnie prawa [right]  - ⇒ 
061          <tr>
062             <td valign="top">
063             <!-- 3 kolumny: lewa centralna [prawa] - ⇒ 
064                <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
065                <!-- lewa  - ⇒ 
066                   <tr>
067                      <td class="left" valign="top">
068                         {LEFT}
069                      </td>
070                      <td class="main_content" valign="top">
071                      <!-- szablon: user12 - ⇒ 
072                      <!-- bedzie pokazany, gdy w jednej z tych pozycji - ⇒ 
073                      <!-- lub w obu pozycjach, zostanie umieszczona zawartosc - ⇒ 
074                      <mos:tmpl name="user12">
075                         <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
076                         <!-- [user1] || [user2] - ⇒ 
077                            <tr>
078                            <!-- szablon: user1 - ⇒ 
079                            <mos:tmpl name="user1">
081                               <td align="center" valign="top">
082                                  {USER1}
083                               </td>
084                            </mos:tmpl>
085                            <!-- koniec szablon user1 - ⇒ 
086                            <!-- szablon: user2 - ⇒ 
087                            <mos:tmpl name="user2">
 
088                               <td align="center" valign="top">
089                                  {USER2}
090                               </td>
091                             </mos:tmpl>
092                             <!-- koniec szablonu user2 - ⇒ 
093                            </tr>
094                         </table>
095                      </mos:tmpl>
096                      <!-- koniec szablonu user12 - ⇒ 
097                      <!-- tabela glownej zawartosci w centralnej czesci - ⇒ 
098                         <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
099                            <tr>
100                               <td align="left">
101                                  {BODY}
102                               </td>
103                            </tr>
104                         </table>
105                         <!-- koniec tabeli centralnej - glownej zawartosci - ⇒ 
106                      </td>
107                      <!-- koniec: komorka lewa i centralna - ⇒ 
108                      <!-- szablon right dla prawej kolumny - ⇒ 
109                      <mos:tmpl name="right">
110                      <td class="right" align="right" valign="top">
111                         {RIGHT}
112                      </td>
113                      </mos:tmpl>
114                      <!-- koniec szablonu right dla prawej kolumny - ⇒ 
115                   </tr>
116                </table>
117                <!-- koniec 3 kolumn - ⇒ 
118             </td>
119          </tr>
120          <!-- koniec wiersza srodkowego - ⇒ 
121          <!-- wiersz stopki - ⇒ 
122          <!-- szablon footer dla stopki - ⇒ 
123          <mos:tmpl name="footer">
124          <tr>
125             <td>
126             <!-- stopka - ⇒ 
127                <table width="100%" {BORDER} cellspacing="0" cellpadding="0">
128                   <tr>
129                      <td align="center" valign="top">
130                         {FOOTER}
131                      </td>
132                   </tr>
133                </table>
134                <!-- koniec footer - ⇒ 
135             </td>
136          </tr>
137          </mos:tmpl>
138          <!-- koniec szablonu footer - ⇒ 
139       </table>
 
203       </body>
204    </html>
205 </mos:tmpl>
206 <!-- koniec szablonu zwiast_demopl - ⇒    


Zmieniony ( 16.02.2007. )
 
« poprzedni artykuł   następny artykuł »