<?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</title>
	<atom:link href="http://nasza.kohanaphp.pl/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>
		<item>
		<title>Widok</title>
		<link>http://nasza.kohanaphp.pl/widok/</link>
		<comments>http://nasza.kohanaphp.pl/widok/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 00:09:13 +0000</pubDate>
		<dc:creator>Zepco</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[widok]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/?p=288</guid>
		<description><![CDATA[Jak zapewne już wiesz, według wzorca MVC nie wolno wyświetlać danych bezpośrednio w kontrolerze. Ta działka należy do widoków (views), którymi zajmiemy się w tej części artykułu.

Tworzenie prostego widoku
Za operacje na widokach odpowiedzialna jest klasa View, zatem, aby powstał widok wystarczy stworzyć obiekt tej klasy.

$widok = new View;

Konstruktor View może przyjmować do trzech parametrów:


		nazwa pliku [...]]]></description>
			<content:encoded><![CDATA[<p>Jak zapewne już wiesz, według wzorca MVC nie wolno wyświetlać danych bezpośrednio w kontrolerze. Ta działka należy do widoków (views), którymi zajmiemy się w tej części artykułu.</p>
<p><span id="more-288"></span></p>
<h1>Tworzenie prostego widoku</h1>
<p>Za operacje na widokach odpowiedzialna jest klasa View, zatem, aby powstał widok wystarczy stworzyć obiekt tej klasy.</p>

<div class="wp_syntax"><div class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$widok</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> View<span style="color: #339933;">;</span></pre></div></div>

<p style="margin-bottom: 0cm;">Konstruktor View może przyjmować do trzech parametrów:</p>
<ol>
<li>
		<b>nazwa pliku</b> – nazwa pliku widoku bez rozszerzenia (patrz parametr rozszerzenie), należy pamiętać, że nie może ona zawierać rozszerzenia pliku;
	</li>
<li>
		<b>dane</b> – zmienne w formie tablicy, które będą użyte w widoku;
	</li>
<li>
		<b>rozszerzenie</b> – standardowym rozszerzeniem plików widoków jest <em>.php</em>, ale parametr ten pozwala na wczytanie pliku o innym rozszerzeniu, np. <em>.tpl, .html </em><span style="font-style: normal;">etc.</span>.
	</li>
</ol>
<p style="margin-bottom: 0cm;">W związku z powyższym istnieją jeszcze 4 warianty na utworzenie widoku:</p>
<ol>
<li> sam widok o nazwie pliku 	moj_widok.php

<div class="wp_syntax"><div 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;">'moj_widok'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

</li>
<li>
		widok z przekazanymi danymi z tablicy $dane</p>

<div class="wp_syntax"><div 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;">'moj_widok'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$dane</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

</li>
<li>
		widok o nazwie pliku moj_widok.html z danymi</p>

<div class="wp_syntax"><div 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;">'moj_widok'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$dane</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'html'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

</li>
<li>
		widok o nazwie pliku moj_widok.html bez danych</p>

<div class="wp_syntax"><div 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;">'moj_widok'</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">null</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'html'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

</li>
</ol>
<h1 class="western">Gdzie znajdują się pliki widoku?</h1>
<p>Pliki widoku znajdują się w katalogu <em>views</em>. Zgodnie ze wspomnianym wcześniej kaskadowym systemem plików może to być system/views, models/[nazwa modelu]/views, application/views.</p>
<p>W przypadku naszej aplikacji będziemy umieszczać je w ostatnim z wymienionych katalogów, czyli application/views. Widoki mogą być także zawarte w podkatalogach katalogu views, wtedy przy tworzeniu obiektu należy podać względną ścieżkę do pliku, np.:</p>

<div class="wp_syntax"><div class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$widok</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;">'podkatalog/moj_widok'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p style="margin-bottom: 0cm;"><span style="font-style: normal;">Zatem utwórzmy plik home.php w katalogu application/views. Dla przykładu umieścimy tam zmodyfikowany tekst kontrolera z poprzedniego wpisu.</span></p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">Witam - jestem Kohany(m) widokiem! :)</pre></div></div>

<h1>Wyświetlenie widoku</h1>
<p>No dobrze, wiemy jak utworzyć widok, wiemy gdzie go umieścić, ale żeby zobaczyć efekt należy go jeszcze wyświetlić.</p>
<p>Do tego celu służy metoda <b>render()</b>.</p>
<p>Metoda ta przyjmuje dwa parametry. Drugi chwilowo możemy pominąć <img src='http://nasza.kohanaphp.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Pierwszy z nich natomiast jest wartością logiczną decydującą o tym czy wysłać bezpośrednio zawartość widoku do przeglądarki, np.</p>

<div class="wp_syntax"><div 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;">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></div></div>

<p>Spowoduje wyświetlenie widoku bez dodatkowych zabiegów, natomiast taki zapis</p>

<div class="wp_syntax"><div class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #0000ff;">$output</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: #009900;">&#41;</span><span style="color: #339933;">;</span>  <span style="color: #666666; font-style: italic;">// lub $output = $view-&gt;render(false)</span>
<span style="color: #990000;">echo</span> <span style="color: #0000ff;">$output</span> <span style="color: #666666; font-style: italic;">// dopiero tutaj wyświetlamy widok</span></pre></div></div>

<p>spowoduje przekazanie zawartości widoku do zmiennej $output ale nie wysyła go do przeglądarki, dopiero później (np. za pomocą funkcji echo) możemy ja wyświetlić.</p>
<p>Jak to w praktyce będzie wyglądać? Posłużymy się wcześniej utworzonym kontrolerem home.</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-brief" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SYSPATH'</span><span style="color: #009900;">&#41;</span> OR <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No direct access allowed.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">class</span> Home_Controller <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</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> <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>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Powyższy kod spowoduje wyświetlenie napisu z naszego widoku, czyli:</p>
<blockquote><p>Witam &#8211; jestem Kohany(m) widokiem! <img src='http://nasza.kohanaphp.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<h1>Dodanie zmiennych</h1>
<p>Widok już mamy, pora by stał się bardziej dynamiczny. Przekażmy mu jakieś dane do wyświetlenia.<br />
Dane do widoku przekazujemy tak, jakbyśmy chcieli zapisać jakąś wartość własności obiektu.</p>
<p>Na przykład, mamy widok $view i chcemy mu utworzyć zmienną $title o wartości „Witaj!”. Nic prostszego!</p>

<div class="wp_syntax"><div 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></div></div>

<p>Podobnie można postąpić w przypadku tablic:</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
</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;">articles</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
	<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'title'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Pierwszy wpis'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'content'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Lorem ipsum dolor sit amet, consectetur adipiscing elit.'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'author'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Kohana'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'date'</span> 		<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'22-03-2009'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
	<span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span>
		<span style="color: #0000ff;">'title'</span>		<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Kolejny wpis'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'content'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Nulla et massa vitae erat placerat consequat.'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'author'</span>	<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Kohana'</span><span style="color: #339933;">,</span>
		<span style="color: #0000ff;">'date'</span> 		<span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'23-03-2009'</span><span style="color: #339933;">,</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h1>Wyświetlanie zmiennych</h1>
<p>Widoki w Kohanie są zwykłymi plikami PHP, także wyświetlanie zmiennych nie wymaga specjalnych zabiegów czy też dodatkowych znaczników.<br />
W przypadku powyższych zmiennych będzie to wyglądało następująco:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$title</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
&lt;h1&gt;Artykuły&lt;/h1&gt;
&nbsp;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$articles</span> <span style="color: #b1b100;">as</span> <span style="color: #0000ff;">$article</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
	&lt;h2&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$article</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'title'</span><span style="color: #009900;">&#93;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h2&gt;
	&lt;h3&gt;Autor: <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$article</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'author'</span><span style="color: #009900;">&#93;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h3&gt;
	&lt;h4&gt;Data: <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$article</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'date'</span><span style="color: #009900;">&#93;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/h4&gt;
	&lt;p&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">echo</span> <span style="color: #0000ff;">$article</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'content'</span><span style="color: #009900;">&#93;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/p&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Czego efektem będzie poniższy wydruk:</p>
<blockquote><p>
Witaj!</p>
<h1>Artykuły</h1>
<h2>Pierwszy wpis</h2>
<h3>Autor: Kohana</h3>
<h4>Data: 22-03-2009</h4>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
<h2>Kolejny wpis</h2>
<h3>Autor: Kohana</h3>
<h4>Data: 23-03-2009</h4>
<p>Nulla et massa vitae erat placerat consequat.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/widok/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Startujemy! Pierwszy kontroler</title>
		<link>http://nasza.kohanaphp.pl/startujemy-pierwszy-kontroler/</link>
		<comments>http://nasza.kohanaphp.pl/startujemy-pierwszy-kontroler/#comments</comments>
		<pubDate>Sun, 22 Feb 2009 09:50:32 +0000</pubDate>
		<dc:creator>Insert</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[akcja]]></category>
		<category><![CDATA[kontroler]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/?p=130</guid>
		<description><![CDATA[Po skonfigurowaniu aplikacji czas, żeby efekty naszej pracy w końcu zaczęły być widoczne. Czas na pierwszy kontroler!

Zaczynamy
Aby napisać swój pierwszy kontroler należy wejść do katalogu /application/controllers/. Tam, jak pisaliśmy już w rozdziale Struktura i nazewnictwo znajdują się wszystkie kontrolery naszej aplikacji.
Obecnie z pewnością widzisz 2 pliki, welcome.php oraz examples.php. Są to kontrolery predefiniowane przez zespół [...]]]></description>
			<content:encoded><![CDATA[<p>Po skonfigurowaniu aplikacji czas, żeby efekty naszej pracy w końcu zaczęły być widoczne. Czas na pierwszy kontroler!<br />
<span id="more-130"></span></p>
<h2>Zaczynamy</h2>
<p>Aby napisać swój pierwszy kontroler należy wejść do katalogu <code>/application/controllers/</code>. Tam, jak pisaliśmy już w rozdziale <a href="http://nasza.kohanaphp.pl/struktura-kohany/">Struktura i nazewnictwo</a> znajdują się wszystkie kontrolery naszej aplikacji.</p>
<p>Obecnie z pewnością widzisz 2 pliki, <a href="http://dev.kohanaphp.com/browser/trunk/application/controllers/welcome.php">welcome.php</a> oraz <a href="http://dev.kohanaphp.com/browser/trunk/application/controllers/examples.php">examples.php</a>. Są to kontrolery predefiniowane przez zespół rozwojowy Kohany po to, abyś mógł sam lepiej zrozumieć i rozeznać się w szkielecie aplikacji. Ten pierwszy służy do wyświetlenia strony startowej, którą widzisz bezpośrednio po zainstalowaniu Kohany (i usunięciu pliku <a href="http://dev.kohanaphp.com/browser/trunk/install.php">install.php</a> z głównego katalogu). Drugi zaś odpowiada za wyświetlenie strony z przykładami (jest ona dostępna pod adresem <a href="http://localhost/kohana/index.php/examples/">http://localhost/kohana/index.php/examples</a>, jeżeli instalowałeś Kohanę w nadrzędnej ścieżce swojego serwera HTTP, w podkatalogu /kohana). Oba te kontrolery nie będą nam potrzebne, ale warto je zachować na później (być może jakieś przykładowe rozwiązanie okaże się w przyszłości pomocne).</p>
<p><strong>Standardy tworzenia kontrolerów</strong></p>
<p>Z przytoczonego wcześniej rozdziału <a href="http://nasza.kohanaphp.pl/struktura-kohany/">Struktura i nazewnictwo</a> musisz zapamiętać, że:</p>
<ul>
<li>nazwa pliku musi być zapisana małymi literami, np. <code>artykuly.php</code>;</li>
<li>nazwa kontrolera musi się pokrywać z nazwą pliku , dodatkowo kończy się sufiksem _Controller (np. Artykuly_Controller). Pierwsze litery wyrazów są duże, pozostałe małe;</li>
<li>musi dziedziczyć po klasie Controller bądź jednym z jego potomków;</li>
<li>standardowo wywoływana jest funkcja index (jeśli nie podano inaczej).</li>
</ul>
<h2>Napiszmy coś wreszcie!</h2>
<p>Pierwszy kontroler będzie odpowiadał za wyświetlenie strony głównej naszego bloga. Jeżeli czytałeś rozdział <a href="http://nasza.kohanaphp.pl/instalacja-i-konfiguracja/">Instalacja i konfiguracja</a> wiesz już, że istnieje taki plik konfiguracyjny jak <a href="http://dev.kohanaphp.com/browser/trunk/system/config/routes.php"><code>routes.php</code></a>, a w nim przechowywana jest linijka dotycząca kontrolera domyślnego (czyli nazwy kontrolera, który zostanie wywołany przy bezpośrednim otwarciu strony głównej naszej aplikacji w przeglądarce internetowej). Dla naszych potrzeb głównym kontrolerem, który będzie wczytywany domyślnie jako pierwszy będzie kontroler o nazwie home. Dlatego też należy dokonać zmiany wpisu, z postaci obecnej:</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;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'_default'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'welcome'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Do postaci:</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;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'_default'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'home'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Teraz, po odświeżeniu strony zobaczymy błąd. Jest on jednak w pełni uzasadniony &#8211; nie ma kontrolera o nazwie home, którego przy odświeżeniu witryny szukał przed chwilą skonfigurowany przez Ciebie router. Jeżeli go nie ma &#8211; stwórzmy go!</p>
<p><strong>Kontroler strony głównej &#8211; &#8220;home&#8221;</strong></p>
<p>Tworzymy zatem kontroler o nazwie pliku <code>home.php</code>, który ma poniższą zawartość:</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-brief" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SYSPATH'</span><span style="color: #009900;">&#41;</span> OR <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No direct access allowed.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Home_Controller <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</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: #990000;">echo</span> <span style="color: #0000ff;">'Witam - jestem Kohany(m) kontrolerem! :)'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Odśwież teraz stronę&#8230; Tak &#8211; kontroler zadziałał. W Kohanie kontrolery mapowane są jak podstrony &#8211; dlatego ten sam kontroler zadziała, kiedy wpiszesz <a href="http://localhost/kohana/index.php/home">http://localhost/kohana/index.php/home</a>. Teraz nie musiałeś tego robić, ponieważ ustawiłeś router, który przy domyślnym wywołaniu (<code>$config['_default']</code> &#8211; patrz lekko powyżej) ma za zadanie wywołać kontroler home.</p>
<p><strong>Akcja kontrolera, jej sposób prezentacji i przyjmowanie parametrów</strong></p>
<p>Zmodyfikuj kontroler <code>home.php</code> do poniższej postaci:</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
</pre></td><td class="code"><pre class="php-brief" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #990000;">defined</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'SYSPATH'</span><span style="color: #009900;">&#41;</span> OR <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'No direct access allowed.'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> Home_Controller <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</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: #990000;">echo</span> <span style="color: #0000ff;">'Witam - jestem Kohany(m) kontrolerem! :)'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> podstrona<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">$parametr1</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">$parametr2</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #990000;">echo</span> <span style="color: #0000ff;">'Witam - jestem kontrolerem podstrony.
			&lt;br /&gt;Przyjąłem 2 parametry:
			&lt;ul&gt;
				&lt;li&gt;Pierwszy: '</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$parametr1</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/li&gt;
				&lt;li&gt;Drugi: '</span><span style="color: #339933;">.</span><span style="color: #0000ff;">$parametr2</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/li&gt;
			&lt;/ul&gt;'</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Co zrobiliśmy? Otóż dodaliśmy funkcję kontrolera (w nomenklaturze MVC częściej na funkcję w kontrolerze mówi się &#8220;akcja&#8221;), która ma za zadanie wyświetlić prosty tekst oraz zawartość dwóch przyjmowanych przez siebie parametrów. Parametry te przyjmowane są z URL&#8217;a (definiowane jako kolejne segmenty adresu). Jak więc obecnie wygląda URL tej akcji? Zobaczmy: <a href="http://localhost/kohana/index.php/home/podstrona/pierwszy_parametr/drugi_param">http://localhost/kohana/index.php/home/podstrona/pierwszy_parametr/drugi_param</a>.</p>
<h2>Epilog</h2>
<p>Nie przejmuj się nieładnym URL&#8217;em. Niedługo poznasz technikę &#8220;wycinania&#8221; index.php z adresu Twojej strony, dzięki czemu uzyskasz bardziej przejrzystą i elegancką strukturę adresu.</p>
<p>Wzorzec projektowy MVC nie pozwala nam na to, abyśmy w kontrolerze wykonywali funkcję <code>echo</code> (nigdy nie należy tego robić &#8211; niniejszy kod jest tylko tymczasowym przykładem, natomiast do wyświetlania tego typu napisów służą widoki). Dlatego też dalszą część tworzenia naszego prostego systemu blogowego będziemy prowadzić w dalszych rozdziałach. Tam wykorzystamy widoki, a później modele. Tak, by kod naszego bloga był w pełni zgodnym ze wszystkimi najważniejszymi standardami, zasadami i dyrektywami inżynierii oprogramowania.</p>
<p><strong>Kod źródłowy</strong>, użyty do tego artykułu, zajduje się <a href="http://nasza.kohanaphp.pl/files/source/kontroler/application.zip">tutaj</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/startujemy-pierwszy-kontroler/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instalacja i konfiguracja</title>
		<link>http://nasza.kohanaphp.pl/instalacja-i-konfiguracja/</link>
		<comments>http://nasza.kohanaphp.pl/instalacja-i-konfiguracja/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 20:02:06 +0000</pubDate>
		<dc:creator>mck</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[config]]></category>
		<category><![CDATA[konfiguracja]]></category>
		<category><![CDATA[routing]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/?p=94</guid>
		<description><![CDATA[Czas na 3 krok naszego kursu. Zajmiemy się instalacją i podstawową konfiguracją Kohany. Nie są to zbyt skomplikowane czynności, ale warto wiedzieć o kilku szczegółach by uniknąć błędów.

Gdzie rośnie Kohana?
Po najnowszą paczkę Kohany udajemy się na oficjalną stronę do działu Download, gdzie możemy wybrać interesujące nas składniki.
Do dyspozycji mamy 5 modułów:


		Archive &#8211; do zarządzania archiwami [...]]]></description>
			<content:encoded><![CDATA[<p>Czas na 3 krok naszego kursu. Zajmiemy się instalacją i podstawową konfiguracją Kohany. Nie są to zbyt skomplikowane czynności, ale warto wiedzieć o kilku szczegółach by uniknąć błędów.</p>
<p><span id="more-94"></span></p>
<h2>Gdzie rośnie Kohana?</h2>
<p>Po najnowszą paczkę Kohany udajemy się na oficjalną stronę do działu <a href="http://www.kohanaphp.pl/download">Download</a>, gdzie możemy wybrać interesujące nas składniki.</p>
<p>Do dyspozycji mamy 5 modułów:</p>
<ul>
<li>
		<strong>Archive</strong> &#8211; do zarządzania archiwami zip, tar, gzip i bzip
	</li>
<li>
		<strong>Auth</strong> &#8211; do uwierzytaelniania i zarządzania użytkownikami (używa biblioteki ORM)
	</li>
<li>
		<strong>Gmaps</strong> &#8211; do szybkich i bezbolesnych zabaw z Google Maps
	</li>
<li>
		<strong>Kodoc</strong> &#8211; do generowania dokumentacji
	</li>
<li>
		<strong>Payment</strong> &#8211; do obsługi płatności (z istotniejszych jest tu PayPal, natomiast brak jakiegokolwiek wsparcia polskich systemów płatności)
	</li>
</ul>
<p>Mamy też narzędzia <a href="http://michelf.com/projects/php-markdown/"><strong>Markdown</strong></a> (do obsługi i konwersji znaczników zgodnie z przyjętymi <a href="http://daringfireball.net/projects/markdown/syntax">zasadami</a>) i <a href="http://www.swiftmailer.org/"><strong>SwiftMailer</strong></a> (do zaawansowanej obsługi maili), a także spory wybór języków.</p>
<p>W naszych przykładach będziemy korzystać z modułu Auth, narzędzia SwiftMailer i języka polskiego.</p>
<h2>Instalacja</h2>
<p>W przypadku Kohany jest to czynność dziecinnie prosta. Wystarczy rozpakować pobraną paczkę do wybranego katalogu (dla nas będzie to katalog o finezyjnej nazwie &#8220;kohana&#8221;). Oto jak powinna wyglądać jego zawartość:</p>
<div class="illustration">
	<img class="alignnone size-full wp-image-170" title="Rys. 3.1. Zawartość głównego folderu" src="http://nasza.kohanaphp.pl/wp-content/uploads/2009/01/kohana_main_folder1.png" alt="Rys. 3.1. Zawartość głównego folderu" width="200" height="160" />
</div>
<p>Po uprzednim zapoznaniu się z licencją możemy się jej pozbyć, tak samo jak loga Kohany, gdyż w praktyce się nam nie przydadzą.</p>
<p>Plik <code>"install.php"</code> jest absolutną nowością (przed wersją 2.3 nie było takich frykasów). Wprawdzie jest to najzwyklejszy test sprawdzający czy posiadamy wszystkie niezbędne do uruchomienia Kohany składniki, ale cieszy. Oczywiście po pomyślnym zakończeniu testu zostaniemy poproszeni o jego usunięcie lub zmianę nazwy (kolejne testy możemy sobie darować, więc może podzielić los licencji i loga).</p>
<h2>.htaccess, czyli przyjazne linki i nie tylko</h2>
<p>W katalogu z Kohaną znajdziemy plik <a href="http://dev.kohanaphp.com/browser/trunk/example.htaccess"><code>"example.htaccess"</code></a>, który w zasadzie jest gotowy do użycia (oczywiście po zmianie nazwy na <code>".htaccess"</code> i usunięciu z niego wiersza z &#8220;<code>RewriteBase /kohana/</code>&#8221; lub jego zmianie na &#8220;<code>RewriteBase /</code>&#8220;).</p>
<h2>Podstawowa konfiguracja</h2>
<p>Wszystkie pliki odpowiedzialne za konfiguracje znajdują się w katalogu <code>"application/config/"</code>, który na początku, choć wygląda skromnie, ma wszystko czego nam potrzeba, czyli główny plik konfiguracyjny <a href="http://dev.kohanaphp.com/browser/trunk/application/config/config.php"><code>"config.php"</code></a>.</p>
<p>Z najciekawszych rzeczy jakie można w nim skonfigurować warto wymienić:</p>
<ul>
<li>
		<strong><code>site_domain</code></strong> &#8211; główna ścieżka do strony
	</li>
<li>
		<strong><code>index_page</code></strong> &#8211; nazwa pliku odpowiedzialnego za działanie aplikacji. Domyślnie jest to <code>"index.php"</code>, ale jeśli chcemy mieć ładne linki, to zmieniamy jego wartość na pustą
	</li>
<li>
		<strong><code>url_suffix</code></strong> &#8211; rozszerzenie plików dodawane do generowanych adresów. Domyślnie puste, ale możemy mu nadać dowolną wartość, np.: <code>".html"</code>
	</li>
<li>
		<strong><code>internal_cache</code></strong> &#8211; okres czasu (w sekundach) przez jaki ma być cache&#8217;owana konfiguracja Kohany
	</li>
<li>
		<strong><code>enable_hooks</code></strong> &#8211; zarządzanie hakami (nimi zajmiemy się w niedalekiej przyszłości). Możemy je wyłączyć (wartość <code>"FALSE"</code>), włączyć wszystkie (<code>"TRUE"</code>) lub włączyć wybrane (tablica z nazwami haków)
	</li>
<li>
		<strong><code>modules</code></strong> &#8211; zarządzanie modułami. Wystarczy odkomentować wybrane moduły lub dodać swoje własne (oczywiście wszystkie muszą się znajdować w katalogu <code>"modules/"</code>)
	</li>
</ul>
<h2>Co jeszcze można skonfigurować?</h2>
<p>Wszystko, serio <img src='http://nasza.kohanaphp.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>W katalogu <code>"system/config/"</code> znajdują się wszystkie dostępne pliki konfiguracyjne używane przez Kohanę. <a href="http://nasza.kohanaphp.pl/struktura-kohany/">Z poprzedniego artykułu</a> wiecie, że najważniejsze są pliki z katalogu <code>"application/"</code>, następnie z modułów, a na końcu z katalogu <code>"system/"</code>, więc zamiast grzebać w domyślnych plikach konfiguracyjnych kopiujemy wybrane do katalogu <code>"application/config/"</code> i tam je można edytować. <span style="text-decoration: underline;"><strong>Zmiany w katalogu <code>"system/*"</code> są niewskazane.</strong></span></p>
<p>Oczywiście Kohana nie ogranicza nas tylko do używania jej plików konfiguracyjnych, ale pozwala nam na tworzenie własnych (więcej szczegółów trochę niżej).</p>
<h2>Routing, czyli skąd i dokąd</h2>
<p>Kohana zapewnia nam następujące mapowanie linków:</p>
<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;">naszastrona<span style="color: #339933;">.</span>pl<span style="color: #339933;">/</span>klasa<span style="color: #339933;">/</span>funkcja<span style="color: #339933;">/</span>parametr1<span style="color: #339933;">/</span>parametr2<span style="color: #339933;">/.../</span>parametr<span style="color: #339933;">-</span>n</pre></td></tr></table></div>

<p>gdzie klasa to nazwa kontrolera, funkcja to nazwa wybranej funkcji, a kolejne segmenty to przekazywane parametry. Dzięki routingowi możemy otrzymać niemal dowolne linki.</p>
<p>Za konfigurację routingu odpowiada plik <a href="http://dev.kohanaphp.com/browser/trunk/system/config/routes.php"><code>"routes.php"</code></a>, który początkowo zawiera jeden wpis:</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;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'_default'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'welcome'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>czyli jako domyślny ustawiony jest kontroler &#8220;welcome&#8221;.</p>
<p>Oczywiście możemy definiować własne trasy:</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: #666666; font-style: italic;">// dla adresu 'naszastrona.pl/o_firmie' uruchamiamy domyślną metodę 'index' z kontrolera 'info'</span>
<span style="color: #0000ff;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'o_firmie'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'info'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// dla adresu 'naszastrona.pl/kontakt' uruchamiamy metodę 'kontakt' z kontrolera 'info'</span>
<span style="color: #0000ff;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'kontakt'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'info/kontakt'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// dla adresu 'naszastrona.pl/produkt/13' uruchamiamy z parametrem '13' metodę 'pokaz' z kontrolera 'produkty'</span>
<span style="color: #0000ff;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'produkt/([0-9]+)'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'produkty/pokaz/$1'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<h2>Najważniejsze pliki konfiguracyjne</h2>
<p><strong><a href="http://dev.kohanaphp.com/browser/trunk/system/config/routes.php"><code>database.php</code></a></strong> &#8211; ustawienia połączenia z bazą danych. Najważniejsze z nich:</p>
<ul>
<li>
		<strong><code>connection['user']</code></strong> &#8211; nazwa użytkownika bazy
	</li>
<li>
		<strong><code>connection['pass']</code></strong> &#8211; hasło użytkownika bazy
	</li>
<li>
		<strong><code>connection['host']</code></strong> &#8211; host
	</li>
<li>
		<strong><code>connection['database']</code></strong> &#8211; nazwa bazy
	</li>
<li>
		<strong><code>connection['character_set']</code></strong> &#8211; system kodowania znaków
	</li>
</ul>
<p><strong><a href="http://dev.kohanaphp.com/browser/trunk/system/config/cookie.php"><code>cookie.php</code></a></strong> &#8211; ustawienia ciastek. Najważniejsze z nich:</p>
<ul>
<li>
		<strong><code>domain</code></strong> &#8211; domena, dla której dostępne są ciastka. Domyślnie puste &#8211; każda strona może odczytać zawartość tych ciastek
	</li>
<li>
		<strong><code>expire</code></strong> &#8211; długość życia ciastka (w sekundach). Domyślnie 0 &#8211; do zamknięcia przeglądarki
	</li>
</ul>
<p><strong><a href="http://dev.kohanaphp.com/browser/trunk/system/config/locale.php"><code>locale.php</code></a></strong> &#8211; ustawienia lokalizacji:</p>
<ul>
<li>
		<strong><code>language</code></strong> &#8211; język strony. Pierwszym elementem tablicy musi być nazwa katalogu (i równocześnie symbolem języka w i18n) z plikami językowymi. Dla naszych przykładów będzie to: <strong><code>pl_PL</code></strong>. Kolejne elementy są alternatywą dla systemów nie obsługujących i18n. Więcej na: <a href="http://php.net/setlocale">php.net/setlocale</a>
	</li>
<li>
		<strong><code>timezone</code></strong> &#8211; strefa czasowa. Domyślnie pusta &#8211; używamy strefy czasowej serwera. Więcej na: <a href="http://php.net/timezones">php.net/timezones</a>
	</li>
</ul>
<p><strong><a href="http://dev.kohanaphp.com/browser/trunk/system/config/pagination.php"><code>pagination.php</code></a></strong> &#8211; ustawienia stronicowania. Najważniejsze z nich:</p>
<ul>
<li>
		<strong><code>uri_segment</code></strong> &#8211; numer lub nazwa segmentu z numerem aktualnej strony
	</li>
<li>
		<strong><code>items_per_page</code></strong> &#8211; liczba elementów wyświetlanych na jednej stronie
	</li>
</ul>
<p><strong><a href="http://dev.kohanaphp.com/browser/trunk/system/config/session.php"><code>session.php</code></a></strong> &#8211; ustawienia sesji. Najważniejsze z nich:</p>
<ul>
<li>
		<strong><code>driver</code></strong> &#8211; sterownik sesji. Do wyboru: &#8220;cookie&#8221;, &#8220;database&#8221;, &#8220;native&#8221; lub &#8220;cache&#8221;
	</li>
<li>
		<strong><code>name</code></strong> &#8211; nazwa sesji
	</li>
<li>
		<strong><code>validate</code></strong> &#8211; tablica parametrów do walidacji. Do wyboru: &#8220;user_agent&#8221;, &#8220;ip_address&#8221; i &#8220;expiration&#8221;
	</li>
<li>
		<strong><code>expiration</code></strong> &#8211; długość życia sesji (w sekundach)
	</li>
</ul>
<h2>Własne pliki konfiguracyjne</h2>
<p>Jak już wcześniej wspomniałem Kohana daje nam możliwość używania własnych plików konfiguracyjnych. Dla przykładu stwórzmy w katalogu <code>"application/config/"</code> plik <code>"konfiguracja.php"</code>:</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;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'parametr1'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'wartosc1'</span><span style="color: #339933;">;</span>
<span style="color: #0000ff;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'parametr2'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'wartosc2'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Możemy wczytać do tablicy cały plik:</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;">$konfiguracja</span> <span style="color: #339933;">=</span> Kohana<span style="color: #339933;">::</span><span style="color: #004000;">config_load</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'konfiguracja'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>lub odczytać wybrany parametr:</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;">$parametr</span> <span style="color: #339933;">=</span> Kohana<span style="color: #339933;">::</span><span style="color: #004000;">config</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'konfiguracja.parametr2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/instalacja-i-konfiguracja/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struktura i nazewnictwo</title>
		<link>http://nasza.kohanaphp.pl/struktura-kohany/</link>
		<comments>http://nasza.kohanaphp.pl/struktura-kohany/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 19:51:04 +0000</pubDate>
		<dc:creator>Zepco</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[struktura]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/?p=36</guid>
		<description><![CDATA[Struktura katalogów
Zanim przejdziemy do utworzenia pierwszego kontrolera, zapoznaj się ze strukturą katalogów i elementami jakie posiada Kohana.

Całość dzieli się na 3 katalogi:


		system &#8211; tu znajduje się „serce” naszego frameworka, w tym główny rdzeń (core) oraz inne elementy, których krótki opis znajduje się poniżej;
	

		modules &#8211; zawiera kod (biblioteki, modele, widoki itp.), który jest na tyle uniwersalny, [...]]]></description>
			<content:encoded><![CDATA[<h3>Struktura katalogów</h3>
<p>Zanim przejdziemy do utworzenia pierwszego kontrolera, zapoznaj się ze strukturą katalogów i elementami jakie posiada Kohana.</p>
<p><span id="more-36"></span></p>
<p>Całość dzieli się na 3 katalogi:</p>
<ul>
<li>
		<strong>system</strong> &#8211; tu znajduje się „serce” naszego frameworka, w tym główny rdzeń (core) oraz inne elementy, których krótki opis znajduje się poniżej;
	</li>
<li>
		<strong>modules</strong> &#8211; zawiera kod (biblioteki, modele, widoki itp.), który jest na tyle uniwersalny, że może być wykorzystywany w innych projektach (np. obsługa użytkowników);
	</li>
<li>
		<strong>application</strong> – ten katalog będzie nas interesował najbardziej. To w nim przechowywane są wszystkie pliki związane z naszą aplikacją.
	</li>
</ul>
<div class="illustration">
	<img class="size-full wp-image-87" title="Rys. 2.1. Struktura katalogów" src="http://nasza.kohanaphp.pl/wp-content/uploads/2008/12/kohana_structure.png" alt="Rys. 2.1. Struktura katalogów" width="380" height="760" />
</div>
<p>Nasze skrypty uruchamiane są poprzez plik index.php. To on ładuje podstawowe klasy Kohany, które później decydują który z elementów naszej aplikacji ma być obsłużony.</p>
<h3>Elementy Kohany</h3>
<p>Jak zapewne zauważyłeś, we wszystkich 3 katalogach jest podobna struktura podkatalogów:</p>
<ul>
<li>
		<strong>config</strong> – jak sama nazwa wskazuje zawiera pliki z 	konfiguracją aplikacji, bibliotek czy też poszczególnych modułów. Więcej informacji na temat konfiguracji znajdziesz w następnym artykule;
	</li>
<li>
		<strong>helpers</strong> – zawiera klasy podobne do bibliotek (libraries) z tym wyjątkiem, że posiadają metody statyczne, przez 	co nie potrzebna jest instancja klasy, żeby użyć którejś z jej funkcji;
	</li>
<li>
		<strong>hooks</strong> – czasem istnieje potrzeba uruchomienia kawałka kodu poza ramami działania kontrolera (np. przed jego wywołaniem lub w momencie wysłania nagłówków). Do tego właśnie służą &#8220;haki&#8221;;
	</li>
<li>
		<strong>i18n</strong> (skrót od internationalization) – katalog ten zawiera pliki językowe z komunikatami i tekstami, które chcemy aby były 	przetłumaczone na naszej stronie. Poza zdefiniowanymi standardowo można utworzyć własne;
	</li>
<li>
		<strong>libraries</strong> – katalog z naszymi bibliotekami wykorzystywanymi w aplikacji;
	</li>
<li>
		<strong>vendor</strong> – znalazłeś w internecie jakąś bibliotekę, której chciałbyś użyć w Kohanie? To miejsce jest właśnie dla niej. W tym katalogu przechowywane są klasy zewnętrznych bibliotek, zaadoptowane do współpracy z naszym frameworkiem;
	</li>
<li>
		<strong>controllers</strong>, <strong>models</strong>, <strong>views </strong> – elementy te pokrótce były opisane wcześniej, więc nie ma sensu się nad 	nimi rozwodzić. W następnych wpisach zajmiemy się dokładniej ich 	tworzeniem i zastosowaniem w aplikacji.
	</li>
</ul>
<h3>Kaskadowy system plików</h3>
<p>Charakterystyczną rzeczą, wartą uwagi w Kohanie jest kaskadowy system plików. Takie rozwiązanie pozwala na nadpisanie plików bez konieczności ich modyfikacji czy usuwania.  Jeśli chcemy otworzyć jakiś plik będzie on przeszukiwany w katalogach w kolejności <code>application -&gt; modules -&gt; system</code>. Jeśli plik nie znajdzie się w żadnym z nich, to zostanie wyświetlony komunikat błędu (w przypadku braku kontrolera błąd 404). Podkatalogi w modules są przeglądane w kolejności ich dodania w pliku konfiguracyjnym config.php (o konfiguracji powiemy w <a href="http://nasza.kohanaphp.pl/instalacja-i-konfiguracja/">następnym artykule</a>). Spójrz na poniższy rysunek.</p>
<div class="illustration">
	<img class="size-full wp-image-77" title="Rys. 2.2. Kaskadowy system plików (autor Geert De Deckere)" src="http://nasza.kohanaphp.pl/wp-content/uploads/2008/12/kohana_modules.png" alt="Rys. 2.2. Kaskadowy system plików (autor Geert De Deckere)" width="520" height="600" />
</div>
<p>W katalogu <code>system/views</code> mamy widok <code>layout.php</code>, który posiada szkielet strony. Ale my chcemy mieć własny szkielet z własnym wyglądem. Dlatego też tworzymy plik o tej samej nazwie w katalogu naszej aplikacji (<code>application/views</code>). Dzięki temu Kohana otrzymując polecenie odnalezienia widoku, szuka go najpierw w naszym katalogu. W tym przypadku znalazł go od razu, więc pomija pozostałe lokalizacje. Dla widoku <code>products.php</code>, który znajduje się aż w trzech miejscach (module a, module b oraz system), wygrywa katalog module a, ponieważ był najwyżej w hierarchi.</p>
<p>Rozwiązanie to jest bardzo użyteczne w przypadku konfiguracji. W zasadzie nie powinieneś nic zmieniać w katalogu system, ponieważ w przypadku aktualizacji Kohany stracisz wszystkie zmiany, a po pewnym czasie raczej nie będziesz pamiętać co i gdzie zmieniłeś.  Zatem jeśli brakuje jakiegoś pliku, który istnieje w katalogu system/config, bądź w którymś z modułów, a który chcesz zmodyfikować, to skopiuj go do application/config i tam dopiero modyfikuj.</p>
<h3>Standardy nazewnictwa</h3>
<p>Aby Kohana wiedziała gdzie znaleźć elementy naszej aplikacji musimy zachować pewne standardy.</p>
<ul>
<li>
		<strong>Kontrolery (controllers)</strong>:</p>
<ul>
<li>nazwa pliku musi być zapisana małymi literami, np. artykuly.php;</li>
<li>nazwa kontrolera musi się pokrywać z nazwą pliku , dodatkowo kończy się sufiksem _Controller (np. Artykuly_Controller). Pierwsze litery wyrazów są duże, pozostałe małe;</li>
<li>musi dziedziczyć po klasie Controller bądź jednym z jego potomków;</li>
<li>standardowo wywoływana jest funkcja index (jeśli nie podano inaczej).</li>
</ul>
</li>
<li>
		<strong>Pomocniki (helpers)</strong>:</p>
<ul>
<li>nazwę pliku i klasy zapisujemy małymi literami.  Nazwa pliku pokrywa się z nazwą klasy (z wyjątkiem sufiksu _Core);</li>
<li>do nazw nowych klas dodajemy sufiks _Core, np. html_Core, tak aby w przyszłości możliwe było rozszerzenie funkcjonalności klasy.</li>
</ul>
</li>
<li>
		<strong>Biblioteki (libraries)</strong>:</p>
<ul>
<li>nazwa pliku podobnie jak w przypadku pomocników pokrywa się z nazwą klasy (z wyjątkiem sufiksu _Core), ale musi zachować takie same wielkości liter jak nazwa klasy;</li>
<li>nazwa klasy zaczyna się od wielkiej litery, wielkość pozostałych liter zależy od programisty;</li>
<li>w przypadku nowych klas postępujemy analogicznie jak w pomocnikach.</li>
</ul>
</li>
<li>
		<strong>Modele (models)</strong>:</p>
<ul>
<li>nazwy plików składają się z małych liter i mają taką samą nazwę jak klasa (bez sufiksu _Model);</li>
<li>nazwa modelu musi się pokrywać z nazwą pliku, dodatkowo kończy się sufiksem _Model (np. User_Model). Pierwsze litery wyrazów są duże, pozostałe małe;</li>
<li>nazwa modelu powinna być zapisana w liczbie pojedynczej (ważne w przypadku angielskich nazw i użycia ORM).</li>
</ul>
</li>
<li>
		<strong>Widoki (views)</strong>:</p>
<ul>
<li>nazwy plików w tym przypadku mogą być dowolne, wielkość liter nie ma znaczenia, byleby przy wywołaniu widoku ją zachować. Musi być jedynie zakończona rozszerzeniem .php.</li>
</ul>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/struktura-kohany/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wprowadzenie</title>
		<link>http://nasza.kohanaphp.pl/wprowadzenie/</link>
		<comments>http://nasza.kohanaphp.pl/wprowadzenie/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 19:47:05 +0000</pubDate>
		<dc:creator>Zepco</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[mvc]]></category>

		<guid isPermaLink="false">http://nasza.kohanaphp.pl/2008/12/25/14/</guid>
		<description><![CDATA[Kohana jest jednym z wielu frameworków stworzonych w języku PHP.
Jej korzenie sięgają innego frameworka o nazwie Code Igniter (CI). Ponieważ deweloperzy CI zapowiedzieli, że ich produkt nie będzie wspierał PHP w wersji 5, grupa programistów korzystających dotychczas z CI postanowiła utworzyć nowy projekt,  idący z duchem czasu i wspierający coraz bardziej rozwijającą się obiektowość [...]]]></description>
			<content:encoded><![CDATA[<p><em>Kohana</em> jest jednym z wielu <a title="Framework" href="http://pl.wikipedia.org/wiki/Framework" target="_blank">frameworków</a> stworzonych w języku PHP.</p>
<p>Jej korzenie sięgają innego frameworka o nazwie <a title="Code Igniter" href="http://pl.wikipedia.org/wiki/CodeIgniter" target="_blank">Code Igniter</a> (CI). Ponieważ deweloperzy CI zapowiedzieli, że ich produkt nie będzie wspierał PHP w wersji 5, grupa programistów korzystających dotychczas z CI postanowiła utworzyć nowy projekt,  idący z duchem czasu i wspierający coraz bardziej rozwijającą się obiektowość dla PHP. Tak powstała <em>Kohana</em>, początkowo bardzo podobna do CI, lecz w tej chwili utożsamia się tylko z jego ogólnymi ideami działania, ponieważ sam projekt jest w pełni samodzielny i jego rozwój biegnie własnym torem.
</p>
<p><span id="more-14"></span></p>
<h3>Co cechuje Kohanę?</h3>
<ul>
<li>
		Oparta o wzorzec MVC (o tym za chwilę);
	</li>
<li>
		Napisana w PHP 5, także jeśli jesteś osobą znającą ten język, to być może Kohana przypadnie ci do gustu;
	</li>
<li>
		W porównaniu z niektórymi kolosami typu Symfony, Mojavi itp. jest dość szybka;
	</li>
<li>
		Poza samym wzorcem MVC i ogólnymi zasadami konstrukcji <em>Kohana</em> daje dość ogromną swobodę w tworzeniu aplikacji.
	</li>
</ul>
<h3>Czym jest MVC?</h3>
<p>Jak możemy wyczytać w <a title="MVC Wikipedia" href="http://pl.wikipedia.org/wiki/MVC" target="_blank">Wikipedii</a>, MVC jest wzorcem projektowym dzielącym aplikację na 3 części:</p>
<ul>
<li>
		Model – jego zadaniem są operacje na danych. Najczęściej modele korzystają z baz danych, ale równie dobrze mogą odwoływać się 	do dokumentów będących na dysku czy też innych stron;
	</li>
<li>
		Widok – w wielu serwisach rolę widoku określa się jako oddzielenie kodu PHP od HTML, co jest oczywiście nieprawdą. Jednym słowem 	widok tworzy to, co użytkownik otrzymuje na wyjściu, w zależności od założeń działania aplikacji. Może to być reprezentacja danych pobranych z modelu &#8211; w formie tabeli &#8211; połączonych z interfejsem 	zapisanym jako kod HTML, czy też inny rodzaj pliku (PDF, XML);
	</li>
<li>
		Kontroler –  jest łącznikiem między modelem i widokiem. Jego 	zadaniem jest odbieranie żądań użytkownika, wysyłanie zapytania do modelu o konkretne dane, a po ich otrzymaniu odesłanie ich do 	widoku. Jednym słowem kontroluje on przebieg aplikacji.
	</li>
</ul>
<h3>Co nam daje taki podział?</h3>
<p>Przede wszystkim model stanowi pewnego rodzaju czarną skrzynkę, o której wiemy tylko to, co z nią zrobić, żeby zwróciła interesujące nas dane. A to, w jaki sposób to zrobi i z jakiego źródła danych skorzysta (plik, baza MySQL, PostgreSQL, XML itp.) nie będzie już nas interesować. Jego zadaniem będą tylko operacje na danych (odczytywanie, zapisywanie itp.) i nic poza tym.</p>
<p>Dajmy na to, że mamy dostawcę, którego prosimy o dostarczenie danego produktu (np. soku). Nie interesuje nas, czy weźmie go z hurtowni A czy z hurtowni B. Ważne, że otrzymamy to o co prosimy. Może być taka sytuacja, że dotychczas dostawca brał towar z hurtowni A, która z nieznanych przyczyn ogłosiła upadłość. Żeby wywiązać się z umowy, dostawca szuka innego źródła i znajduje hurtownię B, skąd dostarczy nam towar. My jako kupujący nie dostrzegamy różnicy, bo wszystko, o co poprosiliśmy zostało dostarczone, a kwestia &#8220;skąd&#8221; to już zmartwienie dostawcy.</p>
<p>Podobnie jest z modelem. Załóżmy, że do tej pory model pobierał dane z bazy MySQL, ale cały serwis musi być przeniesiony na PostgreSQL. Z zewnątrz nic się nie zmienia, nadal jest ten sam model i te same metody odwołujące się do niego, zmianie ulega tylko wnętrze modelu. Dzięki temu oszczędzamy wiele czasu i nerwów, bo nie musimy zmieniać wpisów odwołujących się, być może w kilkudziesięciu (czy nawet więcej) plikach do naszego modelu.</p>
<p>Podobnie sprawa może mieć się w przypadku widoku. Wyobraźmy sobie sytuację, że wszystkie dane pobrane z modelu były wyświetlane w formacie HTML, ale stworzyliśmy sobie program, który odwołuje się do naszej strony. Operuje on zaś na plikach XML. Co robimy? Przepisujemy naszą stronę na nowo? Nic podobnego &#8211; zmieniamy tylko widok tak, aby wyświetlał to co chcemy, czyli w tym przypadku XML. Pozostała część aplikacji (kontroler i modele) nie ulega zmianie.</p>
<p>Choć nic nie stoi na przeszkodzie, żeby tak dostosować kontroler, aby w zależności od tego czy żądanie wywodzi się od przeglądarki internetowej czy też z naszego programu, wybierał odpowiedni widok i wyświetlał go.</p>
<p>Jak widać rozwiązanie takie pozwala na zaoszczędzenie mnóstwa czasu. Ponadto możemy podzielić prace nad projektem na kilka osób, gdzie jedna np. może tworzyć model, inna widok, a jeszcze inna scalać oba te elementy tworząc kontroler.</p>
<p>To tyle tytułem wstępu. Kolejne części opisują budowę i zasadę tworzenia aplikacji z wykorzystaniem Kohany. A to wszystko na przykładzie tworzenia prostego blogu internetowego.</p>
]]></content:encoded>
			<wfw:commentRss>http://nasza.kohanaphp.pl/wprowadzenie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
