<?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>adamczuk.net.pl &#187; PHP</title>
	<atom:link href="http://adamczuk.net.pl/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://adamczuk.net.pl</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 14 Aug 2010 10:26:07 +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>myBlog &#8211; prosta platforma blogowa</title>
		<link>http://adamczuk.net.pl/2010/07/20/myblog-prosta-platforma-blogowa/</link>
		<comments>http://adamczuk.net.pl/2010/07/20/myblog-prosta-platforma-blogowa/#comments</comments>
		<pubDate>Tue, 20 Jul 2010 16:21:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projekty]]></category>
		<category><![CDATA[XHTML]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[js]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=328</guid>
		<description><![CDATA[Nieoficjalne przedstawienie prostej, autorskiej platformy blogowej.]]></description>
			<content:encoded><![CDATA[<p>Istnieje wiele platform blogowych. Część z nich to niezależne silniki jak <a href="http://wordpress.org/">WordPress</a>, czy <a href="http://www.movabletype.org/">MovableType</a>, a inne to produkty zintegrowane z konkretnymi serwisami, jak <a href="http://www.blogger.com/">Blogger</a> czy <a href="http://www.tumblr.com/">Tumblr</a>. Istnieje również wiele polskich serwisów, które pozwalają na szybkie stworzenie dziennika internetowego i bezstresowe blogowanie. Najpopularniejsze to <a href="http://jogger.pl/">Jogger</a> i <a href="http://www.blox.pl/">Blox</a>. Zdarza się, że powyższe rozwiązania nie spełniają naszych oczekiwań, co wówczas prowadzi do wyważania otwartych drzwi.<br />
<span id="more-328"></span></p>
<p>Tworzenie aplikacji internetowych to skomplikowany, czasochłonny i nie zawsze opłacalny proces.</p>
<p><quote>Dlaczego wielu programistów pisze własne aplikacje, frameworki, biblioteki i inne rozwiązania?</quote></p>
<p>Po prostu wychodzą z przekonania, że sami zrobią to lepiej. Czasami zdarza się, że dzięki temu podejściu rodzą się prawdziwe perełki. Często wielkie molochy tracą klientów, użytkownicy znajdują produkty skrojone na miarę ich potrzeb i każdy może być zadowolony.</p>
<p>Pozostałe przypadki to zmarnowany potencjał, czas i zasoby, bo projekt umiera, zanim rozpoczął żywot. Dopóki nie rozpoczniesz tworzenia nowej jakości nie będziesz, miał pewności co do swojej wartości.</p>
<h3>Właściwy wpis</h3>
<p>Często zastanawia mnie kształt moich wypowiedzi formułowanych w stanie, jak najbardziej trzeźwym. Jestem przecież człowiek technicznych, któremu nie obce powinno być prasowanie, ale już bogaty język podczas wszelkich wypowiedzi, co najmniej zadziwia.</p>
<p>Człowiek uczy się przez lata, choć nie zawsze ma na to czas i chęci. Najlepszym przykładem moich osiągnięć jest <a href="http://squarezone.pl/">SquareZone</a>. Prosty, ale funkcjonalny serwis, który przystępnie oferuje informacje użytkownikom. Tym razem przyszedł czas na nowy przykład.</p>
<p><strong>MyBlog</strong> &#8211; nazwa kodowa powinna być bardziej tajemnicza, ale projekt jest w zbyt wczesnym stadium, mimo wielomiesięcznej pracy przy jego tworzeniu. Otóż wspomniana aplikacja oferuje lub będzie oferowała w przyszłości funkcjonalności znane z popularnych systemów blogowych.</p>
<p>Architektura systemu po części czerpała ze znanego Wordpressa, jednak największym atutem omawianej aplikacji jest wydajność i zgodność ze standardami. Wszystkie testy i szczegóły zostaną przedstawione wkrótce. Niedługo postaram się przedstawić kolejne funkcjonalności oraz założenia rozwojowe.</p>
<p>Obecnie nie mam pewności czy kod źródłowy zostanie udostępniony publicznie, jednak wszelkie opinie na temat działania lub architektury są mile widziane.</p>
<p>Wersja demonstracyjna <a href="http://demo.ladamczuk.kei.pl">myBlog</a>dostępna jest w sieci.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/07/20/myblog-prosta-platforma-blogowa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LAMP i WAMP</title>
		<link>http://adamczuk.net.pl/2010/02/08/lamp-i-wamp/</link>
		<comments>http://adamczuk.net.pl/2010/02/08/lamp-i-wamp/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 20:01:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[wamp]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=268</guid>
		<description><![CDATA[Krótki przegląd pakietów LAMP i WAMP.]]></description>
			<content:encoded><![CDATA[<p>Od razu zaznaczam, że nie będę przekonywał nikogo o wyższości jednego rozwiązania na drugim. Osoby znające te skróty zapewne znają ich pochodzenie i wiedzą do czego służą. Dalsza część artykułu przedstawia najpopularniejsze pakiety wolnego oprogramowania do obsługi witryn internetowych, sposoby instalacji i konfiguracji.<span id="more-268"></span></p>
<p>Podstawowe składniki takich platform to serwer Apache, baza danych MySQL oraz interpreter PHP, które przydają się podczas programowania i testowania aplikacji internetowych na lokalnym komputerze. Poszczególne elementy powstały niezależnie, ale razem tworzą znakomity zestaw, którego koszt jest niski w porównaniu z komercyjnymi rozwiązaniami.</p>
<p>Istnieje jeszcze kilka zalet takiego rozwiązania. Serwer lokalny jest darmowy, możliwa jest zmiana jego ustawień i działa nawet przy braku połączenia z internetem. Konta hostingowe często są płatne, ale nie zawsze. Tak samo jest z ustawieniami, które ze względów bezpieczeństwa często są niedostępne dla użytkowników. Ostatnim minusem jest połączenie z internetem, niezbędne dla dostępu do strony.</p>
<h3>LAMP</h3>
<p>W przypadku GNU/Linux sprawa jest bardzo prosta, ponieważ wymienione komponenty są dostępne dla większości dystrybucji. Mimo, tego zawsze możliwe jest ściągnięcie aktualnej wersji z internetu lub repozytorium. Najpewniej będą to poniższe polecenia.</p>
<pre><code>sudo apt-get install apache2</code></pre>
<pre><code>sudo apt-get install php5</code></pre>
<pre><code>sudo apt-get install mysql</code></pre>
<h3>WAMP</h3>
<p>W przypadku Windowsa istnieją paczki, które po instalacji pozwalają na korzystanie ze wszystkich elementów. Cały proces sprowadza się często do wyboru miejsca instalacji oprogramowania. Większość elementów zostanie od razu poprawnie skonfugurowana.</p>
<h4>Krasnal Serv</h4>
<p><a href="http://www.olesno.pl/~pablo/krasnal/">Krasnal Serv</a> to darmowe oprogramowanie, które umożliwia uruchomienie własnego serwera typu WAMP. Możliwe jest uruchomienie serwera WWW bez potrzeby konfigurowania Apache&#8217;a i innych elementów w systemie Microsoft Windows. Najnowsza wersja (2.7) pozwala na przełączanie się w locie między PHP4 i PHP5. Serwer działa niestabilnie w przypadku systemów Windows 9.x/ME.</p>
<p>Skład serwera w wersji 2.7 stanowi:</p>
<ul>
<li>Apache 1.3.31</li>
<li>PHP 4.3.9 + SQLite</li>
<li>PHP 5.0.2</li>
<li>MySQL 3.23.58</li>
<li>ActivePerl 5.6.1.628</li>
<li>phpMyAdmin 2.6.2 pl2</li>
<li>Zend Optimizer 2.0.3</li>
<li>CesarFTP 0.99g</li>
<li>Webalizer 2.1</li>
<li>Free SMTP Server</li>
<li>SQLiteManager 1.0.1</li>
</ul>
<h4>VertrigoServ</h4>
<p><a href="http://vertrigo.sourceforge.net/">VertrigoServ</a> to serwer, którego używałem przez długi czas. Poprzednio stosowałem KrasnalServ, który jednak zbyt wolno się rozwija, jeśli w ogóle. Składniki tego serwera są o wiele aktualniejsze.</p>
<p>Serwer w wersji 2.21 zawiera:</p>
<ul>
<li>Apache 2.0.63</li>
<li>PHP 5.2.6</li>
<li>MySQL 5.0.51b</li>
<li>SQLite 3.5.9</li>
<li>Smarty 2.6.19</li>
<li>PhpMyAdmin 2.11.7</li>
<li>ZendOptimizer 3.3.3</li>
<li>SQLiteManager 1.2.0</li>
</ul>
<h4>WampServer</h4>
<p><a href="http://www.wampserver.com/">WampServer 2</a> to darmowy pakiet typu WAMP. Umożliwia instalację, uruchamianie oraz obsługę w systemie MS Windows serwera WWW opartego na serwerze Apache, interpretera skryptów PHP oraz serwera baz danych MySQL.</p>
<p>WampServer 2 nazywany wcześniej WAMP5 jest platformą opartą na licencji GPL. Jej głównym twórcą jest Francuz Romain Bourdon, którego wspiera społeczność portalu <a href="http://www.phpteam.net/">phpteam.net</a>.</p>
<p>WampServer w wersji 2.0 zawiera:</p>
<ul>
<li>Apache 2.2.11</li>
<li>PHP 5.3.0</li>
<li>MySQL 5.1.36</li>
<li>PhpMyAdmin 3.2.01</li>
</ul>
<h4>XAMPP</h4>
<p><a href="http://www.apachefriends.org/en/xampp.html">XAMPP</a> jest darmowym wieloplatformowym pakietem opartym na licencji GNU General Public License. Składa się głównie z serwera Apache, bazy danych MySQL i interpreterów dla skryptów napisanych w PHP i Perlu. XAMPP działa między innymi na systemach MS Windows, Linux, Solaris i MacOS X.</p>
<h3>Podsumowanie</h3>
<p>Większość platform WAMP zawiera dodatkowe oprogramowanie przydatne podczas tworzenia i testowania aplikacji internetowych. Sam proces instalacji takiego oprogramowania jest łatwy. Pewne trudności zdarzają się przy konfiguracji niestandardowych opcji. Poza tym jest to idealne rozwiązanie na początku przygody z tworzeniem aplikacji internetowych.</p>
<p>Często spotykany PhpMyAdmin jest stosowany do zarządzania bazami danych. Nierzadko udostępniane są inne silniki baz danych, np. SQLite. Warto włączyć niektóre przydatne moduły serwera Apache, które domyślnie bywają wyłączone, jak choćby mod_rewrite, czy mod_userdir.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/02/08/lamp-i-wamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec projektowy Fabryka abstrakcyjna</title>
		<link>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/</link>
		<comments>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 23:00:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[factory]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=263</guid>
		<description><![CDATA[Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.
Fabryka abstrakcyjna
Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte [...]]]></description>
			<content:encoded><![CDATA[<p>Poprzedni wpis dotyczył wzorca projektowego Singleton, który jest niezbędny w przypadku pojedynczych obiektów tego samego typu. Obecny tekst porusza problem tworzenia różnych obiektów jednego typu (tej samej rodziny) bez specyfikowania ich konkretnych klas.<span id="more-263"></span></p>
<h3>Fabryka abstrakcyjna</h3>
<p>Plusem wykorzystania wzorca fabryki abstrakcyjnej jest możliwość ukrycia szczegółów implementacyjnych klas reprezentujących dany produkt. W ten sposób klient widzi tylko interfejs. Ukryte zostają również nazwy klas, co odizolowuje klienta od problemu określenia, do której klasy należy obiekt.</p>
<pre><code>&lt;?php
interface IUser {
	function getName();
}

class User implements IUser {
	public function __construct($id) { }

	public function getName() {
		return 'Jacek';
	}
}

class UserFactory {
	public static function create($id) {
		return new User($id);
	}
}
?&gt;</code></pre>
<p>Klasa <code>User</code> zaprezentowana powyżej implementuje interfejs <code>IUser</code>, który zawiera metodę <code>getName()</code>. Tworzenie nowego obiektu użytkownika odbywa się poprzez statyczną metodę <code>create()</code>. Szczegóły tworzenia użytkowników ukryte są w klasie <code>User</code> fabryki.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie.</p>
<pre><code>&lt;?php
$oUser = UserFactory::create(1);
echo($oUser->getName());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>Jacek</code></pre>
<p>Wzorzec projektowy fabryki abstrakcyjnej kładzie nacisk na tworzenie produktów z konkretnej rodziny. </p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/02/04/wzorzec-projektowy-fabryka-abstrakcyjna/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wzorzec projektowy Singleton</title>
		<link>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/</link>
		<comments>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 23:21:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wzorce projektowe]]></category>
		<category><![CDATA[design patern]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[singleton]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=250</guid>
		<description><![CDATA[Wzorzec projektowy Singleton. Wyjaśnienie idei oraz implemntacja w PHP.]]></description>
			<content:encoded><![CDATA[<p>Wzorce projektowe to ogólne rozwiązania częstych informatycznych problemów. Programowanie obiektowe w PHP5 różni się nie tylko składnią, ale również pewnymi brakami w porównaniu z innymi językami, typu C++ czy Java. Pomimo tego wzorce projektowe idealnie sprawdzają się w aplikacjach internetowych.<span id="more-250"></span></p>
<p>Częsta sytuacja, z jaką spotykają się programiści to współdzielenie zasobów. Wszystkie zapytania do bazy danych wymagają połączenia. Taki uchwyt może być wykorzystany wielokrotnie przez różne zapytania przy tym samym żądaniu. Otwieranie i zamykanie połączeń jest najzwyczajniej, mało ekonomiczne.</p>
<h3>Singleton</h3>
<p>Istnieje proste rozwiązanie tego problemu. Singleton to wzorzec projektowy, który zwraca istniejącą instancję obiektu. Jeśli taka instancja nie istnieje wówczas jest tworzona. Idea rozwiązania jest bardzo prosta i idealnie pasuje do naszego problemu. Poniżej znajduje się kod klasy <code>DB</code>, która dziedziczy z klasy <code>Singleton</code> i tworzy takie połączenie do bazy.</p>
<p>Prawidłowa struktura klas, co zasugerował <a href="http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/comment-page-1/#comment-5526">Wasacz</a> w komentarzach, wymaga dziedziczenia klasy <code>DB</code> po ogólnej klasie wzorca <code>Singleton</code>. Niestety nie mam pomysłu zogranizowanie klasy wzorca poza pustymi metodami i jedną zmienną.</p>
<pre><code>&lt;?php
abstract class Singleton {
	protected static $_instance;

	protected function __construct() { }

	public static function instance() { }
}

class DB extends Singleton {
	private $_conn;

	private function __construct($conf) {
		$this->_conn = mysql_connect($conf['host'], $conf['user'], $conf['pass']) or die($this->error());
	}

	public static function instance($conf=null) {
		if (is_null(self::$_instance)) {
			self::$_instance = new DB($conf);
		}
		return self::$_instance;
	}
}
?&gt;</code></pre>
<p>Klasa <code>DB</code> zaprezentowana powyżej nie jest skomplikowana. Zawiera jednak tylko niezbędne metody, prezentujące działanie klasy. Niemożliwe jest stworzenie egzemplarza klasy <code>DB</code>, ponieważ konstruktor jest prywatny. Dostęp do obiektu możliwy jest poprzez publiczną, statyczną metodę <code>instance()</code>.</p>
<h3>Podsumowanie</h3>
<p>Istnieje prosta metoda sprawdzenia czy klasa działa poprawnie. Próba pobrania obiektu klasy <code>DB</code> powinna zwrócić ten sam zasób.</p>
<pre><code>&lt;?php
print_r(DB::instance());
print_r(DB::instance());
?&gt;</code></pre>
<p>Poniższy wydruk pokazuje, że dokładnie tak się dzieje.</p>
<pre><code>DB Object
(
    [_conn:private] => Resource id #11
)
DB Object
(
    [_conn:private] => Resource id #11
)</code></pre>
<p>Wzorzec projektowy Singleton stosuje się bez względu na stopień skomplikowania aplikacji. Rozwiązanie to jest wygodniejsze i elastyczniejsze niż przechowywanie uchwytu do bazy danych w zmiennej globalnej.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2010/01/30/wzorzec-projektowy-singleton/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP5. Zaawansowane programowanie</title>
		<link>http://adamczuk.net.pl/2009/03/30/php5-zaawansowane-programowanie/</link>
		<comments>http://adamczuk.net.pl/2009/03/30/php5-zaawansowane-programowanie/#comments</comments>
		<pubDate>Mon, 30 Mar 2009 10:41:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Książki]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[helion]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[wrox]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=180</guid>
		<description><![CDATA[Zaawansowane programowanie w PHP5. Ciekawe techniki tworzenia aplikacji internetowych.]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/03/php_zp.jpg" alt="php_zp" title="PHP5 Zaawansowane programowanie" width="140" height="200" class="left" />Do tworzenia aplikacji internetowych można wykorzystać kilka technologii. Wszystkie one mają swoich zwolenników i tym sposobem Microsoft proponuje nam <acronym title="Active Server Pages">ASP</acronym>, a Sun swoje <acronym title="Java Sever Pages">JSP</acronym>. Jest jeszcze ColdFusion od Macromedii (teraz chyba Adobe), a moim wyborem od początku było i pozostaje <acronym title="Hypertext Preprocessor">PHP</acronym>. Zgadzam się ze PHP nie jest wolne od wad, ale w połączeniu z serwerem Apache i praktycznie dowolną bazą danych, jest potężną technologią, która pozwala tworzyć zaawansowane aplikacje internetowe.<br />
<span id="more-180"></span><br />
<strong>PHP</strong> pozwala na tworzenie aplikacji sieciowych, które są uruchamiane po stronie serwera. Najnowsza wersja PHP5 została wzbogacona o nowe mechanizmy programowania obiektowego. Teraz możliwe jest korzystanie z plików XML i protokołu SOAP, a także wieloma silnikami baz danych.</p>
<p><em>&#8220;PHP5. Zaawansowane programowanie&#8221;</em> to książka, która przedstawia potężne możliwości i elastyczność najnowszej wersji tej popularnej platformy programistycznej. Dzięki niej poznamy zasady programowania obiektowego, a także tworzenia użytecznych klas i funkcji. W książce przeczytamy również o modelowaniu w języku UML, a także korzystaniu z wzorców projektowych. Przeczytanie książki pozwoli na tworzenie zestawów narzędzi obiektowych oraz stosowanie modelu MVC. Dodatkowo książka opisuje analizę oraz implementację prawdziwego przypadku, a mianowicie systemu automatyzującego pracę działu sprzedaży w przedsiębiorstwie handlowym.</p>
<p>Książka jest przeznaczona dla zaawansowanych programistów. Jeśli chcesz poznać podstawy PHP lub tworzenia stron internetowych poszukaj innej książki. Jeśli chcesz poznać zaawansowane możliwości PHP5, a także właściwie rozbudować swoje aplikacje to sięgnij po tę książkę.</p>
<p class="info">OSTATECZNA OCENA: 4/5</p>
<ul>
<li><strong>Autorzy: Edward Lecky-Thompson, Heow Eide-Goodman, Steven D. Nowicki, Alec Cove</strong></li>
<li>Tytuł oryginału: Professional PHP5</li>
<li>Tłumaczenie: Adam Byrtek, Jarosław Dobrzański, Paweł Gonera</li>
<li>ISBN: 83-7361-825-2</li>
<li>Format: B5, stron: 664</li>
<li>Data wydania: 06/2005 (<a href="http://helion.pl">Helion</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/03/30/php5-zaawansowane-programowanie/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AJAX i PHP. Tworzenie interaktywnych aplikacji internetowych</title>
		<link>http://adamczuk.net.pl/2009/03/26/ajax-i-php-tworzenie-interaktywnych-aplikacji-internetowych/</link>
		<comments>http://adamczuk.net.pl/2009/03/26/ajax-i-php-tworzenie-interaktywnych-aplikacji-internetowych/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 08:13:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Książki]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[book]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[review]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=164</guid>
		<description><![CDATA[Recenzja książki. Podstawy AJAX i PHP w prostej formie i łatwej treści.]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/03/book-ajaphp.jpg" alt="book-ajaphp" title="AJAX i PHP.Tworzenie interaktywnych aplikacji internetowych" width="140" height="200" class="left" />Współczesne aplikacje internetowe stają się coraz bardziej interaktywne. Interfejsy użytkowników pozwalają na działanie stron bez przeładowywania. Nowoczesne technologie takie jak <acronym title="Asynchronous JavaScript And XML">AJAX</acronym> pozwalają osiągnąć efekty znane dotychczas tylko z aplikacji biurowych. Technologia ta jest szeroko wykorzystywana przez wiele serwisów (np. Google).<br />
<span id="more-164"></span></p>
<p><strong>AJAX</strong> jest technologią, która pozwala na asynchroniczne łączenie się z serwerem poprzez obiekt XMLHttpRequest.  W czasie takiego połączenia dane mogą być pobierane lub zapisywane na serwerze, a sama strona nie jest przeładowywana jak w tradycyjnym modelu żądania. Aplikacje oparte o powyższy schemat dokonują aktualizacji w interfejsie użytkownika o wiele szybciej. AJAX korzysta z obiektowego modelu dokumentu (DOM) i JavaScript.</p>
<p>Książka zawiera 10 projektów omawiających szczegółowo możliwości technologii AJAX. Dzięki niej możemy nauczyć się weryfikowania danych w formularzach lub tworzenia podpowiedzi podczas wyszukiwania. Inne ciekawe projekty zrealizowane w książce to chat, czytnik, tabela z sortowaniem wierszy oraz tworzenie grafiki SVG. Autorzy w sposób przejrzysty i rzeczowy objaśniają kolejne przykłady. Zarówno kod tworzony w JS, jak i w PHP czy CSS jest opisywany z dodatkowym naciskiem na problemowe kwestie. Na końcu przedstawione są propozycje rozszerzenia, omawianego przykładu o następne funkcjonalności.</p>
<p>Przedstawione projekty może nie porażają swoim rozmachem, ale pokazują główne zalety i wady AJAX. Tworzenie interaktywnych aplikacji internetowych może być naprawdę łatwe i przyjemne, jeśli tylko dokładnie prześledzimy omówione przykłady. Książka wydana przez <a href="http://helion.pl">Helion</a> jest przeznaczona dla programistów, rozpoczynających swoje kodowanie w AJAX.</p>
<p class="info">OSTATECZNA OCENA: 3/5</p>
<ul>
<li><strong>Autorzy: Cristian Darie, Bogdan Brinzarea, Filip Chereches-Tosa, Mihai Bucica</strong></li>
<li>Tytuł oryginału: Ajax and PHP: Building Responsive Web Applications</li>
<li>Tłumaczenie: Julia Malinowska</li>
<li>ISBN: 83-246-0644-0</li>
<li>Format: B5, stron: 328</li>
<li>Data wydania: 11/2006 (<a href="http://helion.pl">Helion</a>)</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/03/26/ajax-i-php-tworzenie-interaktywnych-aplikacji-internetowych/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manual PHP na żądanie</title>
		<link>http://adamczuk.net.pl/2009/02/26/manual-php-na-zadanie/</link>
		<comments>http://adamczuk.net.pl/2009/02/26/manual-php-na-zadanie/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 14:27:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[manual]]></category>
		<category><![CDATA[mod_rewrite]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=159</guid>
		<description><![CDATA[Prosta metoda uzyskania dostępu do dokumentacji PHP.]]></description>
			<content:encoded><![CDATA[<p>Dobry programista zna nie tylko składnię języka jakiego używa, ale potrafi także czytać komunikaty, ostrzeżenia i błędy jakie spotyka w czasie pracy. Kiedy taka wiadomość ukaże się naszym oczom jesteśmy zmuszeniu do skorzystania z dokumentacji. Co może zrobić programista PHP w takiej sytuacji?<span id="more-159"></span></p>
<h3>Hipotetyczna sytuacja</h3>
<p>Tworzymy skrypt PHP, który będzie usuwał plik <em>some-file.txt</em>. Banalny kod naszego skryptu jest zapisany w pliku <em>delete-file.php</em>. Poniżej znajduje się kod naszego programu.</p>
<pre></code>&lt;?php
	unlink('some.file');
?&gt;</code></pre>
<p>Uruchamiamy nasz skrypt i widzimy poniższą informację.</p>
<pre><code>Warning: unlink(some.file) [function.unlink]: No such file or directory in /home/ash/public_html/test/delete-file.php on line 2</code></pre>
<p>Domyślamy się, że problem stanowi funkcja <code>unlink</code>, która nie znalazła wskazanego pliku. Skorzystajmy zatem ze strony <a href="http://pl.php.net/manual/en/">manula</a>, gdzie znajdziemy opis danej funkcji, a potem rozwiązanie problemu. Równie łatwo możemy ten proces usprawnić.</p>
<h3>Rozwiązanie</h3>
<p>Ostrzeżenie, które zobaczyliśmy zawiera link do dokumentacji PHP. Sam link jest podany w takiej formie, która uniemożliwia zwykłe kliknięcie myszką. Pomocny okaże się moduł <a href="http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html">mod_rewrite</a> serwera Apache , który przepisuje adresy URL. Reguły przepisywania adresów umieszczamy w pliku <em>.htaccess</em>.</p>
<pre><code>RewriteEngine On
RewriteBase /~ash/test/
RewriteRule function.* http://pl.php.net/manual/en/$0.php [L]</code></pre>
<p>Pierwsza linia włącza przepisywanie adresów przez moduł serwera. Kolejna linia wskazuje na lokalizację naszego katalogu z projektem. Jeżeli projekt znajduje się w domyślnym katalogu Apache to drugą linię pomijamy. Ostatnia linia odpowiada za właściwe przepisywanie adresów. Żądanie postaci function.* zostanie przekierowane do odpowiedniego adresu w dokumentacji PHP.</p>
<p>Kiedy tworzymy kolejny projekt konieczne jest skopiowanie pliku <em>.htaccess</em> lub samych reguł, ale nawet pomimo, tego uważam, że opisana metoda daje łatwy dostęp do dokumentacji PHP.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/02/26/manual-php-na-zadanie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Szablony Smarty &#8211; część 1</title>
		<link>http://adamczuk.net.pl/2009/02/15/szablony-smarty-czesc-1/</link>
		<comments>http://adamczuk.net.pl/2009/02/15/szablony-smarty-czesc-1/#comments</comments>
		<pubDate>Sun, 15 Feb 2009 22:32:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[smarty]]></category>
		<category><![CDATA[templates]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=144</guid>
		<description><![CDATA[Ogólne wprowadzenie do szablonów Smarty]]></description>
			<content:encoded><![CDATA[<p>Pisanie funkcjonalnych stron internetowych wymaga stosowania kilku technologii. Najczęściej spotykane w sieci jest połączenie PHP, MySQL i XHTML. Jednak tworzenie aplikacji poprzez wzajemne przeplatanie składni tych języków jest równie częste. O ile tworzenie  prostej strony dla siebie jest jeszcze zrozumiałe, to napisanie poważnego projektu webowego bez rozdzielenia wszystkich komponentów jest niemożliwe.<br />
<span id="more-144"></span><br />
<strong>Smarty</strong> to obiektowa biblioteka służąca do tworzenia szablonów dla aplikacji PHP. Pozwala na oddzielenie logiki od warstwy prezentacyjnej, a tym samym łatwiejsze analizowanie i rozwijanie kodu. Szablony wykorzystują określone znaczniki, które przez silnik Smarty są zastępowane generowaną treścią.</p>
<p>Smarty umożliwia stosowanie struktur kontrolnych, a także wielu modyfikatorów. Wysoka wydajność pakietu została osiągnięta poprzez kompilowanie szablonów do skryptów PHP, a także wbudowanemu systemowi buforowania. Najnowsza wersja biblioteki dostępna jest na stronie <a href="http://smarty.net/">Smarty</a>.</p>
<h3>Wstęp</h3>
<p>Na początku musimy rozpakować paczkę i przegrać na serwer lub do katalogu na lokalnym komputerze. W naszym przypadku tworzymy plik <em>example-01.php</em>, w którym zapisujemy następujący kod.</p>
<pre><code>&lt;?php
	require_once('../libs/Smarty.class.php');

	$TPL = new Smarty;
	$TPL -&gt; template_dir = 'templates/';
	$TPL -&gt; compile_dir = 'templates_c/';
	$TPL -&gt; compile_check = true;
	$TPL -&gt; debugging = false;
	$TPL -&gt; caching = false;
	$TPL -&gt; use_sub_dirs = false;
?&gt;</code></pre>
<p>Powyższy fragment kodu dołącza plik <em>Smarty.class.php</em>, tworzy i ustawia odpowiednie parametry konfiguracyjne. Na początku wystarczy nam jedynie określenie położenia szablonów i szablonów skompilowanych, a w późniejszym czasie możemy dopisać bardziej szczegółowe ustawienia.</p>
<h3>Wyświetlanie szablonu</h3>
<p>Strona internetowa zapisana jako HTML/XHTML byłaby w dużym podobna do kodu przedstawionego poniżej. Jeśli korzystalibyśmy z PHP to pomiędzy znaczniki wpisalibyśmy wywołania funkcji <code>echo</code> lub <code>print</code>.</p>
<pre><code>&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
	...
	&lt;/body&gt;
&lt;html&gt;</code></pre>
<p>Jeżeli skorzystamy z systemu szablonów to w pliku sterującym wystarczy wywołać metodę <code>display()</code> z parametrem.</p>
<pre><code>$TPL -&gt; display('example-01.tpl');</code></pre>
<p>Widoczne jest, że ilość kodu jest większa, niż w przypadku gdybyśmy kod szablonu zapisali w samym pliku <em>example-01.php</em>. Jednak naszym celem jest rozdzielenie kodu i części prezentacyjnej, co osiągnęliśmy w prosty sposób.</p>
<h3>Zmienne w szablonie</h3>
<p>Wyświetlanie statycznych szablonów jest przydatne, ale nasze aplikacje generują głównie dynamiczną zawartość pobieraną z plików czy bazy danych. Smarty posiada możliwość przekazywania zmiennych do szablonu. Chcielibyśmy zmienić tytuł naszej strony, a także wyświetlić przykładowy tekst.  Zmodyfikowana wersja szablonu przedstawia się następująco:<code></code></p>
<pre><code>&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;{$title}&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;Example 1&lt;/h1&gt;
			&lt;p&gt;{$text}&lt;/p&gt;
	&lt;/body&gt;
&lt;html&gt;</code></pre>
<p>Z kolei w pliku sterującym dopisujemy dwie linijki, odpowiadające na przekazanie zmiennych do szablonu. Metoda <code>assign()</code> przesyła zmienną PHP do szablonu.</p>
<pre><code>$title = 'SMARTY - Template Engine';

$TPL -&gt; assign('title', $title);
$TPL -&gt; assign('text', 'Lorem ipsum dolor sit amet...');

$TPL -&gt; display('example-01.tpl');</code></pre>
<p>Sposób w jaki przekażemy argumenty metodzie <code>assign()</code> zależy od nas. Może to być zwykły <em>string</em> lub inna zmienna  zdefiniowana w pliku. Wartość przesyłanej zmiennej, którą można formatować wyświetli się w szablonie. Możemy korzystać z komentarzy, które zapisujemy przy pomocy <code>{*</code> i <code>*}</code>.</p>
<pre><code>{* Komentarz w szablonie *}</code></pre>
<p>Możliwe jest również wyświetlenie zmiennej z pliku konfiguracyjnego.</p>
<pre><code>{#zmienna_konfiguracyjna#}</code></pre>
<p>Możemy w końcu wywołać funkcje Smarty.</p>
<pre><code>{funckja_smarty}</code></pre>
<p>Możemy w końcu wywołać funkcje Smarty.</p>
<h3>Modyfikatory</h3>
<p>Zmienne przesyłane do szablonów można w różny sposób formatować. Przykładowy ciąg znaków możemy wyświetlić jako  małe, duże litery czy kapitaliki. Przykładowa składania takiego modyfikatora przedstawia się następująco.</p>
<pre><code>{$text|lower}        {* string pisany małymi literami *}
{$text|upper}        {* string pisany wielkimi literami *}
{$text|capitalize}   {* string pisany kapitalikami *}</code></pre>
<p>Możliwe jest również łączenie kilku modyfikatorów, celem osiągnięcia kilku złożonego formatowania. W tym przypadku tekst będzie wyświetlany wielkimi literami, a znaki załamania wiersza zostaną zastąpione przez <code>&lt;br /&gt;</code>.</p>
<pre>{$text|upper|nl2br}</pre>
<p>Pełna lista modyfikatorów oraz sposób ich działania znajduje się w tabeli poniżej.</p>
<table cellspacing="0" width="100%">
<caption>Przegląd modyfikaorów dostępny w szablonach Smarty</caption>
<thead>
<th scope="col">Lp.</th>
<th scope="col">Modyfikator</th>
<th scope="col">Działanie</th>
</thead>
<tbody>
<tr>
<td>1</td>
<td>capitalize</td>
<td>zamiana litery na kapitaliki</td>
</tr>
<tr>
<td>2</td>
<td>cat</td>
<td>złączanie napisów</td>
</tr>
<tr>
<td>3</td>
<td>count_characters</td>
<td>zliczanie znaków</td>
</tr>
<tr>
<td>4</td>
<td>count_paragraphs</td>
<td>zliczanie akapitów</td>
</tr>
<tr>
<td>5</td>
<td>count_sentences</td>
<td>zliczanie zdań</td>
</tr>
<tr>
<td>6</td>
<td>count_words</td>
<td>zlicznanie słów</td>
</tr>
<tr>
<td>7</td>
<td>date_format</td>
<td>formatowanie daty</td>
</tr>
<tr>
<td>8</td>
<td>default</td>
<td>wartość domyślna zmiennej</td>
</tr>
<tr>
<td>9</td>
<td>escape</td>
<td>cytowanie znaków specjalnych w napisie</td>
</tr>
<tr>
<td>10</td>
<td>indent</td>
<td>wcięcia akapitów</td>
</tr>
<tr>
<td>11</td>
<td>lower</td>
<td>zmiana liter na małe</td>
</tr>
<tr>
<td>12</td>
<td>nl2br</td>
<td>zamiana znaku załamania <code>\n</code> na <code>&lt;br /&gt;</code></td>
</tr>
<tr>
<td>13</td>
<td>regex_replace</td>
<td>zamiana wyrażeń regularnych</td>
</tr>
<tr>
<td>14</td>
<td>replace</td>
<td>zamiana napisów</td>
</tr>
<tr>
<td>15</td>
<td>spacify</td>
<td>rozstrzelenie napisu</td>
</tr>
<tr>
<td>16</td>
<td>string_format</td>
<td>formatowanie napisu</td>
</tr>
<tr>
<td>17</td>
<td>strip</td>
<td>usuwanie białych znaków</td>
</tr>
<tr>
<td>18</td>
<td>strip tags</td>
<td>usuwanie znaków</td>
</tr>
<tr>
<td>19</td>
<td>truncate</td>
<td>skracanie długości napisu</td>
</tr>
<tr>
<td>20</td>
<td>upper</td>
<td>zamiana liter na wielkie</td>
</tr>
<tr>
<td>21</td>
<td>wordwrap</td>
<td>łamanie wierszy w napisie</td>
</tr>
</tbody>
</table>
<p>Możemy w końcu wywołać funkcje Smarty.</p>
<h3>Tablice</h3>
<p>Często do szablonów potrzebujemy przesyłać tablice zmiennych. Możliwe jest to dzięki znanej metodzie <code>assign()</code>.</p>
<pre><code>$arrBooks = array(
	array('1', 'Standardy sieciowe', 'J.Zeldman'),
	array('2', 'XHTML i CSS', 'Z.Kowalski'),
	array('3', 'ABC Programowania', 'A.A.Atkinson'));

$TPL -&gt; assign('arrBooks', $arrBooks);</code></pre>
<p>Przeglądanie tablicy w szablonie umożliwia specjalna konstrukcja <code>{section}</code>, która oznacza początek pętli. Koniec pętli przeglądającej tablicę oznacza <code>{/section}</code>. Indeks kolejnych wierszy uzyskujemy poprzez <code>[</code> i <code>]</code>.</p>
<pre><code>&lt;h1&gt;Example 2&lt;/h1&gt;
	&lt;table&gt;
	{section name=n loop=$arrBooks}
		&lt;tr&gt;
			&lt;td&gt;{$arrBooks[n].0}&lt;/td&gt;
			&lt;td&gt;{$arrBooks[n].1}&lt;/td&gt;
			&lt;td&gt;{$arrBooks[n].2}&lt;/td&gt;
		&lt;/tr&gt;
	{/section}
&lt;/table&gt;</code></pre>
<p>Sekcja może posiadać opcjonalny fragment <code>{sectionelse}</code>. Wówczas treść szablonu umieszczona pomiędzy znacznikami <code>{sectionelse}</code> oraz <code>{/section}</code> będzie zawarta w stronie wynikowej wówczas, gdy żaden spośród elementów tablicy nie zostanie przetworzony przez iterację.</p>
<h3>Podsumowanie</h3>
<p>Smarty to bardzo wydajny system. Pętle przetwarzające tablice oraz modyfikatory zmiennych pozwalają całkowicie odseparować logikę od części prezentacyjnej. W plikach php nie stosowaliśmy znaczników HTML.</p>
<p>System pozwala na warunkowe przetwarzanie szablonów, a także stosowanie innych użytecznych funkcji. Możliwe jest również napisanie własnej i dołączenie jej do silnika. Kolejne przykłady zastosowania przedstawię w następnym artykule dotyczącym szablonów.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/02/15/szablony-smarty-czesc-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zend Framework &#8211; wprowadzenie</title>
		<link>http://adamczuk.net.pl/2009/01/20/zend-framework-wprowadzenie/</link>
		<comments>http://adamczuk.net.pl/2009/01/20/zend-framework-wprowadzenie/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 15:36:22 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[zendframework]]></category>
		<category><![CDATA[zf]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=113</guid>
		<description><![CDATA[Pierwszy artykuł z serii artykułów opisujących działanie Zend Framework.]]></description>
			<content:encoded><![CDATA[<p>Poniższy artykuł jest początkiem serii artykułów na temat <a href="http://framework.zend.com/">Zend Framework</a>. Cykl artykułów kierowany jest głównie do osób początkujących. W kolejnych artykułach postaram się przedstawić w przystępny sposób podstawowe mechanizmy jakich używa się przy tworzeniu aplikacji internetowych. Programiści, którzy znają Zend Framework najpewniej nie znajdą tutaj wiele ciekawych fragmentów, jednak mimo wszystko zachęcam do analizy artykułu i komentarzy.<br />
<span id="more-113"></span></p>
<h3>Wstęp</h3>
<p>Zakładam, że osoby zainteresowane, tym kursem znają technologie <abbr title="eXtensible HyperText Markup Language">XHTML</abbr> oraz <abbr title="Cascading Style Sheet">CSS</abbr>, gdyż jest to absolutna podstawa w sytuacji gdy chcemy zajmować się aplikacjami internetowymi. Dla osób, które mają małe doświadczenie z nowoczesnymi technologiami oraz standardami sieciowymi polecam niezawodny kurs <a href="http://kurs.browsehappy.pl/Kurs/Spis">BrowseHappy</a>. Kurs ten jest bardzo dobrym wstępem do zrozumienia specyfiki aplikacji internetowych.</p>
<p>Oprócz XHTML i CSS, warto znać podstawy <abbr title="Structured Query Language">SQL</abbr>, który będzie niezbędny przy korzystaniu z bazy danych. W przykładach będziemy korzystać z bazy danych MySQL, a także <abbr title="Hypertext PreProcessor">PHP</abbr>. Znajomość tego języka będzie wymagana, ponieważ sam <strong>Zend Framework</strong> jest obiektowym zestawem narzędzi napisanych w PHP5. Więcej na temat Zend Framework można znaleźć także na polskiej stronie <a href="http://zend-framework.pl/">projektu</a>.</p>
<p>Do prawidłowego funkcjonowania naszych przykładów, jak i prawdziwych aplikacji potrzebne jest także odpowiednie środowisko. Skrótowo takie środowiska noszą nazwy <abbr title="Windows Apache MySQL PHP">WAMP</abbr> i <abbr title="Linux Apache MySQL PHP">LAMP</abbr> w zależności od systemu operacyjnego. Instalacja poszczególnych elementów jest niezbędna, a sposób w jaki to zrobimy jest mało istotny.</p>
<p>Zaletami zestawów WAMP i LAMP są wszystkie składniki, które pobieramy i instalujemy w tym samym czasie. Minusem takiego rozwiązania mogą być nieaktualne składniki, więc najlepiej pobrać wszystkie elementy samemu i dokonać instalacji. Prawidłowa instalacja i konfiguracja środowiska pozwoli nam oglądać stronę <code>http://localhost/</code> na naszym komputerze.</p>
<p>Do pełni szczęścia brakuje nam jeszcze ostatniej wersji Zend Framework, który pobieramy ze <a href="http://framework.zend.com/download/latest">strony</a> producenta. Prawidłowa instalacja nie jest skomplikowana i wymaga jedynie rozpakowania ściągniętego archiwum oraz skopiowania katalogu <code>library</code> do głównego katalogu naszego projektu.</p>
<h3>Architektura MVC</h3>
<p>Zend Framework korzysta z wzorca projektowego <abbr title="Model View Controller">MVC</abbr>, który bardzo dobrze pasuje do specyfiki aplikacji internetowych. Aplikacja napisana przy pomocy tego wzorca zawiera trzy główne składniki:</p>
<dl>
<dt>Model</dt>
<dd>Serce naszej aplikacji. Zawiera klasy PHP i nie zawiera kodu XHTML.</dd>
<dt>Widok</dt>
<dd>Część prezentacyjna naszej aplikacji. Zawiera szablony odpowiedzialne za wizualizację danych.</dd>
<dt>Kontroler</dt>
<dd>Część sterująca naszej aplikacji, która służy do komunikacji modelu i widoku. Kontroler nie powinien zawierać zapytań SQL, ani kodu XHTML.</dd>
</dl>
<p>Zastosowanie wzorca projektowego MVC pozwala na oddzielenie warstwy prezentacyjnej od logiki biznesowej. Takie rozdzielenie daje ogromne korzyści podczas tworzenia projektu, jak i późniejszego rozwijania aplikacji.</p>
<p>Zend Framework korzysta także, z przyjaznych adresów URL, które mają duże znaczenie dla wyszukiwarek internetowych. Aby uzyskać takie przyjazne adresy, najprościej skorzystać z modułu <code>mod_rewrite</code> udostępnianego przez serwer Apache.</p>
<h3>Podsumowanie</h3>
<p>Artykuł ten przedstawia wymagania wobec osoby, która ma zamiar nauczyć się tworzenia aplikacji internetowych w oparciu o Zend Framework. Kolejne odcinki będą opisywać podstawowe klasy frameworka, a także przykłady ich wykorzystania do budowania aplikacji internetowych.</p>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/01/20/zend-framework-wprowadzenie/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend Framework 1.7</title>
		<link>http://adamczuk.net.pl/2009/01/19/zend-framework-17/</link>
		<comments>http://adamczuk.net.pl/2009/01/19/zend-framework-17/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 14:15:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[zend]]></category>
		<category><![CDATA[zendframework]]></category>

		<guid isPermaLink="false">http://adamczuk.net.pl/?p=101</guid>
		<description><![CDATA[Krótki przegląd usprawnień jakie wprowadzono w Zend Framework 1.7.]]></description>
			<content:encoded><![CDATA[<p><img src="http://adamczuk.net.pl/wp-content/uploads/2009/01/zf.jpg" alt="zend framework 1.7" title="Zend Framework 1.7" width="200" height="100" class="left" />Wprawdzie informacja na temat nowej wersji Zend Framework pojawiła się dość dawno, ale nie miałem jeszcze okazji sprawdzić jego funkcjonalności. Zend Framework jest zestawem klas ułatwiających tworzenie aplikacji internetowych. Może pod względem wydajności i bezpieczeństwa <abbr title="Zend Framework">ZF</abbr> nie jest liderem, ale na pewno jest powszechnie używanym frameworkiem dla <abbr title="Hypertext Preprocessor">PHP</abbr>. Najnowsza wersja Zend Framework znaduje się <a href="http://framework.zend.com/download/latest">tutaj</a>.<br />
<span id="more-101"></span><br />
<strong>Zend Framework 1.7</strong> rozwinął się w dużym stopniu w porównaniu do poprzednich wersji. Wiele wprowadzonych zmian daje szerokie wsparcie dla nowoczesnych technologii internetowych, a także tworzenia usług sieciowych (WebSerivces). Poniżej znajduje się częściowa lista zmian jakie wprowadzono w nowym Zend Framwork 1.7.</p>
<ul>
<li>Zend_Amf i wsparcie dla protokołów AMF0 i AMF3</li>
<li>Dojo Toolkit 1.2.1</li>
<li>Wsparcie dla edytora dijit, dostępnego w Dojo Toolkit</li>
<li>Zend_Service_Twitter</li>
<li>ZendX_JQuery w dodatkowych bibliotekach</li>
<li>Zwiększenie wydajności w Zend_Loader, Zend_Controller i komponentach serwerowych</li>
<li>Poprawione dostarczanie poczty dla Zend_Mail_Storage_Writable_Maildir</li>
<li>Zend_Text_Table dla formatowania tabel</li>
<li>Zend_ProgressBar</li>
<li>Zend_Config_Writer</li>
<li>ZendX_Console_Unix_Process w dodatkowych bibliotekach</li>
<li>Usprawnienia i18N</li>
<li>Polepszenie przesyłania plików</li>
<li>Adapter Zend_Db_Table_Select dla Zend_Paginator</li>
<li>Bardziej elastyczna obsługa typów złożonych w Zend_Soap</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://adamczuk.net.pl/2009/01/19/zend-framework-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
