<?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>Nasza Kohana &#187; template</title>
	<atom:link href="http://nasza.kohanaphp.pl/tag/template/feed/" rel="self" type="application/rss+xml" />
	<link>http://nasza.kohanaphp.pl</link>
	<description></description>
	<lastBuildDate>Sat, 02 Jan 2010 16:27:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Widoków ciąg dalszy</title>
		<link>http://nasza.kohanaphp.pl/widokow-ciag-dalszy/</link>
		<comments>http://nasza.kohanaphp.pl/widokow-ciag-dalszy/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 13:30:36 +0000</pubDate>
		<dc:creator>Zepco</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[template]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[widok]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/?p=359</guid>
		<description><![CDATA[Wiemy już jak utworzyć i wyświetlić prosty widok, pora przejść do bardziej złożonych zagadnień.

Fabryka widoków
Poza tworzeniem obiektów poprzez operator new istnieje alternatywna metoda. Jest to wzorzec projektowy nazywany fabryką abstrakcyjną. Więcej o tym wzorcu możesz przeczytać na Wikipedii, my natomiast skupimy się na tym co nam daje takie rozwiązanie w przypadku widoków.
Sam obiekt tworzymy wywołując [...]]]></description>
			<content:encoded><![CDATA[<p>Wiemy już jak utworzyć i wyświetlić prosty widok, pora przejść do bardziej złożonych zagadnień.</p>
<p><span id="more-359"></span></p>
<h1>Fabryka widoków</h1>
<p>Poza tworzeniem obiektów poprzez operator <b>new</b> istnieje alternatywna metoda. Jest to wzorzec projektowy nazywany fabryką abstrakcyjną. Więcej o tym wzorcu możesz przeczytać na <a href="http://pl.wikipedia.org/wiki/Fabryka_abstrakcyjna" target="_blank">Wikipedii</a>, my natomiast skupimy się na tym co nam daje takie rozwiązanie w przypadku widoków.</p>
<p>Sam obiekt tworzymy wywołując statyczną metodę <b>factory()</b> z podobnymi parametrami co konstruktor:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Zastanawiasz się pewnie czym to się różni od operatora <b>new</b>, bo przecież oba tworzą i zwracają obiekt klasy View. Oczywiście jest tak, z jedną różnicą. Wywołanie metody fabryki pozwala na łańcuchowanie (chaining) metod tej klasy bezpośrednio po jej utworzeniu.</p>
<p>Tradycyjną metodą:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> View<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Strona główna'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'news'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$news</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>To samo z użyciem fabryki:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Strona główna'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'news'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$news</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Jak widzisz drugi zapis jest krótszy i bardziej czytelny.</p>
<h1>Rozszerzone dodawanie zmiennych</h2>
<h3>Metoda set()</h3>
<p>W poprzednim artykule zmienne lokalne przekazywaliśmy w poniższy sposób:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">title</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Witaj!'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Podobne działanie posiada metoda <b>set()</b>, której zapis jest następujący:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Witaj!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// lub</span>
<span style="color: #0000ff;">$msg</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Witaj!'</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$msg</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Jako pierwszy parametr podajemy nazwę zmiennej, której będziemy używać wewnątrz widoku, natomiast drugi parametr jest jej wartością przekazaną bezpośrednio bądź poprzez zmienną.</p>
<h3>Metoda set_global()</h3>
<p>Jak sama nazwa wskazuje, widok otrzymuje zmienną o zasięgu globalnym, przez co może być wykorzystywana zarówno w widoku głównym jednocześnie poprzez jego podwidoki.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_global</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'zmienna_widoku'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$zmienna</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Więcej na temat zasięgu zmiennych przeczytasz w dalszej części artykułu.</p>
<h3>Metoda bind()</h3>
<p>Podobnie jak metoda set, bind działa w obrębie widoku, w którym został wywołany. Różnica polega jednak na tym, że zamiast wartości, przekazywana jest referencja do zmiennej. Co to oznacza w praktyce? Spójrz na poniższy przykład:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$sample_var</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_set'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$sample_var</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_bind'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$sample_var</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$sample_var</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$sample_var</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">30</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Widok:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;">Set = <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$sample_set</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;br /&gt;
Bind = <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$sample_bind</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Wynikiem powyższego będzie:</p>
<blockquote><p>Set = 10<br />
Bind = 20</p></blockquote>
<p>W obu przypadkach przekazana została zmienna <code>$sample_var</code>, której wartość początkowa wynosi <code>10</code>. Metoda <b>set</b> przekazała aktualną w danym  momencie wartość zmiennej <code>$sample_var</code> i na tym skończyła się jej rola. Bind natomiast dała wskazanie na samą zmienną, co oznacza, że wszystkie operacje wykonane na  <code>$sample_var</code> po przypisaniu jej do widoku ale przed wywołaniem metody <b>render</b> zostaną uwzględnione a wyświetlona będzie ostatnia zmiana. Można to wykorzystać na przykład w przypadku gdy zmienna jeszcze nie została zainicjowana.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bind</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_bind'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$sample_var</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$sample_var</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">20</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</p>
<h1>Widoki, podwidoki</h1>
<p>Większość witryn składa się z elementów, które powtarzają się na każdej z podstron: nagłówek z logo, menu, stopka. Natomiast zmianom ulega tylko środkowa część prezentacji. Aby uniknąć ciągłego przepisywania tej samej zawartości do wszystkich widoków, możliwe jest stworzenie widoku głównego, szablonowego, do którego jako zmienna przekazywany jest kolejny widok. Zobrazuję to na przykładowym kodzie:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> View<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">content</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> View<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Można to również zapisać następująco:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> View<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$home</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> View<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">content</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">$home</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Pamiętaj jednak, że metodę render stosujemy tylko dla widoku bazowego, który jest najwyżej w hierarchii, pozostałe będą  przetwarzane automatyczne.</p>
<p>Przykładowe pliki widoków wyglądają następująco:</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-brief" style="font-family:monospace;">&lt;!-- application/views/template.php --&gt;
&lt;html&gt;
&lt;body&gt;
	<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$content</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #339933;">&lt;!--</span> application<span style="color: #339933;">/</span>views<span style="color: #339933;">/</span>home<span style="color: #339933;">.</span>php <span style="color: #339933;">--&gt;</span>
<span style="color: #004000;">Witaj</span><span style="color: #339933;">,</span> jestem Kohany<span style="color: #009900;">&#40;</span>m<span style="color: #009900;">&#41;</span> widokiem<span style="color: #339933;">!</span></pre></td></tr></table></div>

<p>Efektem powyższych operacji będzie następujący kod html postaci:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!-- application/views/template.php --&gt;
&lt;html&gt;
&lt;body&gt;
	&lt;!-- application/views/home.php --&gt;
	Witaj, jestem Kohany(m) widokiem!
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Co w oknie przeglądarki przełoży się na napis znany już z poprzedniej części kursu:</p>
<blockquote><p>Witaj, jestem Kohany(m) widokiem!</p></blockquote>
<h1>Zasięg zmiennych</h1>
<h3>Lokalne</h3>
<p>Zmienna ustawiona poprzez metodę <b>set()</b> bądź poprzez bezpośrednie przypisanie zmiennej do obiektu działa tylko w obrębie danego widoku i nie jest widoczny poza niego. Czyli jeśli utworzymy dwa widoki, np. widok1 oraz widok2 i w obu przypiszemy zmienną o tej samej nazwie, np. $zmienna, to będą to dwie odseparowane od siebie wartości.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view1</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widok1'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'zmienna'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'pierwszy'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #0000ff;">$view2</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'widok2'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'zmienna'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'drugi'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>Globalne</h3>
<p>W przypadku użycia metody <b>set_global()</b> zmienna ustawiona będzie dostępna w każdym widoku.<br />
Przykładowo mamy w kontrolerze widok $view i dla niego przypisaną zmienną globalną <code>$test_var</code></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'view_test'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_global</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test_var'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Test!'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test1'</span><span style="color: #339933;">,</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test1'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test2'</span><span style="color: #339933;">,</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test2'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Oraz widoki:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!-- application/views/view_test.php --&gt;
	&lt;?php echo $test_var ?&gt;&lt;br /&gt;	&lt;!-- wyświetla zmienną w widoku głównym --&gt;
	&lt;?php echo $test1 ?&gt;&lt;br /&gt;	&lt;!-- wyświetla podwidok test1 --&gt;
	&lt;?php echo $test2 ?&gt;&lt;br /&gt;	&lt;!-- wyświetla podwidok test2 --&gt;</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!-- application/views/test1.php --&gt;
&lt;?php echo $test_var ?&gt;</pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!-- application/views/test2.php --&gt;
&lt;?php echo $test_var ?&gt;</pre></td></tr></table></div>

<p>Efektem tych poleceń jest wyświetlenie 3 razy tej samej zmiennej <code>$test_var</code>.</p>
<blockquote><p>
Test!<br />
Test!<br />
Test!
</p></blockquote>
<h3>Dostęp poprzez $this</h3>
<p>Widoki w Kohanie są tak skonstruowane, że zawierają się w tej samej przestrzeni nazw co kontroler je wykonujący. Daje to nam dostęp do pól i metod tego kontrolera poprzez zmienną <b>$this</b>.</p>
<p>Przykładowo mamy kontroler test:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Test_Controller <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #0000ff;">$sample_var</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Hello!'</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'test'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Oraz widok test.php:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;">Zmienna sample_var = <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sample_var</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Wykonanie powyższego kontrolera da nam wynik:</p>
<blockquote><p>Zmienna sample var = Hello!</p></blockquote>
<p>Ta metoda dostępu do danych nie jest zalecani można ją powodzeniem zastąpić wcześniej wymienionymi metodami: <b>set()</b>, <b>set_global()</b>, <b>bind()</b>.</p>
<h1>Pozostałe operacje na widokach</h1>
<h3> Metoda set_filename()</h3>
<p>Metoda <b>set_filename()</b> pozwala na przypisanie pliku do widoku w przypadku gdy nie został on podany w momencie tworzenia obiektu, bądź zmianę wcześniej przypisanej nazwy.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Witaj!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">...</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_filename</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Witaj!'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">...</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_filename</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'another_template'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Wszystkie zmienne przypisane do widoku będą użyte w ostatnio przypisanej nazwie pliku i ten plik widoku zostanie wyświetlony.</p>
<p>Z powyższej metody można korzystać na przykład w przypadku sprawdzania czy jest ktoś zalogowany. Jeśli warunek będzie spełniony zostanie utworzony widok z interesującymi nas danymi. W przeciwnym wypadku nazwa pliku zostanie zmieniona na widok z komunikatem błędu.</p>
</pre>

<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
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'template'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// sprawdź czy użytkownik jest zalogowany</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$logged_in</span><span style="color: #009900;">&#41;</span>
<span style="color: #666666; font-style: italic;">// jeśli tak, wykonaj operacje na widoku</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'title'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Tajne dane'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #666666; font-style: italic;">// jeśli nie, pokaż komunikat błędu</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">set_filename</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'not_logged'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">render</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h3>Metoda is_set()</h3>
<p>Jeśli nie masz pewności czy dana zmienna została przypisana już do widoku, to można to sprawdzić właśnie za pomocą metody <b>is_set()</b>. Wystarczy podać jako parametr nazwę zmiennej a funkcja sprawdzi czy jest zmienną lokalną danego widoku bądź też globalną dla wszystkich. Jako wynik otrzymasz wartość logiczną.</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-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_view'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_var'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Kohana'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">is_set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_var'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Zmienna istnieje!'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Zmienna nie istnieje!'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Ponieważ wcześniej zadeklarowaliśmy zmienną <code>sample_var</code>, to metoda <b>is_set()</b> zwróci wartość logiczną <b>true</b>, w wyniku czego otrzymamy komunikat:</p>
<blockquote><p>Zmienna istnieje!</p></blockquote>
<p>Możliwe jest też sprawdzenie kilku zmiennych na raz, wtedy jako parametr podajemy tablicę z ich nazwami</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$view</span> <span style="color: #339933;">=</span> View<span style="color: #339933;">::</span><span style="color: #004000;">factory</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_view'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #339933;">-&gt;</span><span style="color: #004000;">set</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_var'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Kohana'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">echo</span> Kohana<span style="color: #339933;">::</span><span style="color: #004000;">debug</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$view</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">is_set</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'sample_var'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'another_var'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Wynik:</p>
<blockquote><p>(array) Array<br />
(<br />
	[sample_var] => 1<br />
	[another_var] =><br />
)
</p></blockquote>
<p>Jak widać powyżej metoda <b>is_set()</b> zwróci tablicę, gdzie kluczem jest nazwa zmiennej, któremu przypisana będzie wartość logiczna mówiąca o istnieniu danej zmiennej.</p>
]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/widokow-ciag-dalszy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
