<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>cojack blog &#187; System szablonów</title>
	<atom:link href="http://www.cojack.pl/kategoria/system-szablonow/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cojack.pl</link>
	<description>Programowanie oraz Open Source powodem do życia</description>
	<lastBuildDate>Fri, 20 Aug 2010 18:16:05 +0000</lastBuildDate>
	<language>PL</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Separated Template</title>
		<link>http://www.cojack.pl/separated-template</link>
		<comments>http://www.cojack.pl/separated-template#comments</comments>
		<pubDate>Tue, 15 Sep 2009 14:14:30 +0000</pubDate>
		<dc:creator>cojack</dc:creator>
				<category><![CDATA[Separated Template]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[separated template]]></category>
		<category><![CDATA[skrypty php]]></category>
		<category><![CDATA[sTemplate]]></category>
		<category><![CDATA[System szablonów]]></category>
		<category><![CDATA[wolność]]></category>

		<guid isPermaLink="false">http://cojack.os-cms.pl/?p=235</guid>
		<description><![CDATA[ Tak więc na phpclasses.org jakiś czas temu pojawiła się nowa klasa o nazwie sTemplate, co lepsze, jest to twór Polaka, co mnie bardzo cieszy a kolejne zdziwienie jakie mnie naszło, że jest to młody chłopak co mnie jeszcze bardziej cieszy, gdyż tacy ludzie są lub będą intelektualną śmietanką jeżeli ...]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="PHP" src="http://cojack.os-cms.pl/wp-content/arch-php.png" alt="" height="100" width="100"> Tak więc na phpclasses.org jakiś czas temu pojawiła się nowa klasa o nazwie <strong>sTemplate</strong>, co lepsze, jest to twór Polaka, co mnie bardzo cieszy a kolejne zdziwienie jakie mnie naszło, że jest to młody chłopak co mnie jeszcze bardziej cieszy, gdyż tacy ludzie są lub będą intelektualną śmietanką jeżeli w dalszym ciągu będą rozwijać swoją wiedzę oraz chcieć poznawać i tworzyć nowe rzeczy. Wracając do rzeczy, autorem tego systemu szablonów jest <em>Sebastian Potasiak</em>, link do jego blogu jest u mnie na stronie zatytułowanej <a href="http://cojack.os-cms.pl/linki">Linki</a>. Do rzeczy z czym to się je? Kolega rozwiązał w dość sprytny sposób ominięcie na wstawianie zmiennych w tpl, czyli jak w itx np {SOME_VARIABLE} lub też w smartach {$some_variable}, przykład:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?xml <span style="color: #000066;">version</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1.0&quot;</span> encoding<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;utf-8&quot;</span>?&gt;</span>
<span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd&quot;&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span> xmlns<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml:<span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pl&quot;</span> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pl&quot;</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=utf-8&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tytul&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tytul&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tresc&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>Jak widać nie ma niczego co by można było parsować, a teraz spójrzmy na to:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
     <span style="color: #b1b100;">include</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./sTemplate.class.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
     <span style="color: #000088;">$tpl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> sTemplate<span style="color: #339933;">;</span>
&nbsp;
     <span style="color: #000088;">$zmienne</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
          <span style="color: #0000ff;">'tytul'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Moja strona'</span><span style="color: #339933;">,</span>
          <span style="color: #0000ff;">'tresc'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'To jest przykładowa treść mojej strony.&lt;br /&gt;Aby zobaczyć więcej wyślij SMS o treści CHWDP na numer PREFIX_997'</span>
     <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
     <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$zmienne</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Co nam to zwróci? A taki kod:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;?xml <span style="color: #000066;">version</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;1.0&quot;</span> encoding<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;utf-8&quot;</span>?&gt;</span>
<span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml-strict.dtd&quot;&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span> xmlns<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml:<span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pl&quot;</span> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pl&quot;</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=utf-8&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tytul&quot;</span>&gt;</span>Moja strona<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tytul&quot;</span>&gt;</span>Moja strona<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
          <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;tresc&quot;</span>&gt;</span>To jest przykładowa treść mojej strony.<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>Aby zobaczyć więcej wyślij SMS o treści CHWDP na numer PREFIX_997<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
     <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>Takie sobie to co? Ja widzę parę problemów, dajmy na to że klasa <em>title</em> używamy do wylistowania artykułów, i jeżeli mielibyśmy ciągle taki sam tytuł to trochę do bani co? ;] Więc prosty system szablonów, na bardzo proste strony. Jak się mają benchmarki, a czort go wie ;] W następnym wpisie przedstawię wyniki.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cojack.pl/separated-template/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>System szablonów ITX cz.2</title>
		<link>http://www.cojack.pl/system-szablonow-itx-cz-2</link>
		<comments>http://www.cojack.pl/system-szablonow-itx-cz-2#comments</comments>
		<pubDate>Sat, 22 Aug 2009 07:56:09 +0000</pubDate>
		<dc:creator>cojack</dc:creator>
				<category><![CDATA[IT/ITX]]></category>
		<category><![CDATA[biblioteka pear]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[pear itx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[System szablonów]]></category>

		<guid isPermaLink="false">http://cojack.os-cms.pl/?p=179</guid>
		<description><![CDATA[Poznaliśmy już podstawy tejże klasy, potrafimy już oddzielać php od html&#8217;a, w b.małym stopniu, ale mimo wszystko coś tam robimy. Dziś postaram się pokazać jak zrobić menu 2 poziomowe w ITX oraz prosty przykład na zarządzanie akcjami z tym systemem szablonów.
Na początku prosty przykład z obsługi akcji.
W pliku index.php po ...]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Pear" src="http://cojack.os-cms.pl/wp-content/pear.png" alt="" height="100" width="100">Poznaliśmy już podstawy tejże klasy, potrafimy już oddzielać php od html&#8217;a, w b.małym stopniu, ale mimo wszystko coś tam robimy. Dziś postaram się pokazać jak zrobić menu 2 poziomowe w ITX oraz prosty przykład na zarządzanie akcjami z tym systemem szablonów.</p>
<p>Na początku prosty przykład z obsługi akcji.<br />
W pliku index.php po utworzeniu obiektu klasy, piszemy taki o to kod:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// (...)</span>
<span style="color: #000088;">$link</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'akcja'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">is_file</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;./<span style="color: #006699; font-weight: bold;">$link</span>.php&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">addBlockFile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;ZMIENNA&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;nasza_nazwa_wymyslona_nowego_bloku&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">&quot;<span style="color: #006699; font-weight: bold;">$link</span>.tpl&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #339933;">@</span><span style="color: #b1b100;">include_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;./<span style="color: #006699; font-weight: bold;">$link</span>.php&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>I gdybyśmy coś takiego napisali, to jesteśmy w trupie, no nasza strona za pomocą ataków z $_GET padła by ofiarą w przeciągu paru dni&#8230; Więc każdy taki kod jest wart mniej niż 0, nie wolno tak pisać! Nie wolno includować plików prosto z adresu! Należy filtrować wszystkie dane przesyłane przez użytkownika!</p>
<p>Tak więc jak to najbezpieczniej zrobić? Dla mnie dobrym wyjściem jest przechowywać nazwy akcji w bazie danych, np tabela:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> <span style="color: #ff0000;">&quot;akcja&quot;</span> <span style="color: #66cc66;">&#40;</span>
  <span style="color: #ff0000;">&quot;id&quot;</span> serial<span style="color: #66cc66;">,</span>
  <span style="color: #ff0000;">&quot;nazwa&quot;</span> varchar<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">64</span><span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">UNIQUE</span> <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span>
<span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<p>I teraz po wybraniu wyniku z tabeli, wiemy czy dana akcja istnieje czy nie, zawsze ktoś do $_GET może dołożyć sobie ../ i będzie katalog wyżej, ale to też należy do naszych obowiązków sprawdzić co jest przesyłane w tym $_GET.</p>
<p>Dobra co jest czym? Tutaj akurat w tym przykładzie nie ma dużo co tłumaczyć, jest tylko jedna metoda.</p>
<p><strong>addBlockFile</strong>, jak widać coś przyjmuje, przyjmuje 3 argumenty, pierwszy to nazwa zmiennej, czyli teraz dowiemy jak się to używa&#8230; </p>
<p>W kodzie templatki, głównej mamy jakąś <strong>ZMIENNA</strong> i ona zostanie zastąpiona przez blok zawartości, z pliku który podajemy jako trzeci argument, 2 argument, natomiast jest to nazwa bloku na którym możemy wykonywać operacje, w pliku index, a nie w pliku includowanym. Plik includowany odpowiada za działania wewnątrz tej templatki, czyli odpowiednie parsowanie itp.</p>
<p>Można to też w inny sposób zrobić, za pomocą metody <strong>addBlock</strong>, ta natomiast, nie parsuje nam zmiennej do bloku, tylko wymienia cały blok <img src='http://www.cojack.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Ale nie wiem jak to działa, bo nigdy nie stosowałem, jedno działa dobrze, to na cholerę mi drugie? ;]</p>
<p>Jak mogła by wyglądać taka templatka, a np system artykułów, np:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!-- BEGIN articles --&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;article-cont&quot;</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>{ARTICLE_NAME}<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;article-box-cont&quot;</span>&gt;</span>{ARTICLE_CONTENT}<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- END articles --&gt;</span></pre></td></tr></table></div>

<p>A plik php? Proszę:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #666666; font-style: italic;">// małe zabezpieczenie przed wchodzeniem bezpośrednio w plik</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">basename</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_SERVER</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'SCRIPT_FILENAME'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'index.php'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #990000;">header</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'location: index.html'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #990000;">exit</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">// należy używać exit po header ponieważ kod się dalej wykona</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #666666; font-style: italic;">/*
 * Pobieramy dane z bazy
 */</span>
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'articles'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVariable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ARTICLE_NAME'</span><span style="color: #339933;">,</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'article_name'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVariable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'ARTICLE_CONTENT'</span><span style="color: #339933;">,</span><span style="color: #990000;">htmlspecialchars_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'article_content'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">ENT_QUOTES</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parseCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>htmlspecialchars_decode</strong> używamy, jeżeli u wcześnie użyliśmy <strong>htmlspecialchars</strong> z ENT_QUOTES i typem kodowania.</p>
<p>Jak zauważyliście, nie zamkłem bloku kodu znacznikiem końca php czyli <strong>?></strong> Dlaczego? A otóż dlatego że sie manuala nie czyta, nie no ja też o tym nie wiedziałem że nie powinno się zamykać php jeżeli plik zawiera sam php, to nie potrzeba dodawać tego znaku, więcej info <a href="http://php.net/manual/en/language.basic-syntax.instruction-separation.php" rel="nofollow">link</a></p>
<p>Ciekawą metodą jest: <strong>replaceBlockfile</strong> np parę razy spotkałem się z problemem, iż pod jedną z pod stron, chciałem mieć inne menu, które było ładowane np w dispatcher (dyspozytor, nie długo o nim opiszę), dość ciekawa funkcja która może nam z tym pomóc. Metoda przyjmuje 3 argumenty, pierwszy z nich to nazwa bloku, czyli np: &#8216;articles&#8217;, nazwa bloku zwierającego się w &lt;!&#8211; &#8211;&gt;, który chcemy zmienić. Drugim argumentem, jest nazwa templatki, np: &#8222;nowosci.tpl&#8221;, którą chcemy załadować zamiast bloku kodu. Trzecim, nie wymaganym argumentem jest wartość boolean, czy chcemy zachować tamten kod, standardowo ustawiony na false, ale możemy ustawić na true, np jeżeli jest to sam tekst, a chcemy coś dopisać do wszystkich tekstów, to możemy coś takiego zastosować, tylko nie wiem co ma jakie pierwszeństwo <img src='http://www.cojack.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>przykład:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// (...)</span>
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">replaceBlockfile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'menu_vertical'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'menu-vertical-2.tpl'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Menu z podmenu</strong><br />
Tak więc najpierw kod, a później wytłumaczenie:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$tablica</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Coś'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Pod coś'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Pod coś 2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Pod coś 3'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
		  <span style="color: #0000ff;">'Coś 2'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Pod coś'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Pod coś 2'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Pod coś 3'</span><span style="color: #009900;">&#41;</span>
		 <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">require_once</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HTML/Template/ITX.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tpl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTML_Template_ITX<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./tpl'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadTemplatefile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'index.tpl'</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'menu1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tablica</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$klucz</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$wartosc</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVariable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'PARENT'</span><span style="color: #339933;">,</span><span style="color: #000088;">$klucz</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wartosc</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'menu2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$wartosc</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$tekst</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVariable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'CHILDREN'</span><span style="color: #339933;">,</span><span style="color: #000088;">$tekst</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parseCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'menu2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parse</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'menu1'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>A teraz kod templatki, html:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #00bbdd;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Strict//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&quot;&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span> xmlns<span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;http://www.w3.org/1999/xhtml&quot;</span> xml:<span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pl&quot;</span> <span style="color: #000066;">lang</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pl&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Menu z submenu w ITX<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=UTF-8&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;content-language&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;pl&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!-- BEGIN menu1 --&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>{PARENT}<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
      <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
	<span style="color: #808080; font-style: italic;">&lt;!-- BEGIN menu2 --&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>{CHILDREN}<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #808080; font-style: italic;">&lt;!-- END menu2 --&gt;</span>
      <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
    <span style="color: #808080; font-style: italic;">&lt;!-- END menu1 --&gt;</span>
  <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>Dobra, teraz wytłumaczenie:</p>
<p>1) Dlaczego <strong>parse()</strong> a nie <strong>parseCurrentBlock()</strong>?<br />
Odp: Dobre pytanie, na prawdę godne uwagi, bardzo dobrze że zwróciłeś na to uwagę, ale pierw chciałbym Ci powiedzieć o Twoich ubezpieczeniach&#8230;<br />
P.S. to drugie nie działa, dlaczego? A skąd to ja mam wiedzieć <img src='http://www.cojack.pl/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>2) Wszystkie inne metody już zostały przetłumaczone, wystarczy przeanalizować działanie dwóch pętli foreach, a to już na zadanie domowe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cojack.pl/system-szablonow-itx-cz-2/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>System szablonów ITX</title>
		<link>http://www.cojack.pl/system-szablonow-itx</link>
		<comments>http://www.cojack.pl/system-szablonow-itx#comments</comments>
		<pubDate>Sun, 28 Jun 2009 17:43:07 +0000</pubDate>
		<dc:creator>cojack</dc:creator>
				<category><![CDATA[IT/ITX]]></category>
		<category><![CDATA[biblioteka pear]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[pear itx]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php a html]]></category>
		<category><![CDATA[skrypty php]]></category>
		<category><![CDATA[System szablonów]]></category>

		<guid isPermaLink="false">http://cojack.os-cms.pl/?p=21</guid>
		<description><![CDATA[Tak więc zacznijmy od tego, że należy sprawdzić naszą bibliotekę PEAR, PEAR jest to zbiór rozszerzeń dla PHP. Można to rozumieć na dwojaki sposób, ale należy w taki że jest to repozytorium (zbiór, miejsce) gotowych skryptów (klas) opublikowanych na licencji GPL lub pochodnych. A teraz do rzeczy w konsoli wykonujemy ...]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="Pear" src="http://cojack.os-cms.pl/wp-content/pear.png" alt="" height="100" width="100">Tak więc zacznijmy od tego, że należy sprawdzić naszą bibliotekę PEAR, PEAR jest to zbiór rozszerzeń dla PHP. Można to rozumieć na dwojaki sposób, ale należy w taki że jest to repozytorium (zbiór, miejsce) gotowych skryptów (klas) opublikowanych na licencji GPL lub pochodnych. A teraz do rzeczy w konsoli wykonujemy polecenie</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">pear list</pre></div></div>

<p>To polecenie powinno nam zwrócić mniej więcej taki wynik:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="powershell" style="font-family:monospace;">Installed packages<span style="color: pink;">,</span> channel pear.php.net:
<span style="color: pink;">=========================================</span>
Package             Version State
Archive_Tar         1.3.3   stable
Console_Getopt      1.2.3   stable
HTML_Common         1.2.5   stable
HTML_QuickForm      3.2.11  stable
HTML_Template_Flexy 1.3.9   stable
HTML_Template_IT    1.2.1   stable
PEAR                1.8.1   stable
Structures_Graph    1.0.2   stable
XML_Util            1.2.1   stable</pre></td></tr></table></div>

<p>Oczywiście nie powinniście mieć HTML_Template_IT, ale jeżeli macie, pomińcie dalszą część instalacji.</p>
<p><strong>Instalacja</strong><br />
Żeby zainstalować pakiet z biblioteki PEAR, należy uzyskać prawa administratora, ja używam archlinuxa, przez co u mnie uzyskanie praw administratora wykonuje się przez polecenie:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">su</pre></div></div>

<p>w zależności od dystrybucji, może to być też również</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">sudo su</pre></div></div>

<p>Po wpisaniu hasła, wydajemy polecenie:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">pear update<span style="color: pink;">-</span>channels</pre></div></div>

<p>być może będzie trzeba zrobić coś innego, ale czytajcie logi z konsoli, i na pewno przejdziecie ten etap. Następnie wpisujemy:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">pear install HTML_Template_IT</pre></div></div>

<p>I teraz plus dla Linuxa, linux sam sobie rozwiąże zależności wśród pakietów, co załatwia za nas instalowanie dodatkowych pakietów które musielibyśmy sami rozwiązać (czytaj ściąganie ręcznie z strony pear.php.net reszty paczek). Dobra mamy już to czego nam potrzeba, czyli system szablonów ITX. Dobrym też rozwiązaniem jest upgrejd pozostałych pakietów, jeżeli mamy jakieś stare, możemy to łatwo i szybko rozwiązać wpisując polecenie:</p>

<div class="wp_syntax"><div class="code"><pre class="powershell" style="font-family:monospace;">pear upgrade<span style="color: pink;">-</span>all</pre></div></div>

<p>Teraz możemy przejść do części kulminacyjnej, czyli implementacji ITX.</p>
<p><strong>Sposób użycia systemu szablonów ITX</strong><br />
Tworzymy sobie jakiś plik, np index.php, i zaczynamy kodzić nasz pierwszy skrypt z użyciem ITX:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'HTML/Template/ITX.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># wczytujemy klase bazową
</span><span style="color: #000088;">$tpl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTML_Template_ITX<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./templates'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># do konstruktora podajemy ścieżkę w której znajduje się nas szablon
</span><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadTemplatefile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'index.tpl'</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># wczytujemy nasz plik z templatką
</span><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'start'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># zaczynamy blok do parsowania
</span><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVariable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'imie'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Andrzej'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># parsujemy zmienna imie na tekst Andrzej
</span><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parseCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'start'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;"># dobrym nawykiem jest dodawanie nazwy bloku
</span><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p><strong>Dla totalnie zielonych</strong> (nie chcesz nie czytaj)</p>
<p>Mamy już gotowy plik w którym będziemy parsować plik z templatką, teraz troche wyjaśnień co do metod</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tpl</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> HTML_Template_ITX<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'./templates'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>W tym momencie tworzymy obiekt klasy HTML_Template_ITX i musimy do konstruktora klasy wysłać ścieżkę w której mamy nasze pliki z szablonami, <em>./</em> mówi nam że jest to katalog z którego wykonujemy skrypt, następnie folder templates, w którym mamy nasz plik z szablonem. Nie ma innej możliwości podania klasie lokalizacji folderu z szablonami, więc należy o tym pamiętać.<br />
Następna linijka:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadTemplatefile</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'index.tpl'</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Tutaj natomiast podajemy nazwę szablonu którego ma użyć w danym skrypcie, funkcja loadTemplatefile jak widać pobiera 3 argumenty, pierwszy to nazwa templatki jako string, druga natomiast przyjmuje wartości boolean, czyli true lub false, dla <em>true</em> usuwa nieznane zmienne z pliku z szablonem, czyli jak damy jakąś zmienną {KTOS} a nie nadamy jej wartości poprzez setVariable, to parses usunie ją, dla <em>false</em> parses zostawi zmienną i wyświetli się nam w postaci {KTOS}, trzeci argument, też przyjmuje wartości boolean, odpowiada za parsowanie bloków w sensie usuwa lub zostawia bloki, już tłumaczę, dla <em>true</em> parser usunie bloki nie dotknięte przez funkcję setCurrentBlock(), lub touchBlock() lub parse(). Ale do tego wrócimy. Dla <em>false</em> zostawi te bloki,  i je wyświetli (manual o tym nic nie pisze, ale tak jest <img src='http://www.cojack.pl/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Idźmy dalej:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'start'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Tutaj jak sama nazwa funkcji wskazuje, ustawiamy jaki blok w templatce chcemy parsować, trzeba wziąć pod uwagę, to że wielkość słów nie ma znaczenia, lecz nie mogą się w nazwie bloku znaleźć Polskie znaki diakrytyczne. Później pokaże jak to można zrobić, tak więc czy napiszemy StArT, czy START, czy jakkolwiek inaczej parser nam to ładnie przewinie, dodam że do nazw można dodawać liczby 0-9, _ (podkreślnik), &#8211; (minus) oraz . (kropka).</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setVariable</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'imie'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'Andrzej'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Tutaj natomiast mamy do czynienia z ustawianiem zmiennej <em>imie</em> na string Andrzej, zostanie ona podmieniona a później wyświetlona, należy jednak zapamiętać że nie powinno się stosować takich samych nazw bloków jak i zmiennych, z doświadczenia wiem, że może to nam narobić boruty, i nawet jeżeli mamy 2 bloki, każdy z bloków nazywa się inaczej, to <u>nie wolno stosować takich samych nazw zmiennych</u> w tych blokach! Bardzo ważne i należy się tego trzymać!</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">parseCurrentBlock</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'start'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Tutaj mamy dziwną sprawę, ponieważ funkcja jest nazwana jako void, co jest bardzo dziwne, ponieważ funkcje typu void niczego nie zwracają, a tu i tak funkcja zwraca nam true więc wartość boolean przy poprawnym rezultacie, no i w przeciwnym wypadku FALSE lub IT_Error, sprawdziłem IT_Error.php, dziedziczy z klasy PEAR_Error, w której nie ma wyjątków, więc co jak co try {} catch {} nam nie pomogą. Dostaniemy gołym php&#8217;owym błędem w twarz. Co do podawania nazwy bloku który parsujemy, nie daje on nic, ale daje nam, jeżeli mamy np parę zagnieżdżonych bloków w sobie (np podwójne Menu, potrójne, poczwórne &#8230;), to później nam łatwiej jest się odnaleźć który to już blok zamknęliśmy.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tpl</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Funkcja ta, może ale nie musi przyjmować wartość typu string, która jest nazwą bloku, czyli parsujemy jakąś templatkę i nie chcemy parsować wszystkiego na raz, tylko pojedyncze bloki bo takie mamy widzimisię, to podajemy jako string nazwę każdego z poszczególnych bloków. Jeżeli natomiast zastosujemy na końcu po implementacji całego szablonu, parser przeleci wszystkie bloki, i je zwróci jako gotowy kod HTML&#8217;a. Btw kolejna funkcja typu void.</p>
<p><strong>Plik szablonu</strong></p>
<p>Przerobiliśmy cały kod z pliku index.php, teraz zostało nam zobaczyć jak wygląda, teraz przyszedł czas na szablon.<br />
Tak więc nazwaliśmy sobie szablon: <u>index.tpl</u>, tak więc w katalogu <u>templates</u> tworzymy sobie ten plik szablonu a w nim następujący kod:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Content-Type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=UTF-8&quot;</span> &gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>System szablonów ITX<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;!-- BEGIN start --&gt;</span>
Witaj {imie}!
<span style="color: #808080; font-style: italic;">&lt;!-- END start --&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

<p>Jak już zdążyliście zauważyć bloki zaczyna się komentarzami w HTML&#8217;u, wyraźnie zaznaczamy rozpoczęcie kodu bloku przez słowo <u>BEGIN</u> i zakończenie <u>END</u>, zmienne wstawiamy w znaki klamer <strong>{ }</strong><br />
Teraz to już nam nic nie zostało do zrobienia jak tylko odpalenie skryptu, i zobaczyć jak pięknie działa. W ten oto sposób oddzieliliśmy kod PHP od kodu HTML.</p>
<p>W następnych częściach więcej przykładów oraz opisu funkcji.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cojack.pl/system-szablonow-itx/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
