<?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>Projekt Cmsss.pl (Alpha)</title>
	<atom:link href="http://cmsss.pl/feed/" rel="self" type="application/rss+xml" />
	<link>http://cmsss.pl</link>
	<description>Projekt CMS Shadow Site</description>
	<lastBuildDate>Sun, 05 Feb 2012 16:25:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Inteligentne serwowanie informacji</title>
		<link>http://cmsss.pl/inteligetne-serwowanie-informacji/</link>
		<comments>http://cmsss.pl/inteligetne-serwowanie-informacji/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 00:01:57 +0000</pubDate>
		<dc:creator>Load</dc:creator>
				<category><![CDATA[Ciekawostki]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[podpowiedzi]]></category>
		<category><![CDATA[reklamy]]></category>
		<category><![CDATA[tagi]]></category>
		<category><![CDATA[treść]]></category>

		<guid isPermaLink="false">http://cmsss.pl/?p=202</guid>
		<description><![CDATA[Do tego wpisu zostałem zmotywowany czytając o google&#8217;owskiej potędze i ich sposobie na utrzymanie setki tysięcy serwerów. Pewnie się zastanawiacie jak to jest możliwe, że firma oferująca całą masę produktów takich jak wyszukiwarka, youtube czy też gmail jeszcze na tym zarabia? Od razu zaznaczę że, płatne odpowiedniki i opcje premium niektórych produktów nie zarabiają tak [...]]]></description>
			<content:encoded><![CDATA[<p>Do tego wpisu zostałem zmotywowany czytając o google&#8217;owskiej potędze i ich sposobie na utrzymanie setki tysięcy serwerów. Pewnie się zastanawiacie jak to jest możliwe, że firma oferująca całą masę produktów takich jak wyszukiwarka, youtube czy też gmail jeszcze na tym zarabia? Od razu zaznaczę że, płatne odpowiedniki i opcje premium niektórych produktów nie zarabiają tak wiele by utrzymać tyle maszyn, wysłać własne sondy w kosmos i jeszcze do tego utrzymać youtube &#8211; serwis generujący spore straty, kto wie ile transferu i przestrzeni dyskowej jest zużywane/zapełniane w jeden dzień niech napisze, a reszta niech się zastanowi jak to utrzymać. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Reklamy</h3>
<p>Tak, google zarabia na reklamach i nie są to przychody małe, zastanowicie się dlaczego inne serwisy nie mają takiej fortuny z tego rodzaju świadczeń? Odpowiedz jest bardzo prosta google monitoruje naszą obecność w sieci. Na podstawie wszystkich zapytań, stron na których przebywaliśmy i ilości czasu spędzonego na nich, generuje  profil każdego z nas, a następnie dokleja nam do strony którą odwiedzamy dedykowane reklamy. Może i nie jest to zbyt wielkie odkrycie, ale analizując i przekładając na nasze potrzeby (tworzenia stron www) możemy go wykorzystać by zainteresować użytkownika wpisami które go na prawdę interesują i które będą od razu wpadać mu w oko bez konieczności wertowania dużej ilości podstron wpisów.</p>
<h3>Tematem głównym wpisu</h3>
<p>&#8230; nie będzie google, ani jego niepodważalna fortuna, a właśnie sposób na wykonanie takiego gadżetu na naszą stronę. Na samym początku trzeba wybrać drogę jaką pójdziemy. Możliwości jest dosyć sporo od reguł pisanych dla wszystkich użytkowników, nawet tych nie zalogowanych &#8211; tutaj opierając się na ip lub ciasteczkach tak jak robi to google do systemu tylko dla zalogowanych użytkowników. Odpowiedzią w którą stronę powinniśmy pójść jest odpowiedz na pytanie:</p>
<blockquote><p>Instalując taki moduł mamy zamiar zarabiać na użytkownikach czy ułatwić im życie?</p></blockquote>
<p>Osobiście chcę zainteresować użytkownika treścią mu potrzebną, więc zainwestuję w mniej skomplikowany system, ale bardziej precyzujący interesujące użytkownika artykuły. Dzięki temu nie tworząc masy profili osób, które nie powrócą do mnie na bloga lub osób których identyfikacja nie jest możliwa. O samym rozpoznawaniu użytkowników można by napisać obszerną notkę więc tutaj powiem tylko o użytkownikach najłatwiej rozpoznawalnych &#8211; stałe ip lub konta w naszym serwisie i ich przeciwieństwie &#8211; osoby nie akceptujące ciastek, nie posiadające stałego ip. Dla osób zainteresowanych tematem identyfikacji użytkowników nie posiadających konta w naszym serwisie podsunę pomysł &#8211; rozpoznawał bym ich na podstawie adresu ip i ciasteczek z wielkim naciskiem na to pierwsze, ciasteczka są znane z swej ulotności, a osoby z stałym ip będą mieć komfort &#8211; oczywiście o poprawności tego rozwiązania można by dużo złego powiedzieć, kiedyś coś o tym napiszę! <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Kolejnym gorszym problemem jest określenie praw na jakich będziemy przypisywać do konkretnych użytkowników interesujące ich wpisy. Mamy kilka dróg: od bardzo restrykcyjnych i dających sporą dokładność zarazem mocno obciążających nasze serwery jak i sposoby dla leniwych, przedstawię oba i krótko omówię w jaki sposób można by to zorganizować za pomocą mysql&#8217;a.</p>
<h3>Tagi</h3>
<p>Mówimy o gruszce, a tutaj znienacka pietruszka &#8211; już śpieszę z wyjaśnieniami, do zrozumienia całości tematu przyda nam się wiedza o tz. tagach &#8211; są to krótkie zwięzłe tytuły którymi możemy określić zawartość danego wpisu, jednoznacznie opisujące jego zawartość zazwyczaj służą do pogrupowania treści niczym kategorie tylko w nieco bogatszy sposób. Wpis zazwyczaj posiada jedną kategorię i co najwyżej pod kategorię, używanie kilku kategorii do opisu danej treści jest raczej czymś nie spotykanym, a tagi są właśnie takim elementem który się genialnie do tego nadaje!</p>
<h3>Leniwe doradzanie treści</h3>
<p>Leniwe ma oznaczać takie które zasobów naszego serwera nie pożre razem z dziesięcioma użytkownikami online, więc zastanawiamy się jak można podejść gościa by wyzyskać od niego informację o jego zainteresowaniach, nie pytając się go w prost. Możliwość jest tylko jedna &#8211; musimy go po cichu śledzić i spisywać wszystkie adresy na jakich bywa w obrębie naszej witryny. Tutaj przydadzą nam się informacje o tagach, opis powyżej staje się potrzebny <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  każdy wpis ma kilka tagów więc zakładając użytkownika czytającego wpis o Zend z dwudziestoma tagami, możemy insynuować że jest zainteresowany nim, a opisem zawartości artykułu czy też wpisu są tagi, użytkownik więc dostaje dopisek do swojego konta o zainteresowaniu danymi tagami, a jeśli takie tagi pojawiły się już w jego profilu ich siła zostaje zwiększona.</p>
<p>Teraz czas na analizę informacji posiadanych o preferencjach, oczywistym jest że tagi z największą siłą są najbardziej lubiane przez danego gościa więc trzeba znaleźć wszystkie wpisy zawierające je i porównać ich siłę &#8211; w końcu wpis może posiadać kilka tagów więc tutaj przyjdzie z pomocą jakiś bardziej zaawansowany algorytm porównawczy (następnym razem o nim), teraz wypadało by tylko nie podawać artykułów już przeczytanych przez użytkownika, w końcu nie chcemy podsuwać komuś artykułu który właśnie czyta!</p>
<h3>Dokładny doradca</h3>
<p>Tutaj skupię się tylko na elementach które wzbogacą nasz leniwy system. Pierwszym takim elementem są kategorie, precyzyjność ich jest za razem plusem jak i minusem w takiej aplikacji, z jednej strony jasno mówią co takiego czyta użytkownik, ale i ograniczają nas tylko do jednej kategorii &#8211; jest to element pośredni tak na prawdę pomiędzy naszym leniwym a dokładnym pomagierem.</p>
<p>Kolejną metodą jest śledzenie czasu spędzonego nad danymi tagami. Notujemy nie ilość wystąpień danego tagu a czas jaki użytkownik spędził nad artykułami w jakich występuje. Jest to rozwiązanie dość pracochłonne i obciążające server, jednak o wiele bardziej precyzyjne, a to jeszcze nie szczyt jego możliwości. Przy porównywaniu można brać pod uwagę nie tylko ilość czasu spędzonego nad danym tagiem, a również obszerność artykułu, wiadomo, że dwa, trzy krótkie wpisy mogą bardziej interesować użytkownika niż jeden na prawdę &#8222;otyły&#8221; i zmuszający do dłuższego zaczepienia na nim oka.</p>
<h3>Rozwiązanie techniczne</h3>
<p>Nie jest to nic trudnego, w jednej tabeli mamy zapisane tagi w innej użytkowników teraz trzeba dodać kolejną z idTag, idUser i siłą która będzie reprezentowana przez jeden z sposobów opisanych powyżej, poza tym przyda się lista przeczytanych wpisów dla każdego z użytkowników.</p>
<h3>Plusy płynące z takiego systemu</h3>
<p>Nie dość, że pomagamy użytkownikom w wyborze treści do przeczytania to tworzymy tym samym dość dokładne statystyki mówiące o zainteresowaniu naszych odbiorców, od teraz będziemy wiedzieć które wpisy powinny być częściej wydawane.</p>
<h3>Podsumowanie</h3>
<p>Warto wspomnieć o plusach i minusach takiego rozwiązanie, na małą skalę może i nie istotnych &#8211; jednak pamiętajmy że takie rozwiązania zazwyczaj są używane na dużą skalę, a ich dokładność rośnie z czasem! Tak na prawdę jeśli będziemy dysponować ogromną bazą wpisów to będziemy wpływać pod świadomie na kształtowanie gustu czytelnika,. Mimo, że wybór podjął niby samodzielnie to my decydujemy o przypisanych frazach i możemy to robić błędnie, tym samym zmniejszając indywidualność czytelników, firma google jest idealnym przykładem takich zagrań &#8211; nasza indywidualność jest zminimalizowana i tak na prawdę wpasowujemy się do jakiejś danej grupy niż reprezentujemy sami siebie.</p>
<p>Wpis oparty główne na moich przemyśleniach, ładnie reprezentuje zabiegi google&#8217;a, yod wielu lat na nas testuje zarabiając krocie, takie zachowanie ma zgubny wpływ na nasz rozwój, ale przyczynia się też do szybszego znalezienia informacji, a także zdejmuje z nas obowiązek płacenia z usług takich jak google, youtube i gmail.</p>
]]></content:encoded>
			<wfw:commentRss>http://cmsss.pl/inteligetne-serwowanie-informacji/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[ZFm #01] Zend a błędy (#03-#04)</title>
		<link>http://cmsss.pl/zfm-01-zend-a-bledy-03-04/</link>
		<comments>http://cmsss.pl/zfm-01-zend-a-bledy-03-04/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 11:35:51 +0000</pubDate>
		<dc:creator>Load</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[akcja]]></category>
		<category><![CDATA[application.ini]]></category>
		<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[konfiguracja]]></category>
		<category><![CDATA[kontroler]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[wyświetlanie błędów]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://cmsss.pl/?p=165</guid>
		<description><![CDATA[Wstęp Od czasu do czasu pomiędzy obszernymi wpisami będą się pojawiać tz. mini wpisy których treść nie nadaje się na cały wpis, a informacje w nich zawarte są dość użyteczne i nie chciał bym ich wykładać poza kurs. Ten wpis będzie pierwszym takim mini wpisem, w tytule będę podawać pomiędzy jakimi wpisami został opublikowany z [...]]]></description>
			<content:encoded><![CDATA[<h3>Wstęp</h3>
<p>Od czasu do czasu pomiędzy obszernymi wpisami będą się pojawiać tz. mini wpisy których treść nie nadaje się na cały wpis, a informacje w nich zawarte są dość użyteczne i nie chciał bym ich wykładać poza kurs. Ten wpis będzie pierwszym takim mini wpisem, w tytule będę podawać pomiędzy jakimi wpisami został opublikowany z racji na inną numerację. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Konfiguracja wyświetlania błędów w Zend Framework</h3>
<p>Miejscem w jakim ustalamy czy Zend ma nas informować o szczegółach błędów jest plik <em>.htaccess</em> w katalogu public każdego projektu, jego standardwa zawartość to:</p>
<blockquote><p>RewriteEngine On<br />
RewriteCond %{REQUEST_FILENAME} -s [OR]<br />
RewriteCond %{REQUEST_FILENAME} -l [OR]<br />
RewriteCond %{REQUEST_FILENAME} -d<br />
RewriteRule ^.*$ &#8211; [NC,L]<br />
RewriteRule ^.*$ index.php [NC,L]</p></blockquote>
<p>Jak widać są to zwykłe regułki <em>.htaccess</em>, przed nimi mamy pustą linię wpisując w niej:</p>
<blockquote><p>SetEnv APPLICATION_ENV development</p></blockquote>
<p>Mówimy naszej aplikacji, że pracujemy w trybie deweloperskim dzięki czemu wyświetlanie błędów zostanie uruchomione, aplikacja posiada również inne tryby w jakich może pracować, wszystko jest opisane w plikach konfiguracyjnych, podam przykład by wyjaśnić na czym to polega, plik z projketu użytego w ostatniej części kursu (#03):</p>
<blockquote><p>H:\zf\application\configs\application.ini</p></blockquote>
<p>I jego zawartość:</p>
<blockquote><p>[production]<br />
phpSettings.display_startup_errors = 0<br />
phpSettings.display_errors = 0<br />
includePaths.library = APPLICATION_PATH &#8222;/../library&#8221;<br />
bootstrap.path = APPLICATION_PATH &#8222;/Bootstrap.php&#8221;<br />
bootstrap.class = &#8222;Bootstrap&#8221;<br />
appnamespace = &#8222;Application&#8221;<br />
resources.frontController.controllerDirectory = APPLICATION_PATH &#8222;/controllers&#8221;<br />
resources.frontController.params.displayExceptions = 0</p>
<p>[staging : production]</p>
<p>[testing : production]<br />
phpSettings.display_startup_errors = 1<br />
phpSettings.display_errors = 1</p>
<p>[development : production]<br />
phpSettings.display_startup_errors = 1<br />
phpSettings.display_errors = 1<br />
resources.frontController.params.displayExceptions = 1</p></blockquote>
<p>Jak widać całość jest podzielona na 4 części za pośrednictwem tekstu w nawiasach, są to typy konfiguracji, a o aktywnie używanym decyduje właśnie linia z pliku <em>.htaccess </em>którą przytoczyłem wcześniej. Jeśli w owym pliku zabraknie deklaracji konfiguracji zostanie użyta <em>[production]</em> która odpowiada za aplikację środowisku produkcyjnym czyli ostatecznym.</p>
<p>Jak widać każda inna konfiguracja dziedziczy po <em>[production]</em>, dowiadujemy się o tym poprzez znak dwukropka, całość możemy zapisać bez niego jednak wymagane będzie powtórzenie wszystkich deklaracji, a to mija się z celem. Więc zadeklarowanie:</p>
<blockquote><p>SetEnv APPLICATION_ENV development</p></blockquote>
<p>Uruchomi konfigurację <em>[development : production]</em> dziedziczącą po <em>[production]</em>, a jak widzimy w <em>[development : production]</em> mamy zapisy mówiące o wyświetlaniu błędów, przez parser php jak i przez wyjątki samego framework&#8217;a.</p>
<h3>Przykład błędy Zend Framework</h3>
<p>Pokażę przykładowy błąd jaki wygeneruje nam aplikacja  w przypadku braku akcji <em>index</em> kontrolera <em>index</em>, wygląda on następująco:</p>
<blockquote>
<h1>An error occurred</h1>
<h2>Page not found</h2>
<h3>Exception information:</h3>
<p><strong>Message:</strong> Action &#8222;index&#8221; does not exist and was not trapped in __call()</p>
<h3>Stack trace:</h3>
<pre>#0 B:\ZendServer\share\ZendFramework\library\Zend\Controller\Action.php(518): Zend_Controller_Action-&gt;__call('indexAction', Array)
#1 B:\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action-&gt;dispatch('indexAction')
#2 B:\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard-&gt;dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#3 B:\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front-&gt;dispatch()
#4 B:\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap-&gt;run()
#5 H:\zf\public\index.php(26): Zend_Application-&gt;run()
#6 {main}</pre>
<h3>Request Parameters:</h3>
<pre>array (
  'controller' =&gt; 'index',
  'action' =&gt; 'index',
  'module' =&gt; 'default',
)</pre>
</blockquote>
<p>Jak widać w wyraźny sposób mówi nam o braku akcji <em>index</em>, dodatkowo na samym końcu zaznacza jaka akcja jest wywoływana, z którego kontrolera i modułu, więcej do szczęścia nie trzeba.</p>
<h3>Podsumowanie</h3>
<p>Podczas pisania kodu człowiek popełnia błędy i jest to normalna sprawa by ułatwić ich odnajdywanie trzeba wyświetlić dodatkowe informacje o błędach dzięki temu wpisowi każdy z Was wie jak to zrobić &#8211; miłego korzystania! <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://cmsss.pl/zfm-01-zend-a-bledy-03-04/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[ZF #03] Kontrolery i akcje &#8211; dodawnie i usuwanie</title>
		<link>http://cmsss.pl/zf-03-kontrolery-i-akcje-dodawnie-i-usuwanie/</link>
		<comments>http://cmsss.pl/zf-03-kontrolery-i-akcje-dodawnie-i-usuwanie/#comments</comments>
		<pubDate>Sun, 29 Jan 2012 21:58:52 +0000</pubDate>
		<dc:creator>Load</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[akcja]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[kontroler]]></category>
		<category><![CDATA[nowy projekt]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[widok]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[zf]]></category>
		<category><![CDATA[zf.bat]]></category>

		<guid isPermaLink="false">http://cmsss.pl/?p=118</guid>
		<description><![CDATA[Wstęp W tym wpisie dowiemy się jak dodawać i usuwać kontrolery i akcje dwoma sposobami &#8222;ręcznie&#8221; i za pomocą pliku zf.bat, zabieramy się do roboty bez zbędnego gadania. Tworzymy aplikację testową Dlaczego kolejną? Nie chcę by kolejne zmiany były wprowadzane na jednym projekcie spowodowało by to zamieszanie więc za każdym razem będziemy tworzyć nowy projekt [...]]]></description>
			<content:encoded><![CDATA[<h3>Wstęp</h3>
<p>W tym wpisie dowiemy się jak dodawać i usuwać kontrolery i akcje dwoma sposobami &#8222;ręcznie&#8221; i za pomocą pliku <em>zf.bat</em>, zabieramy się do roboty bez zbędnego gadania.</p>
<h3>Tworzymy aplikację testową</h3>
<p>Dlaczego kolejną? Nie chcę by kolejne zmiany były wprowadzane na jednym projekcie spowodowało by to zamieszanie więc za każdym razem będziemy tworzyć nowy projekt najlepiej w czystym katalogu www, czyli wypadało by przenieść jego zawartość do innego miejsca tak by nie pomieszać wszystkiego i mieć do czego wrócić w razie niepewności.</p>
<p>Ostatni wpis nadał tak na prawdę całemu kursowi pewien schemat katalogów idę za obietnicą i będę się go trzymać!</p>
<p>W roli przypomnienia dodam, że mój server jest skonfigurowany w następujący sposób, katalog <em>www/public</em> jest głównym katalogiem servera, nowy projekt tworzę w pustym katalogu <em>www</em>, a katalog public jest generowany przy tworzeniu nowego projektu.</p>
<p>Odpalamy cmd, wchodzimy do katalogu <em>www</em> (chyba, że wedle mojej rady mamy plik do odpalania cmd &#8211; wtedy mamy jedną komendę z głowy), tworzymy nowy projekt używając znanej nam już komendy z małą zmianą:</p>
<blockquote><p>zf create project . ZF#o3</p></blockquote>
<p>Tak komenda tak jak i jej pierwowzór stworzy nam nowy projekt, a od poprzedniczki różni się tylko lokalizacją w jakim zostanie umieszczony, mianowicie nowy projekt pojawi się w katalogu aktualnie wybranym, dzięki czemu efekty stworzenia nowego projektu możemy podziwiać od razu pod adresem lokalnej maszyny w moim przypadku <em>zf.server</em>.</p>
<h3>Tworzenie kontrolerów</h3>
<p>Nasza aplikacja jak wiecie z poprzedniej części już na strat posiada dwa kontrolery:</p>
<blockquote>
<ul>
<li>index</li>
<li>error</li>
</ul>
</blockquote>
<p>A w niech odpowiednie akcje, teraz zajmiemy się stworzeniem nowego kontrolera tak by dołączył do tej dwójki, są na to dwa sposoby przedstawione poniżej.</p>
<h4>zf.bat</h4>
<p>By stworzyć nowy kontroler za pomocą pliku <em>zf.bat </em>musimy odpalić <em>cmd</em> i wejść do katalogu projektu, w tym przypadku jest to katalog <em>www </em>i znów przydaje się nasza magia &#8211; korzystając z pliku <em>index.bat</em> i stosując kropkę od razu jesteśmy w dobrym miejscu. Tak by operacje na naszym projekcie za pomocą zf.bat powiodły się plik <em>.zfproject.xml</em> powinien znajdować się w głównym folderze aplikacji, zawiera on informacje o projekcie i jest wymagany.</p>
<p>Gdy jesteśmy już w katalogu głównym aplikacji wpisujemy:</p>
<blockquote><p>zf create controller nowyKontroler</p></blockquote>
<p>Jeśli wszystko przebiegło pomyślnie powinniśmy zobaczyć komunikat o stworzeniu nowego kontrolera i zaktualizowaniu pliku <em>zfproject.xml</em>. Możemy sprawdzić efekty naszych działań wchodząc pod adres:</p>
<blockquote><p>http://zf.server/nowy-kontroler</p></blockquote>
<p>Jak widzicie każda duża litera została zamieniona na małą i poprzedzona myślnikiem, taki zapis jest charakterystyczny do linków i plików widoku, w innych miejscach posługujemy się normalną nazwą kontrolera. Wynikiem powyższego kodu jest:</p>
<div id="view-content">
<blockquote><p>View script for controller <strong>NowyKontroler</strong> and script/action name <strong>indexT</strong></p></blockquote>
<p><strong></strong>To znaczy, że działa wszystko tak jak powinno!</p>
<p>Gdy tworzymy kontroler plik <em>zf.bat</em> tworzy za nas minimum do jego funkcjonowania, nie wchodząc w to co i jak tworzony jest:</p>
<ul>
<li>Kontroler o podanej nazwie</li>
<li>Jego akcja index</li>
<li>Widok dla akcji index naszego kontrolera</li>
</ul>
<p>Mało tego widok zawiera właśnie ten wpis drukowany nam na ekranie, tak byśmy mogli od razu przetestować jego działanie, a i często zaoszczędza nam to pracy &#8211; łatwiej usunąć pliki niż je tworzyć. Nie będę dokładnie pisać co jest tworzone, w następnym punkcie zrobimy dokładnie to samo, tylko że ręcznie więc będzie to widoczne.</p>
<h4>Ręcznie</h4>
<p>Tworzenie ręczne kontrolera zazwyczaj mija się z celem, nadajemy sobie pracy a i nikt nie będzie przeglądał pliku projektu by dodać w nim wpis o nowym kontrolerze &#8211; może to wywołać drobne problemy w przyszłości jeśli zechcemy znów korzystać z <em>zf.bat</em>. Ogólnie pokarzę jak stworzyć kontroler i wszystkie poboczne elementy tak jak robi to <em>zf.bat</em>.</p>
<p>Zaczynamy od początku, najpierw utworzymy pliki kontrolera odwiedzamy katalog:</p>
<blockquote><p>H:\zf\application\controllers</p></blockquote>
<p>W nim tworzymy plik o nazwie naszego kontrolera plus słowo klucz <em>Controller</em> i standardowe rozszerzenie <em>.php</em>, całość mniej więcej powinna wyglądać tak:</p>
<blockquote><p>NowyKontroler2Controller.php</p></blockquote>
</div>
<div>
<p>W nazwach kontrolerów najlepiej trzymać się określonego schematu:</p>
<ul>
<li>Używać znaków alfabetu a-z, bez polskich ogonków</li>
<li>Zapisywać w notacji &#8222;każde nowe słowo z dużej litery&#8221; np. <em>NowyKontroler</em></li>
<li>Wielkość pierwszego znaku nie ma znaczenia, wielkość innych już ma &#8211; nazwy <em>NowyKontroler</em>, a<em> Nowykontroler</em> to dwa inne kontrolery</li>
</ul>
<p>Otwieramy plik naszego kontrolera i wpisujemy w nim:</p>
<blockquote><p>&lt;?php</p>
<p>class NowyKontroler2Controller extends Zend_Controller_Action<br />
{<br />
public function init()<br />
{<br />
/* Initialize action controller here */<br />
}</p>
<p>public function indexAction()<br />
{<br />
// action body<br />
}<br />
}</p></blockquote>
<p>Na pierwszy rzut oka może Was dziwić brak znacznika końca php <em>?&gt;</em>, nie jest on wymagany, a nie zapisywanie go pozwala oszczędzić na szukaniu gdy po jego wystąpieniu pojawi się jakiś biały znak &#8211; korzystanie z sesji i innych dobrodziejstw które muszą wysłać nagłówki skończy się wtedy wielkim błędem, a znalezienie wśród 20 kontrolerów jednej spacji to trochę zabawy.</p>
<p>Przejdźmy do omówienia kodu, deklarujemy w nim nową klasę <em>NowyKontroler2Controller</em> jest to nazwa naszego kontrolera, pierwszy znak powinien być wielki, a reszta zależy od naszej inwencji, klasa musi dziedziczyć po <em>Zend_Controller_Action</em>. W ciele klasy znajduje się deklaracja <em>init(){&#8230;}</em> nie jest ona wymagana, już o niej pisałem wcześniej, w roli przypomnienia dodam &#8211; zastępuje ona magiczną metodę <em>__construct()</em>. Dalej jest zadeklarowana akcja <em>indexAction(){&#8230;}</em> na jej temat więcej w dalszej części wpisu.</p>
<p>Tak na prawdę na tym można by zakończyć tworzenie kontrolera, ale by funkcjonował poprawnie wymagane są pliki widoku lub ich wyłączenie, wspomnę tutaj tylko jak je stworzyć nie wgłębiając się w szczegóły techniczne. Wchodzimy do katalogu:</p>
<blockquote><p>H:\zf\application\views\scripts</p></blockquote>
<p>W tym katalogu standardowo znajdują się pliki widoków naszej aplikacji, widzimy tutaj takie pliki jak:</p>
<ul>
<li>error</li>
<li>index</li>
<li>nowy-kontroler</li>
</ul>
<p>Dwa pierwsze <em>error</em> i <em>index</em> są standardowo umieszczone w projekcie, a <em>nowy-kontroler</em> to nasze działo jak widać nazwa katalogu jest taka sama jak podawana ścieżka w adresie. Każda wielka litera w nazwie jest zamieniana na małą, a przed nią pojawia się myślnik &#8211; oto i cała magia, przykład z naszego poprzednio utworzonego kontrolera:</p>
<blockquote><p>Nazwa kontrolera: <em>NowyKontroler</em><br />
Nazwa katalogu z widokami: <em>nowy-kontroler</em></p></blockquote>
<p>Teraz stwórzmy pliki widoku dla ręcznie tworzonego kontrolera, kontroler nazywa się <em>NowyKontroler2</em> więc analogicznie katalog z widokiem dla naszej aplikacji będzie nazywać się <em>nowy-kontroler</em>2. Wewnątrz tego katalogu powinny znajdować się pliki widoków ich nazwom będą odpowiadać nazwy akcji, akcją w naszym kontrolerze jest <em>index</em> więc tworzymy plik o takiej nazwie, pamiętajmy o stosowaniu myślników zamiast wielkich liter tym samym zamieniając je na małe odpowiedniki. Rozszerzeniem plików widoku jest <em>.phtml</em>, jest to charakterystyczny do wszystkich plików opisujących wygląd naszej aplikacji, na chwile obecną są to tylko widoki, z czasem poznamy inne. Mając to na uwadze nasz plik widoku powinien nazywać się <em>index.phtml</em>.</p>
<p>Teraz przejdziemy do jego zawartości, przy tworzeniu projektu za pomocą pliku wsadowego zawartością jest:</p>
<blockquote><p>&lt;br /&gt;&lt;br /&gt;<br />
&lt;div id=&#8221;view-content&#8221;&gt;<br />
&lt;p&gt;View script for controller &lt;b&gt;NowyKontroler2&lt;/b&gt; and script/action name &lt;b&gt;index&lt;/b&gt;&lt;/p&gt;<br />
&lt;/div&gt;</p></blockquote>
<p>My możemy zostawić ten plik pusty, lub wpisać po prostu nazwę kontrolera i akcji która wywołuje ten widok &#8211; będzie nam łatwiej w późniejszej edycji zorientować się co jest czym gdy się zgubimy, a oto przy pierwszym podejściu do Zend&#8217;a nie jest trudno. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Teraz możemy wejść pod adres:</p>
<blockquote><p>http://zf.server/nowy-kontroler2</p></blockquote>
<p>I sprawdzić jak nasz nowy kontroler działa, tutaj kończy się nasza przygoda z tworzeniem kontrolerów.</p>
<h3>Usuwanie kontrolerów</h3>
<p>Metody na usunięcie kontrolera ograniczają się tylko do ręcznego usuwania plików, tak na prawdę każdy mógł by z poprzedniego fragmentu sam wywnioskować co trzeba usunąć, ale ja tutaj w jakimś celu jestem więc piszę. Usuniemy kontroler o nazwie <em>NowyKontroler</em> w tym celu wchodzimy do katalogu z kontrolerami i usuwamy plik o nazwie <em>NowyKontrolerController.php</em>, teraz przechodzimy do katalogu z widokami i usuwamy cały katalog o nazwie kontrolera czyli <em>NowyKontroler</em> i to na tyle co można powiedzieć o usuwaniu.</p>
<p>Warto nadmienić o małej ułomności, jeśli dodamy kontroler za pomocą pliku wsadowego, usuniemy go i znów będziemy chcieli dodać go za pomocą <em>zf.bat </em>spotka nas niemiła niespodzianka nie będzie to możliwe, możemy tylko dodać go ręcznie.</p>
<h3>Dodawanie akcji</h3>
<p>Znów mamy dwa sposoby &#8211; automatyczny i ręczny, od razu przejdę do rzeczy.</p>
<h4>zf.bat</h4>
<p>Zajmiemy się kontrolerem o nazwie <em>NowyKontroler2, d</em>odamy mu nową akcję o nazwie <em>NowaAkcja</em>, odpalamy konsolę wybieramy nasz projekt i wpisujemy:</p>
<blockquote><p>zf create action NowaAkcja NowyKontroler2</p></blockquote>
<p>Wzór jest prosty i wygląd tak:</p>
<blockquote><p>zf create action NazwaAkcji  NazwaKontrolera</p></blockquote>
<p><em>NazwaAkcji</em> to po prostu jej nazwa, a <em>NazwaKontrolera</em> to nazwa kontrolera w którym chcemy tą akcję umieścić. Po wpisaniu tej komendy możemy wejść w przeglądarce na adres:</p>
<blockquote><p>http://zf.server/nowy-kontroler2/nowa-akcja</p></blockquote>
<p>W efekcie otrzymamy:</p>
<blockquote><p>View script for controller <strong>NowyKontroler2</strong> and script/action name <strong>nowaAkcja</strong></p></blockquote>
<p>Miło i przyjemnie tak jak byśmy tego oczekiwali! <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Ręcznie</h4>
<p>Wchodzimy do katalogu z kontrolerami i wybieramy interesujący nas kontroler, ja ponownie dodam akcję do  <em>NowyKontroler2</em>, przechodzimy do edycji wybranego kontrolera i wewnątrz klasy dodajemy akcję, moja nazywa się <em>nowaAkcja2</em> do nazwy dodajemy słówko Action, całość powinna wyglądać następująco:</p>
<blockquote><p>public function nowaAkcja2Action()<br />
{<br />
// action body<br />
}</p></blockquote>
<p>Zapisujemy, przechodzimy do plików widoku tego samego kontrolera, w moim przypadku jest to katalog:</p>
<blockquote><p> H:\zf\application\views\scripts\nowy-kontroler2</p></blockquote>
<p>Tworzymy plik o nazwie kontrolera zgodnie z inwencją nazewnictwa plików widoku, czyli z zastosowaniem myślników, zamiast wielkich znaków u mnie plik nazywa się <em>nowa-akcja2.phtml</em>, jak już dobrze wiecie jego zawartość nie ma znaczenia, ale dobrym nawykiem jest dodanie jego nazwy, ja wykonam to tak jak i wykonał by to <em>zf.bat</em>, wpisuję:</p>
<blockquote><p><em>&lt;br /&gt;&lt;br /&gt;<br />
&lt;div id=&#8221;view-content&#8221;&gt;<br />
&lt;p&gt;View script for controller &lt;b&gt;NowyKontroler2&lt;/b&gt; and script/action name &lt;b&gt;nowaAkcja2&lt;/b&gt;&lt;/p&gt;<br />
&lt;/div&gt;</em></p></blockquote>
<p>Teraz by wypróbować naszą nową akcję odpalamy przeglądarkę i przechodzimy do adresu:</p>
<blockquote><p>http://zf.server/Nowy-kontroler2/nowa-akcja2</p></blockquote>
<p>I widzimy:</p>
<div id="view-content">
<blockquote><p>View script for controller <strong>NowyKontroler2</strong> and script/action name <strong>nowaAkcja2</strong></p></blockquote>
</div>
<p>Czyli wszystko jest tak jak i powinno. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Usuwanie akcji</h3>
<p>Na usuwanie akcji tak jak i kontrolera jest tylko jedna metoda &#8211; ręczna, jednak trzeba się trochę więcej napracować niż przy usuwaniu kontrolerów.</p>
<p>Edytujemy plik kontrolera zawierającego akcję którą pragniemy usunąć, ja wybrałem akcję <em>nowaAkcja</em> z kontrolera <em>NowyKontroler2</em>, edytuję plik:</p>
<blockquote><p>H:\zf\application\controllers\NowyKontrolerController.php</p></blockquote>
<p>i usuwamy całkowicie metodę o nazwie naszej akcji, w moim przypadku jest to usunięcie:</p>
<blockquote><p>public function nowaAkcjaAction()<br />
{<br />
// action body<br />
}</p></blockquote>
<p>I zapisanie pliku, teraz wchodzimy do katalogu z widokami, wybieramy katalog kontrolera <em>NowyKontroler</em> i usuwamy całkowicie plik <em>nowa-akcja.phtml </em>z lokacji:</p>
<blockquote><p>H:\zf\application\views\scripts\nowy-kontroler\</p></blockquote>
<p>Od teraz nasza aplikacja nie będzie już posiadać akcji o nazwie <em>nowaAkcja.</em></p>
<h3>Kilka ważnych kwestii</h3>
<p>Podczas poznawania nowych elementów staram się dokładnie je opisywać, jednak gdy już omówimy dany temat nie będę do niego wracać przy każdym kolejnym wpisie i z czasem zapis akcji <em>nowyKontroler/nowaAkcja</em> będzie znaczył, że zajmujemy się akcją <em>nowaAkcja</em> kontrolera <em>nowyKontroler</em>. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Jeśli jakieś elementy będą nie zrozumiałe proszę o informacje w komentarzach, wszystko postaram się wyjaśnić, a sam wpis zmienić tak by przyszli czytelnicy nie musieli zastanawiać się nad moimi pomyłkami!</p>
<h3>Podsumowanie</h3>
<p>Od teraz każdy z Was umie dodawać i usuwać akcje oraz kontrolery, na tej podstawie można stworzyć już aplikację z kilkoma podstronami za jeden dwa wpisy stworzymy takową by zebrać wszystkie informacje do kupy i pokazać zalety Zend&#8217;a w praktyce, do usłyszenia. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://cmsss.pl/zf-03-kontrolery-i-akcje-dodawnie-i-usuwanie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ZF #02] Konfiguracja servera na potrzeby kursu ZF</title>
		<link>http://cmsss.pl/zf-02-konfiguracja-servera-na-potrzeby-kursu-zf/</link>
		<comments>http://cmsss.pl/zf-02-konfiguracja-servera-na-potrzeby-kursu-zf/#comments</comments>
		<pubDate>Sun, 22 Jan 2012 21:27:17 +0000</pubDate>
		<dc:creator>Load</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[.htaccess]]></category>
		<category><![CDATA[cmd]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[framework.zend.com]]></category>
		<category><![CDATA[hosts]]></category>
		<category><![CDATA[httpd.conf]]></category>
		<category><![CDATA[instalacja]]></category>
		<category><![CDATA[Js]]></category>
		<category><![CDATA[konfiguracja]]></category>
		<category><![CDATA[Krasnal]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[php 5.3]]></category>
		<category><![CDATA[php.ini]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[Wamp]]></category>
		<category><![CDATA[Webserv]]></category>
		<category><![CDATA[Wstęp]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[wyświetlanie błędów]]></category>
		<category><![CDATA[Xamp]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Zend Server Community Edition]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://cmsss.pl/?p=126</guid>
		<description><![CDATA[Wstęp W tym wpisie chcę pokazać jak skonfigurować server www na nasze potrzeby, pokażę jakiej konfiguracji używam i będę się starał w następnych wpisach trzymać się  tej konwencji. Do tego wpisu przekonało mnie zamieszanie jakie tworzy się wśród moich wpisów związane z katalogami i konfiguracją servera &#8211; nie chcę by to była przeszkoda w zrozumieniu [...]]]></description>
			<content:encoded><![CDATA[<h3>Wstęp</h3>
<p>W tym wpisie chcę pokazać jak skonfigurować server www na nasze potrzeby, pokażę jakiej konfiguracji używam i będę się starał w następnych wpisach trzymać się  tej konwencji. Do tego wpisu przekonało mnie zamieszanie jakie tworzy się wśród moich wpisów związane z katalogami i konfiguracją servera &#8211; nie chcę by to była przeszkoda w zrozumieniu kursu.</p>
<h3>Układ plików</h3>
<p>Jako że jestem osobą, aż za bardzo poukładaną to nie mogło by być inaczej gdyby server też nie był zainstalowany dokładnie wedle moich upodobań. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Na dysku B:/ zainstaluję server, a katalogiem głównym będzie dysk H:/ dlaczego tak? Pliki z katalogu głównego potrzebują częstego backup&#8217;u i są bardzo często używane więc oddzielny dysk jest moim zdaniem idealny, wiem czym są skróty, ale taki układ osobiście mi odpowiada, nic jednak nie stoi na przeszkodzie by w miejscu w którym podaje ścieżkę na dysku dodać inną do własnego katalogu.</p>
<h3>Jakie oprogramowanie wybrać</h3>
<p>Na rynku jest cała masa oprogramowania jakie można zastosować nie zmuszając się do instalacji wszystkich komponentów od zera, jak że mój komputer jest tylko i wyłącznie środowiskiem dla mnie i nikt inny nie ma do niego dostępu, a ja sam nie wymagam by server był wysoce konfigurowalny &#8222;z pod okienka&#8221; to wybrałem produkt Zend&#8217;a, aczkolwiek kiedyś korzystałem z wielkim zadowoleniem z <a href="http://webserv.pl">webserv</a> niestety projekt upadł, a paczki są strasznie przestarzałe. Środowisko otwarte na świat mam na pc przeznaczonym do tego celu i oparte na ręcznej instalacji &#8211; kiedyś może powiem coś na ten temat.</p>
<p>Inne dostępne na rynku:</p>
<ul>
<li><em>Webserv</em> &#8211; <a href="http://webserv.pl">http://webserv.pl</a></li>
<li><em>Krasnal</em> &#8211; <a href="http://www.olesno.pl/~pablo/krasnal/">http://www.olesno.pl/~pablo/krasnal/</a></li>
<li><em>Xamp</em> &#8211; <a href="http://www.apachefriends.org/en/xampp.html">http://www.apachefriends.org/en/xampp.html</a></li>
<li><em>Wamp</em> &#8211; <a href="http://www.wampserver.com/">http://www.wampserver.com/</a></li>
<li><em>Zend</em> &#8211; <a href="http://framework.zend.com/">http://framework.zend.com/</a></li>
<li><em>EasyPHP</em> &#8211; <a href="http://www.easyphp.org/">http://www.easyphp.org/</a></li>
</ul>
<p>Kilka mi znanych rozwiązań, różnie bywa z aktualnością powyższych, ale wybór jest dość spory i trzeba go przemyśleć, szkoda pracy do przeinstalowywania całości.</p>
<h3>Pobieramy i instalujemy wybraną paczkę</h3>
<p>Osobiście wybrałem Zend&#8217;a, pobrać można go <a href="http://www.zend.com/en/downloads/">tutaj</a>, wybrałem wersję Z<em>end Server Community Edition</em> jako, że zapewnia podstawowe funkcje i jest darmowa, tutaj trzeba zaznaczyć, że inne paczki mogą posiadać konfigurację w opcjach i zmiana niektórych wartości ręcznie może, ale nie musi zakłócić ich działania nie mniej jednak każda powinna podać się takim zabiegom. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Wybieram paczkę z php 5.3 logujemy się lub gdy nie posiadamy konta tworzymy je, jest wymagane do pobrania plików, a administratorzy nie są ludźmi bezczelnymi i nie uświadczmy spamu z ich strony.</p>
<p>Instalacja samego oprogramowania jest bardzo prosta i w zasadzie polega na czekaniu i klikaniu dalej, jedyne co przyjdzie nam wybrać to wersja i ścieżka, ja z racji upodobań i podziału systemu umieszczam całość wprost na czystym dysku B:/ przeznaczonym tylko do tego celu. Po zainstalowaniu zostanie odpalona przeglądarka i krótka trzy etapowa konfiguracja, polegająca na zatwierdzeniu regulaminu i podaniu hasła do servera, trudne &#8211; nie! Od teraz posiadamy wstępnie skonfigurowany serwer.</p>
<p>Server jest w wersji ograniczonej każdy może wypróbować pełną wersję trzeba tylko kliknąć jeden z napisów &#8222;Wypróbuj za darmo&#8221; w panelu, dostaniemy kod ważny 30 dni &#8211; może komuś się spodoba i będzie miał za dużo $$, produkt kosztuje kilka tysięcy $, komercyjnie i osobiście zostanę na darmowym apache!</p>
<h3>Konfiguracja</h3>
<p>Server sam w sobie już działa i na dobrą sprawę mógł by już pozostać w tej postaci, ale by  żyło nam się lepiej wymaga kosmetycznych zmian w plikach. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Zabierajmy się do roboty postaram się napisać co i poco modyfikuje.</p>
<h4>Zmiana katalogu głównego</h4>
<p>Katalog główny w podkatalogu servera nie odpowiada mi osobiście i to bardzo, skróty niby istnieją, ale dla bezpieczeństwa wolę przenieść całość na inny dysk. Nie jest to trudne jak wie się gdzie szukać. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Poszukujemy pliku <em>httpd.conf</em> u mnie znajduje się on w <em>B:\Apache2\conf\</em><em>httpd.conf</em> i przechodzimy do jego edycji, ogólnie plik odpowiada za konfigurację servera apache, dodawania modułów i ich wstępną konfigurację.</p>
<p>Odnajdujemy linię:</p>
<blockquote><p>DocumentRoot &#8221;B:\Apache2&#8243;</p></blockquote>
<p>Katalog można zmienić dowolnie, ja wedle wstępnych ustawień zmieniam na <em>H:</em> i zostawiam ten kawałek w takiej formie:</p>
<blockquote><p>DocumentRoot &#8221;H:&#8221;</p></blockquote>
<p>Zaznaczam brak <em>\</em> jest to dość ważna kwestia więc warto pamiętać o tym by nie szukać usterki. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Teraz szukamy:</p>
<blockquote><p>&lt;Directory &#8222;B:\Apache2/htdocs&#8221;&gt;<br />
&#8230;<br />
&lt;/Directory&gt;</p></blockquote>
<p>Jest to konfiguracja katalogu, który jeszcze chwilę temu był katalogiem głównym aplikacji &#8211; zmieniamy na nasz katalog, znów u mnie będzie to wyglądać tak:</p>
<blockquote><p>&lt;Directory &#8222;H:&#8221;&gt;<br />
&#8230;<br />
&lt;/Directory&gt;</p></blockquote>
<p>Teraz w magicznym pliku <em>hosts</em> systemu windows wykonamy przekierowanie, plik znajdziemy <em>C:\Windows\System32\drivers\etc</em> na systemie win7, w nim można dodać przekierowanie w obrębie lokalnej maszyny, tak by wpisując np. <em>localhost2</em> być przekierowywanym do<em> 127.0.0.2</em> itd.. Konstrukcja komendy wyglądać powinna tak:</p>
<blockquote><p>miejsce_gdzie_przekierowujemy link_który_wpisujemy</p></blockquote>
<p>Dla naszych potrzeb podajemy:</p>
<blockquote><p>127.0.0.1        server<br />
127.0.0.1        temp.server<br />
127.0.0.1        www.temp.server</p></blockquote>
<p>Jeśli chcemy mieć możliwość dostępu do kilku projektów bezpośrednio z domeny bez używania katalogów musimy tutaj dla każdego z nich popełnić taki wpis. W powyższym wpisie udostępniłem nazwę <em>server</em> i <em>temp.server</em> przekierowując je na lokalny server.</p>
<p>Teraz po zapisaniu pliku <em>hosts</em> i restarcie servera wpisując w przeglądarkę <em>server</em> lub <em>temp.server</em> otrzymamy dostęp do dysku <em>H lub</em> innego w zależności od wcześniejszego wyboru, oczywiście localhost też funkcjonuje i też wskazuje ten katalog.</p>
<p>Teraz trzeba jakoś rozróżnić wybór naszej subdomeny i na tej podstawie wybrać katalog, jest wiele sposobów które potrafią zautomatyzować cały proces, ale to temat na cały wpis, a nie na jego fragment więc przedstawię najprostszy ręczny sposób. Dla osób chcących coś extra kilka słów kluczowych.<em> Serwer dns</em> i <em>wildcard</em> &#8211; brak potrzeby wpisywania domen do <em>hosts</em> do tego moduł do apache <em>mod_vhost_alias</em> i w sumie tyle. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Do rozróżnienia subdomen posłużymy się tz. wirtualnymi hostami, znów odpalamy <em>httpd.conf</em> i szukamy lini:</p>
<blockquote><p># Virtual hosts<br />
#Include conf/extra/httpd-vhosts.conf</p></blockquote>
<p>Musimy usunąć znak <em>#</em> w ten sposób linia będzie brana pod uwagę podczas startu apache, powinny wyglądać tak:</p>
<blockquote><p># Virtual hosts<br />
Include conf/extra/httpd-vhosts.conf</p></blockquote>
<p>Zapisujemy i przechodzimy do pliku <em>conf/extra/httpd-vhosts.conf</em> jak się domyślacie w nim będziemy zapisywać konfigurację wirtualnych hostów, mogli byśmy to zrobić w pliku konfiguracyjnym apache, ale w ten sposób nie pomieszamy sobie całej konfiguracji, a i w przyszłości będzie nam lepiej nad całością panować.</p>
<p>Tutaj nie za komentowaną (linie poprzedzone znakiem <em>#</em>) część usuwamy i dodajemy:</p>
<blockquote><p>&lt;VirtualHost *:80&gt;<br />
DocumentRoot &#8222;H:\temp/public&#8221;<br />
ServerName temp.server<br />
ServerAlias www.temp.server<br />
&lt;/VirtualHost&gt;</p></blockquote>
<p>Kopiując taki wpis i zmieniając <em>DocumentRoot</em>, <em>ServerName</em> i <em>ServerAlias</em> na inne możemy stworzyć dowolną ilość subdomen, osobiście mam udostępniony cały katalog domowy i dwie subdomeny: <em>temp</em> &#8211; na aktualny projekt i <em>cmssspl</em> &#8211; do ciągłej pracy nad własnym projektem.</p>
<p>Na potrzeby tego kursu dodaję kolejną <em>zf.server, </em>by tego dokonać trzeba dodać dwa wpisy w <em>hosts:</em></p>
<blockquote><p>127.0.0.1        zf.server<br />
127.0.0.1        www.zf.server</p></blockquote>
<p>Przechodzimy do <em>httpd-vhosts.conf</em> i dodajemy kolejnego wirtualnego hosta w taki sposób:</p>
<blockquote><p>&lt;VirtualHost *:80&gt;<br />
DocumentRoot &#8222;H:\zf/public&#8221;<br />
ServerName zf.server<br />
ServerAlias www.zf.server<br />
&lt;/VirtualHost&gt;</p></blockquote>
<p>Teraz wystarczy stworzyć tylko katalog <em>H:\zf/public</em> i sprawdzić czy wszystko działa tak jak powinno, w tym celu restartujemy server i wpisujemy w przeglądarkę:</p>
<blockquote><p>http://temp.server</p></blockquote>
<p>Jeśli wszystko działa powinniśmy zobaczyć zawartość:</p>
<blockquote><p>H:\zf\public</p></blockquote>
<p>Koniec od teraz możemy się cieszyć nowymi subdomenami. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h4>Pliki .htaccess</h4>
<p>Są to pliki konfiguracyjne działające w obrębie jednego katalogu, standardowo są wyłączone a mogą zdziałać cuda np. przyjazne linki, Zend standardowo korzysta właśnie z takich linków więc normą jest ich włączenie &#8211; dziwne, że standardowo postanowiono je wyłączyć.</p>
<p>Jak zwykle wchodzimy do pliku <em>hosts</em> i szukamy ponownie:</p>
<blockquote><p>&lt;Directory &#8222;H:&#8221;&gt;<br />
&#8230;<br />
&lt;/Directory&gt;</p></blockquote>
<p>Linia może wyglądać nieco inaczej, już edytowaliśmy ten fragment konfiguracji, tym razem w obrębie tych znaczników szukamy:</p>
<blockquote><p><em>AllowOverride None</em></p></blockquote>
<p>Zamieniamy na:</p>
<blockquote><p>AllowOverride All</p></blockquote>
<p>Teraz szukamy:</p>
<blockquote><p>&lt;Directory /&gt;<br />
Options FollowSymLinks<br />
AllowOverride None<br />
Order deny,allow<br />
Deny from all<br />
&lt;/Directory&gt;</p></blockquote>
<p>I znów w tym kawałku zamieniamy <em>AllowOverride None</em> na <em>AllowOverride All</em>. Zmienna odpowiada za udostępnieni nadpisywania konfiguracji poprzez pliki .htaccess, czyli właściwie odpowiada za umożliwienie używania tych plików, teraz możemy się już cieszyć urokami <em>.htaccess</em>.</p>
<h4>Wyświetlanie błędów</h4>
<p>Standardowo server ukrywa informacje o błędach by osoby przypadkowe osoby przeglądające nasz serwis nie dostawały szczegółowych opisów &#8222;co z naszą aplikacją jest nie tak&#8221;, takie działanie w naszym wypadku jest nie na miejscu w końcu chcemy mieć ułatwioną pracę i widzieć błędy.</p>
<p>Musimy odnaleźć plik konfiguracyjny php, nazywa się php.ini i w moim przypadku znajduje się w:</p>
<blockquote><p>B:\ZendServer\etc\php.ini</p></blockquote>
<p>W pliku tym musimy odnaleźć dwa fragmenty:</p>
<blockquote><p>error_reporting  =  E_ALL</p></blockquote>
<p>I dopilnować by był właśnie w tej postaci, a inne <em>error_reporting  =  *</em> były poprzedzone znacznikiem komentarza, w tym przypadku jest to <em>;</em>, teraz szukamy:</p>
<blockquote><p>display_errors = Off</p></blockquote>
<p>I zamieniamy na:</p>
<blockquote><p>display_errors = On</p></blockquote>
<p>Od tej pory nasza aplikacja będzie nam na bieżąco wyświetlać wszystkie błędy, nawet te najdrobniejsze.</p>
<h3>Wyjaśnień słów kilka</h3>
<p>Od teraz katalogiem głównym aplikacji w tym kursie będzie:</p>
<blockquote><p>H:\zf\public</p></blockquote>
<p>A subdomeną którą będę się posługiwać:</p>
<blockquote><p>http://zf.server/</p></blockquote>
<p>Dla osób chcących tak jak ja ułatwić sobie pracę i za każdym razem nie musieć w<em> cmd</em> wchodzić do katalogu servera mogą zastosować taki mały trik, w katalogu <em>H:\zf</em>tworzymy plik <em>zend.bat</em> a w jego treści:</p>
<blockquote><p>cmd<br />
pause</p></blockquote>
<p>Od teraz odpalając ten plik będziemy od razu w głównym katalogu naszej aplikacji, tym samym zaoszczędzamy nasz czas. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Podsumowanie</h3>
<p>Mam nadzieję, że każdemu udało się skonfigurować serwer wedle własnych upodobań bez większych kłopotów, mam też nadzieję, że nie pominąłem czegoś istotnego starałem się by nie było żadnych braków, jeśli macie jakieś pytania piszcie &#8211; postaram się pomóc!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://cmsss.pl/zf-02-konfiguracja-servera-na-potrzeby-kursu-zf/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[ZF #01] Pierwszy projekt</title>
		<link>http://cmsss.pl/zf-01-pierwszy-projekt/</link>
		<comments>http://cmsss.pl/zf-01-pierwszy-projekt/#comments</comments>
		<pubDate>Sun, 15 Jan 2012 23:31:15 +0000</pubDate>
		<dc:creator>Load</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[akcja]]></category>
		<category><![CDATA[controler]]></category>
		<category><![CDATA[kontroler]]></category>
		<category><![CDATA[nowy projekt]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Poradnik]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[widok]]></category>
		<category><![CDATA[Wprowadzenie]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Zend Framework od podstaw]]></category>
		<category><![CDATA[zf]]></category>
		<category><![CDATA[zf.bat]]></category>

		<guid isPermaLink="false">http://cmsss.pl/?p=94</guid>
		<description><![CDATA[Wstęp Odpalimy naszą pierwszą aplikację i na jej podstawie powiem coś o strukturze katalogów, plikach i kodzie w nich zawartym &#8211; same podstawowe informacje o funkcjonowaniu Zenda. Na ich podstawie każdy powinien umieć uruchomić swoją pierwszą stronę opartą o Zend.  Pobieramy Framweork Pierwszą czynnością jaką musimy wykonać jest pobranie samego frameworka, możemy pobrać go tutaj, [...]]]></description>
			<content:encoded><![CDATA[<h3>Wstęp</h3>
<p>Odpalimy naszą pierwszą aplikację i na jej podstawie powiem coś o strukturze katalogów, plikach i kodzie w nich zawartym &#8211; same podstawowe informacje o funkcjonowaniu Zenda. Na ich podstawie każdy powinien umieć uruchomić swoją pierwszą stronę opartą o Zend.</p>
<h3> Pobieramy Framweork</h3>
<p>Pierwszą czynnością jaką musimy wykonać jest pobranie samego frameworka, możemy pobrać go <a href="http://framework.zend.com">tutaj</a>, klikamy na wielki napis &#8222;Download New&#8221; i pobieramy interesującą nas paczkę, do wyboru mamy sam fw jak i z serverem lub dokumentacją. Jeśli nie chcemy żadnych dodatków klikamy na <em>Zip</em> lub <em>tar.gz</em> obok &#8222;Zend Framework 1.11.11 Minimal&#8221;, wersja oczywiście może się różnić od tej opisywanej tutaj. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h3>Co dalej?</h3>
<p>W paczce znajdziemy kilka folderów i plików, najważniejszym jest katalog <em>library</em> zawiera on wszystkie biblioteki Zend&#8217;a i na dobrą sprawę wystarczył by nam do wszystkiego, ale po co utrudniać sobie życie? Wrócimy do niego w dalszej części, katalog <em>bin</em> zawiera plik <em>zf.bat</em> dzięki niemu możemy wykonywać pewne operacje na naszej aplikacji nie odpalając naszego ide. Proponuję całą zawartość katalogu <em>bin</em> wrzucić do <em>C:\Windows</em> dzięki czemu korzystając w przyszłości z niego nie będziemy zmuszeni podawać całej ścieżki do pliku a tylko nazwę pliku <em>zf.</em></p>
<h3><em></em>Server</h3>
<p>Jak pewnie wiecie (a jeśli nie, to czas przeczytać pierwszy wpis) aplikacje php potrzebują servera, tutaj jest kilka możliwości:</p>
<ul>
<li>Server w sieci</li>
<li>Server na naszym Pc</li>
<ul>
<li>Gotowe rozwiązanie</li>
<li>Ręczna instalacja</li>
</ul>
</ul>
<p>Osobiście polecam w etapie produkcyjnym rozwiązanie drugie, nie jest istotne czy zainstalujecie całą paczkę ręcznie czy użyjecie jakiejś gotowej. Jeśli nie masz jeszcze servera powinieneś się w niego zaopatrzyć. W dalszym etapie będę opisywać poczynania na maszynie lokalnej &#8211; tak jest wygodniej i oszczędzamy na opóźnieniach ftp.</p>
<h3>Gdy mamy już server</h3>
<p>Otwieramy konsolę cmd, standardowo znajdujemy się C:\User\<em>nazwa_użytkownika</em> używając komendy <em>cd ..</em> wychodzimy katalog do góry, a wpisując ścieżkę <em>cd C:\Users\<em>nazwa_użytkownika</em>\Desktop</em> dostaniemy się na pulpit (Windows 7) dla xp będzie to inna ścieżka &#8211; krótkie przypomnienie dla osób nie korzystających na codzie z konsoli.</p>
<p>Teraz możemy stworzyć nasz pierwszy projekt, wydajemy polecenie <em>zf create project nazwa_projektu</em>, jeśli wcześniej nie wkleiłeś pliku <em>zf.bat</em> do katalogu <em>C:/Windows</em> musisz podać pełną ścieżkę do pliku <em>zf.bat</em> np. <em>C:/katalog/zf create project nazwa_projektu</em> lub wejść do niego za pomocą komendy <em>cd</em>. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>W oknie cmd powinniśmy dostać komunikat z ścieżką do nowo stworzonego projektu w moim przypadku jest to <em>C:\Users\<em>nazwa_użytkownika</em>\Desktop\nazwa_projektu</em>. Najlepiej wykonywać te operacje od razu w katalogu <em>www</em> naszego servera tym samym zaoszczędzimy sobie przenoszenia plików.</p>
<h3>Co zawiera magiczny katalog <em>nazwa_projektu</em></h3>
<p>Zawartość katalogu <em>nazwa_projektu</em> powinna wyglądać tak:</p>
<p><img class="alignnone" src="http://screenup.pl/set/12-01/170ww5j55bcm4145.jpg" alt="" width="202" height="383" /></p>
<p>Krótkie opisy poszczególnych katalogów i plików:</p>
<ul>
<li><em>application</em> &#8211; zawiera naszą aplikację</li>
<ul>
<li><em>configs</em> &#8211; jak sama nazwa mówi, katalog w którym znajdują się pliki konfiguracyjne całej aplikcji</li>
<ul>
<li><em>application.ini</em> &#8211; główny plik konfiguracyjny aplikacji</li>
</ul>
<li><em>controllers</em> &#8211; tutaj znajdują się kontrolery, każdy plik to jeden kontroler</li>
<li><em>models</em> &#8211; modele aplikacji</li>
<li><em>views &#8211; </em>miejsce na widoki aplikacji</li>
<ul>
<li><em>helpers </em>- pomocnicy widoku</li>
<li><em>scripts</em> &#8211; główne pliki widoku<em></em></li>
</ul>
<li><em>Bootstrap.php </em>- miejsce wstępnej konfiguracji i naszego kodu, plik jest wykonywany na wstępie naszej aplikacji</li>
</ul>
<li><em>docs</em> &#8211; dokumentacja projektu (nie interesuje nas)</li>
<li><em>library &#8211; </em>pusty katalog do którego należy wkleić pobrany wcześniej katalog o takiej samej nazwie zawierają biblioteki</li>
<li><em>pubpic &#8211; </em>główny katalog servera www</li>
<li><em>test &#8211; testy naszej aplikacji </em> (nie interesuje nas)</li>
<li>plik <em>.zfproject.xml</em> &#8211; plik wykorzystywanie przez <em>zf.bat</em> przechowuję strukturę naszej aplikacji<em> </em> (nie interesuje nas)</li>
</ul>
<p>Pliki oznaczone jako <em> (nie interesuje nas)</em> zostawiamy w spokoju, na tym etapie nie są nam potrzebne wiec jeśli ktoś ma kaprys by pozbyć się nie potrzebnych elementów to śmiało może usunąć je.</p>
<h3>Konwencja MVC</h3>
<p>Część z Was pewnie jest ciekawa czym są magiczne kontrolery, widoki i modele &#8211; więc śpieszę z wyjaśnieniem.</p>
<p>Zf jest oparty na MVC, co to znaczy? MVC jest jednym z wielu wzorców programowania, ostatnimi czasy stał się bardzo modny zawdzięcza to jasnym podziałom między trzema częściami aplikacji M (model), V (widok), C (kontroler).</p>
<p>Kontroler zawiera w sobie konstrukcje sterujące, przyjmuje dane od użytkownika i na ich podstawie decyduje o potrzebnych danych prosi o nie model, on zaś kontaktując się np. z mysql pobiera je i przekazuje kontrolerowi, kontroler wywołuje odpowiedni widok i wysyła mu gotowe dane do wyświetlenia. Widok zawiera kod html i wstawki php z danymi otrzymanymi od kontrolera. Pomieszane? Nieee, wystarczy zobaczyć jak taki podział funkcjonuje i dostrzec jego zalety.</p>
<h3>Kontrolery i akcje</h3>
<p>Tak jak pisałem już w podczas krótkiego opisu MVC, kontroler decyduje o przyjęciu, zarządzaniu danymi kierując naszą aplikacją od czasu wywołania do przekazania danych do widoku.</p>
<p>Zaczniemy od początku, nowo stworzony projekt ma dwa kontrolery index i error odpowiednio w plikach <em>IndexController.php</em> i <em>ErrorController.php</em> w katalogu z kontrolerami.</p>
<p>W pliku <em>IndexController.php</em> znajduje się kod kontrolera:</p>
<blockquote>
<pre>&lt;?php

class IndexController extends Zend_Controller_Action
{
    public function init()
    {
        /* kod uruchamiany przy starcie kontrolera index */
    }

    public function indexAction()
    {
        // akcja kontrolera index
    }

}</pre>
</blockquote>
<p>Jak widzimy kontroler definiujemy poprzez utworzenie pliku o nazwie <em>Nazwa_kontroleraController.php </em>w odpowiednim katalogu, a w jego wnętrzu jest zadeklarowana klasa o nazwie <em>Nazwa_kontroleraController </em>dziedzicząca po <em>Zend_Controller_Action. </em></p>
<p>W wnętrzu klasy widzimy metody, metody naszego autorstwa jak i aplikacji. Metoda <em>init(){&#8230;}</em>jest wywoływana zawsze przy użyciu kontrolera w którym jest zamieszczona, jej rolę można porównać do konstruktora, możemy w niej zadeklarować zmienne używane przez akcję, szablon itd. Drugą metodą jest <em>indexAction(){&#8230;} </em>jest to akcja naszego kontrolera, możemy zdeklarować ich dowolną ilość, a ich nazwa składa się z nazwy akcji i tekstu Action, w całości <em>nazwa_akcjiAction()</em>.</p>
<h3>Jak uruchomić kontroler i akcje</h3>
<p>Czas zobaczyć pierwsze efekty naszych działań &#8211; zaczynamy. Przenosimy pliki naszego projektu do folderu <em>www</em>, przypominam że głównym katalogiem servera powinien być katalog <em>www/public</em>.</p>
<p>Załóżmy posiadanie domeny <em>domena.pl</em> równie dobrze może być nią <em>localhost</em>. Standardowo Zend używa pliku .htaccess do przekierowywania wszystkich wywołań nie kierujących do istniejącego zasobu na plik index.php który inicjuje naszą aplikację, zgodnie z tą zasadą linki:</p>
<blockquote>
<ul>
<li>www.domena.pl</li>
<li>www.domena.pl/index.php</li>
<li>www.domena.pl/index.php/index</li>
<li>www.domena.pl/index.php/index/index</li>
<li>www.domena.pl/index</li>
<li>www.domena.pl/index/index</li>
</ul>
<ul>
<li>www.domena.pl/nie_istniejący_plik.php</li>
</ul>
</blockquote>
<p>Dadzą taki sam efekt czyli uruchomią plik index.php umieszczony w katalogu public, co będzie równoznaczne z uruchomieniem naszej aplikacji.</p>
<p>Pierwsza grupa linków uruchomią kontroler o nazwie <em>index</em> i kontroler o takiej samej nazwie, z tego możemy wywnioskować &#8211; gdy nie zostanie podana nazwa kontrolera lub/i akcji automatycznie zostanie uruchomiona akcja <em>index</em> z kontrolera <em>index</em>, zaś gdy podamy sam kontroler domyślnie zostanie uruchomiona jego akcja <em>index</em>.</p>
<p>Po wejściu na te linki powinniśmy zobaczyć standardowy ekran Zf:</p>
<p><img class="alignnone" src="http://screenup.pl/set/12-01/x39997eghp398qeh.jpg" alt="" width="496" height="334" /></p>
<p>Mając powyższe na uwadze możemy zapisać wzór:</p>
<blockquote><p>www.domena.pl/nazwa_kontrolera/nazwa_akcji</p></blockquote>
<p>Uruchomi on kontroler <em>nazwa_kontrolera</em> i akcje <em>nazwa_akcji</em>, jeśli nie zostaną zdeklarowane zostanie użyte standardowe o nazwie <em>index</em>.</p>
<h3>Co się stanie gdy podamy nie istniejący kontroler lub akcję?</h3>
<p>Gdy system nie będzie mógł odnaleźć wskazanej przez nas akcji bądź kontrolera zostanie uruchomiony kontroler <em>error</em> i jego akcja <em>error</em>, domyślnie po stworzeniu projektu taki kontroler istnieje i zajmuje się zarządzaniem błędami jego kod możemy znaleźć w katalogu <em>aplication/controller/error</em>. Zobaczmy więc jak będzie wyglądała strona błędu, poniższe linki są jednoznaczne:</p>
<blockquote>
<ul>
<li>www.domena.pl/nie_ma_takiego_kontrolera</li>
<li>www.domena.pl/index/nie_ma_takiego_kontrolera</li>
<li>www.domena.pl/error/error</li>
</ul>
</blockquote>
<p>Strona będzie wyglądać tak:</p>
<p><img class="alignnone" src="http://screenup.pl/set/12-01/089i0e01wfdyq03m.jpg" alt="" width="290" height="140" /></p>
<h3>Widoki</h3>
<p>Na koniec przydało by się coś wspomnieć o widokach aplikacji, znajdują się do katalogu <em>views</em> i działają niczym szablony w akcjach przekazujemy do nich zmienne, a w nich je wyświetlamy używając php i klas Zend&#8217;a w przeciwieństwie np. od Smarty który ma własny język szablonów zamieniany na kod php.</p>
<p>Widoki odpowiadają akcjom, uruchamiając kontroler index i akcję index w katalogu z plikami widoków <em>application\views\scripts</em> musi istnieć katalog o nazwie kontrolera a w nim plik o nazwie akcji z rozszerzeniem <em>.phtml</em>. Zostanie on wywołany w momencie uruchomienie akcji mu odpowiadającej.</p>
<p>Nie chcę wgryzać się głębiej w widok ponieważ musiał bym tłumaczyć jego działanie, a tym się zajmę w innym wpisie, nadmienię że brak widoku aktywowanej akcji doprowadzi do błędu w aplikacji.</p>
<h3>Podsumowanie</h3>
<p>Dowiedzieliśmy się jak stworzyć projekt, czym są kontrolery, akcje i jak funkcjonują. Jest to sam wstęp wstępu więc czekajcie na następne wpisy, ale dzięki tym informacją każdy z Was powinien móc utworzyć statyczną stronę z kilkoma podstronami.</p>
<p>Mam nadzieję, że język jak i przykłady przytaczane są dość jasne i każdy z Was zrozumiał co miałem na myśli, nie jestem specjalistą od pióra, a przynajmniej nie w pisaniu poradników, co mam nadzieję się zmieni postaram się by każdy kolejny tekst był lepszy i lepszy od poprzedniego. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://cmsss.pl/zf-01-pierwszy-projekt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[ZF #00] Zend Framework &#8211; Wprowadzenie</title>
		<link>http://cmsss.pl/zf-00-zend-framework-wprowadzenie/</link>
		<comments>http://cmsss.pl/zf-00-zend-framework-wprowadzenie/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 20:39:06 +0000</pubDate>
		<dc:creator>Load</dc:creator>
				<category><![CDATA[Kurs]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[action]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[framework.zend.com]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Poradnik]]></category>
		<category><![CDATA[Wprowadzenie]]></category>
		<category><![CDATA[Wstęp]]></category>
		<category><![CDATA[Zend]]></category>
		<category><![CDATA[Zend Framework od podstaw]]></category>
		<category><![CDATA[zend-framework.pl]]></category>
		<category><![CDATA[ZF2]]></category>

		<guid isPermaLink="false">http://cmsss.pl/?p=89</guid>
		<description><![CDATA[Wstęp Dowiemy się co to takiego jest ten &#8222;Zend Framework&#8221;, gdzie można poczytać na jego temat, dla kogo jest skierowany i w czym może nam pomóc, wspomnę również o lekturach dla początkujących w które można lecz nie trzeba się zaopatrzyć. Czym jest Zend Framework? Zend jak każdy framework jest aplikacją, a w zasadzie tylko jej [...]]]></description>
			<content:encoded><![CDATA[<h3>Wstęp</h3>
<p>Dowiemy się co to takiego jest ten &#8222;Zend Framework&#8221;, gdzie można poczytać na jego temat, dla kogo jest skierowany i w czym może nam pomóc, wspomnę również o lekturach dla początkujących w które można lecz nie trzeba się zaopatrzyć.</p>
<h3>Czym jest Zend Framework?</h3>
<p>Zend jak każdy framework jest aplikacją, a w zasadzie tylko jej szkicem daje nam wiele możliwości i znacznie upraszcza pracę z kodem, choć na początku ogrom informacji w jaki musimy się zaopatrzyć może wskazywać na coś zupełnie innego. Zf daje nam wiele klas które możemy wykorzystać w naszych projektach od prostych operacji na bazie poprzez tworzenie i wyświetlanie plików pdf, aż do bibliotek obsługujących za nas całą robotę związaną z formularzami.</p>
<h3>www.framework.zend.com</h3>
<p>Główna strona projektu -<a href="http://framework.zend.com"> Zend Framework</a> możemy z niej pobrać aktualne wydanie fw (<a href="http://devzone.zend.com/article/17338-Zend-Framework-1.11.11-Released" target="_blank">1.11.11</a>) jak i wersję testowe (<a href="http://devzone.zend.com/article/17798-Zend-Framework-2.0.0beta1-Released" target="_blank">2.0.0beta1</a>). Strona zapewnia nam obszerną dokumentację w kilku językach, niestety język polski był dostępny tylko do czasu i tylko w części, jego kopię można znaleźć na <a href="http://www.zend-framework.pl/manual/">www.zend-framework.pl/manual</a>. Tak jak pisałem jest częściowo przetłumaczona, dla osób nie znających j. angielskiego jest to jakieś wyjście. Tłumaczenie trwa jednak nadchodzący ZF2 różniący się dość sporo do swojego poprzednika zniechęca tłumaczy &#8211; szkoda ich pracy.</p>
<h3>ZF dla każdego?</h3>
<p>Nie, stanowczo nie! Jeśli nie znasz OOP lub podstaw php czas zacząć naukę &#8211; nie znając mechanizmów działania programowania obiektowego ciężko zabierać się za pracę z urządzeniem wyciskającym z niego ósme soki. W sieci znajduje się bardzo dużo kursów dla początkujących i średnio zaawansowanych &#8211; wystarczy poszukać. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Jednak jak masz podstawy to możesz wystartować z tym potworem już po kilku godzinach, a Twój projekt będzie czymś więcej niż &#8222;Hello word&#8221;.</p>
<p>Zend przede wszystkim pokazuje nam jak powinien wyglądać przepływ informacji i dostarcza ogromną ilość gotowych modułów odwalających za nas brudną robotę, idealnym przykładem jest Zend_Form, za pomocą tej klasy możemy stworzyć formularz, dodać do niego odpowiednie ograniczenia i od tej pory wyświetlanie formularzu odbywa się poprzez wpisanie jednej linii kodu, gdy zostanie on wysłany zf sam sprawdzi wszystkie pola wedle kryterium podanego wcześniej i w razie potrzeby wygeneruje odpowiedni błąd. Tworzenie takiego formularza ogranicza się tak na prawdę do stworzenia klasy, a w jej ciele użycie kilku funkcji &#8211; ciężko to opisać bez przykładów a nie chcę mieszać już na starcie. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Książki o Zf</h3>
<p>Na rynku w języku polskim jest niewiele książek,które tak na prawdę mogą się nam przydać, jedynym wartym polecenia i w miarę aktualnym jest &#8222;Zend Framework od podstaw&#8221; Włodzimierza Gajdy ~530 stron tylko o Zend&#8217;zie za 89zł, Helion często daje rabaty wystarczy codziennie sprawdzać <a href="http://helion.pl/ksiazki/zend-framework-od-podstaw-wykorzystaj-gotowe-rozwiazania-php-do-tworzenia-zaawansowanych-aplikacji-internetowych-wlodzimierz-gajda,zendfr.htm">tutaj</a>.</p>
<h3>Podsumowanie</h3>
<p>Suche informacje, bez kodu by nie wprowadzać zamieszania, warto przeczytać by mieć jakiś pogląd na sytuację i nie podbijać słońca z pióropuszem na głowie.</p>
]]></content:encoded>
			<wfw:commentRss>http://cmsss.pl/zf-00-zend-framework-wprowadzenie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pierwsza notka</title>
		<link>http://cmsss.pl/pierwsza-notka/</link>
		<comments>http://cmsss.pl/pierwsza-notka/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 19:46:48 +0000</pubDate>
		<dc:creator>Load</dc:creator>
				<category><![CDATA[Ogólna]]></category>
		<category><![CDATA[Ogólny]]></category>
		<category><![CDATA[Projekt]]></category>
		<category><![CDATA[Shadow Site]]></category>

		<guid isPermaLink="false">http://cmsss.pl/?p=85</guid>
		<description><![CDATA[Wstęp Nazywam się Damian Load Domański, a to jest mój dzienniczek w którym zamierzam opisywać co ciekawsze doświadczenia z informatyką i wszystkim co jest z nią związane mam nadzieję, że nikt się nie pogniewa by ten blog był wykorzystywany również jak portfolio. Kim jestem Skromny 20 latek zaciekawiony internetem i ludzkimi osobowościami, zamieszkały w pięknym [...]]]></description>
			<content:encoded><![CDATA[<h3>Wstęp</h3>
<p>Nazywam się Damian Load Domański, a to jest mój dzienniczek w którym zamierzam opisywać co ciekawsze doświadczenia z informatyką i wszystkim co jest z nią związane mam nadzieję, że nikt się nie pogniewa by ten blog był wykorzystywany również jak portfolio. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Kim jestem</h3>
<p>Skromny 20 latek zaciekawiony internetem i ludzkimi osobowościami, zamieszkały w pięknym małym mieście jakim jest Świdnik (okolice Lublina) &#8211; o tym pięknym miasteczku można by sporo pisać więc polecam dla miłośników historii.</p>
<p>Programowaniem interesuję się od dobrych 8 lat, pierwsze kroki stawiałem uczęszczając do szkoły podstawowej &#8211; o ile programowaniem można było nazwać tworzenie stron w pajączku, widząc jednak spore braki tego narzędzia szybko zacząłem przygodę z html&#8217;em, php, mysql&#8217;em i css&#8217;em &#8211; dokładnie w tej kolejności, nie wiem czemu, ale css wydawał się strasznie zamieszany w porównaniu do php choć sam już nie wiem czym nie była to po prostu chęć podbicia świata. Tego czasu byłem maluszkiem chcącym wiedzieć o informatyce wszystko, więc php dawało większe możliwości i jakąś interaktywność. Jenak wróciłem do nauki podstaw i cięcie grafiki jest na chwile obecną moim ulubionym zajęciem.</p>
<p>Tutaj już po pewnym czasie, mając kilka projektów odpłatnych za sobą zacząłem cierpieć z powodu braku narzędzi do pracy, cięcie grafiki i podpinanie jakiś prostych autorskich cms&#8217;ów zaczęło być nudne &#8211; tutaj gdzieś zaczął się z php.pl i czytaniem wielu blogów tematycznych, poznanie kilku świetnych ludzi i próby nauki framework&#8217;ów.</p>
<p>Pojawił się serwis nastolatek.pl (teraz <a href="http://nastek.pl">nastek.pl</a>) i jego administracja, całkiem spory portal z ogromnym forum, wraz z innym programistą przez ponad rok czuwaliśmy pieczę nad kodem rozwijając i poprawiając go. Niestety serwis został wykupiony przez gg i przejęty przez ich wewnętrznych specjalistów &#8211; o ich pracy już nic mówił nie będę.</p>
<h3>Przyszłość</h3>
<p>Teraz trochę czasu już minęło, projektów się przesypało i myślę nad własnym projektem, z czasem wszystko stanie się jasne. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  A tymczasem będę pisać bloga o postępach prac jak i postaram się poprowadzić kurs Zend Framework naprzemian z jQuery, nie obiecuję jakiejś rozkładówki, ale możecie być pewni pojawienia się kilku wpisów.</p>
<h3>Projekt Cmsss.pl</h3>
<p>Projekt jest w wczesnej fazie rozwoju, zbierania ludzi jak i stawiania celów, zobaczymy co z tego wyjdzie.</p>
<p>Ogólnie pisząc ma za zadania dostarczyć narzędzia początkującym programistom jak i przekonać ich do korzystania z framework&#8217;ów &#8211; a w jaki sposób, to już tajemnica!</p>
<h3>Podsumowanie</h3>
<p>Nie chciałem się tutaj jakoś rozpisywać, więc jest to krótki wpis o niczym jak i o wszystkim. <img src='http://cmsss.pl/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  Strona ma szablon o statusie &#8222;w budowie&#8221;, z czasem coś podreperuję &#8211; całość była przygotowywana pod autorski cms i przystosowana &#8222;na szybko&#8221; do wordpres.</p>
]]></content:encoded>
			<wfw:commentRss>http://cmsss.pl/pierwsza-notka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

