<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6823977672774886966</id><updated>2012-02-29T06:14:16.336-08:00</updated><category term='yii keretrenszer'/><category term='logging'/><category term='flash'/><category term='kontroller'/><category term='query builder. db'/><category term='postgresql'/><category term='Prado'/><category term='html5'/><category term='web'/><category term='Zen'/><category term='PHP keretrendszerek'/><category term='phpunit'/><category term='form varázsló'/><category term='mariadb'/><category term='presets'/><category term='űrlap ellenőrzés'/><category term='selenium'/><category term='CodeIgniter'/><category term='doctrine'/><category term='art'/><category term='renderPartial'/><category term='Windows'/><category term='MongoRecord'/><category term='validation'/><category term='chrome'/><category term='MongoDB'/><category term='CHtml'/><category term='RSS'/><category term='TDD'/><category term='css'/><category term='yii 1.1.5'/><category term='render'/><category term='git'/><category term='nézet'/><category term='recaptcha'/><category term='extension'/><category term='rails'/><category term='modell'/><category term='migrations'/><category term='assets'/><category term='felhasznalo'/><category term='nosql'/><category term='swfupload'/><category term='gii'/><category term='Apache'/><category term='modul'/><category term='cron'/><category term='yii lapozgató'/><category term='kód generálás'/><category term='imagecache'/><category term='beforeSave'/><category term='mysql'/><category term='authentication'/><category term='Telepítés'/><category term='adatbázis'/><category term='validálási esetek'/><category term='Zend'/><category term='teszt'/><category term='oracle'/><category term='theming'/><category term='mvc'/><category term='crud'/><category term='vezérlő'/><category term='zend framework'/><category term='html'/><category term='chromephp'/><category term='migrációk'/><category term='Sminkelés'/><category term='mediaelementjs'/><category term='urlManager'/><category term='blueprint'/><category term='widget'/><category term='extjs'/><category term='svn'/><category term='haml'/><category term='validálás'/><category term='wiki'/><category term='javascript'/><category term='kütyü'/><category term='jcarousell'/><category term='OpenSearch'/><category term='forráskezelés'/><category term='LESS.js'/><category term='github'/><category term='crm'/><category term='ext4yii'/><category term='Ajax'/><category term='yiiki'/><category term='form'/><category term='chive'/><category term='pomegranate'/><category term='anti-spam'/><category term='egységteszt'/><category term='agile'/><category term='unit test'/><category term='cms'/><category term='markdown'/><category term='yii könyv'/><category term='képmanipuláció'/><category term='Yii'/><category term='kezdetek'/><category term='kanban'/><category term='képmódosítás'/><category term='uml'/><category term='source control'/><category term='oauth'/><category term='yii radiio'/><category term='file feltöltés'/><category term='webenabled'/><category term='scenarios'/><category term='dry'/><category term='sass'/><category term='php'/><category term='i18N'/><category term='objektumok'/><category term='sqlite'/><category term='worthmonkey.com'/><category term='könyv'/><category term='programozás'/><category term='lucene'/><category term='yii user'/><category term='oop'/><category term='netbeans'/><category term='naplózás'/><category term='url rövidítő'/><category term='yii themes'/><category term='Linux'/><category term='yii irc'/><category term='twitter'/><category term='drupal'/><category term='kinézet'/><category term='Symfony'/><category term='PHP5'/><category term='jquery tools'/><title type='text'>A Yii (PHP) keretrendszer, magyarul.</title><subtitle type='html'>A Yii (PHP) keretrendszer, magyarul.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-7719961548699948675</id><published>2012-02-29T06:11:00.001-08:00</published><updated>2012-02-29T06:14:16.347-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='art'/><category scheme='http://www.blogger.com/atom/ns#' term='Prado'/><category scheme='http://www.blogger.com/atom/ns#' term='i18N'/><category scheme='http://www.blogger.com/atom/ns#' term='Ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><category scheme='http://www.blogger.com/atom/ns#' term='Yii'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Az Art-Work.hu története (Murányi S.)</title><content type='html'>&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Az &lt;b&gt;Art-Work&lt;/b&gt; (&lt;a href="http://art-work.hu/"&gt;http://art-work.hu&lt;/a&gt;) története &lt;b&gt;2007&lt;/b&gt;-ben kezdődött el, amikor egy szakdolgozat témájaként jött létre. Mivel én magam is szeretek fotózni, így nem csak a szakdolgozat viszonylag hamar kikerült a netre (&lt;i&gt;deviantart&lt;/i&gt;, &lt;i&gt;stockexpert&lt;/i&gt; ihletésére). Reklámozni akkoriban csak iwiw-en reklámoztam, illetve készült pár száz szórólap, amit pár városban művészeti iskolákban szórtunk ki.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;2007-2009&lt;/b&gt; -ig három verziót élt meg az oldal. A verzió váltás okai a szakmai fejlődésem volt elsősorban.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Az első nagyobb lépés a 2009-ben &lt;b&gt;PRADO&lt;/b&gt;-ra váltás volt, amikor már némi web2 is bekerült az oldalba, és mégis csak egy összeszedettebb rendszer volt, mint az addigiak. A &lt;b&gt;PRADO&lt;/b&gt;-t nagyon szerettem, mert jó volt használni, megvoltak a megfelelő dolgok, nem kellett semmiben feltalálni a spanyol viaszt.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;2009-2011&lt;/b&gt;-ig sajnos nem nagyon volt foglalkozva az oldallal az akkori munkahelyem miatt, ezért a felhasználói bázis szép lassan el is felejtette az oldalt. Így az addig összegyűlt 1000 felhasználó és 8000 kép ott maradt.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;2011 végén, munkahely váltás után lett szabadidőm ismét, és az akkor már általam használt &lt;b&gt;Yii&lt;/b&gt;-ben gondoltam, hogy újra írom az oldalt.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Így az már működik és ismét zajlik az élet :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;A &lt;b&gt;Yii&lt;/b&gt;-re azért váltottam &lt;b&gt;PRADO&lt;/b&gt;-ról, mert ugyan az &lt;b&gt;MVC&lt;/b&gt; nagyon új volt a &lt;b&gt;PRADO&lt;/b&gt; felfogásával szemben, ám sebességben olyan szakadék tátongott a kettő között, hogy egyértelmű volt a váltás. Megnyugtató volt számomra, hogy a &lt;b&gt;Yii&lt;/b&gt; egyik fejlesztője a &lt;b&gt;PRADO&lt;/b&gt; volt alapítója, így egyértelmű volt, hogy minőségi keretrendszer ez is.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;b&gt;Yii&lt;/b&gt;-ben kihasználok mindent, amit lehet, de azért pár dolog, aminek nem tetszik a működése, azt inkább magam készítem. Ilyen például az &lt;i&gt;assetek&lt;/i&gt; kezelése. Nem szimpatikus, hogy egy mappában random dir-be kerülnek az &lt;i&gt;assetek&lt;/i&gt;, és ha kiviszem &lt;b&gt;production&lt;/b&gt;-be az alkalmazást, akkor új dir-ek generálódnak. Inkább én belinkelem magamnak, ami éppen kell. Remélem ezt valamikor átalakítják.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Nem szoktam használni a &lt;b&gt;grid&lt;/b&gt;-et például, inkább saját foreach ciklust használok, mert felesleges extra lépcsőként tekintek erre a lehetőségre.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Kiegészítettem a rendszert egy saját &lt;b&gt;DataType osztálly&lt;/b&gt;al és annak leszármazottjaival, mellyel igyekszem a &lt;b&gt;PHP&lt;/b&gt; laza típus kezelését kivédeni. &lt;b&gt;AJAX&lt;/b&gt; kommunikációnál és minden klienstől REQUEST-ben érkező adatnál kialakítottam egy &lt;b&gt;DTO&lt;/b&gt; &lt;i&gt;(Data Transfer Object)&lt;/i&gt; rendszert, ahol előre definiált adatok közlekednek az objektumok között, nem csak feltöltöm a &lt;i&gt;model attributes property&lt;/i&gt;-jét a POST-ból érkező adattal. Így pl, mivel &lt;i&gt;külön class&lt;/i&gt;-ban van mondjuk egy &lt;b&gt;form&lt;/b&gt;-tól várt mezők, jól látható, hogy mi az, és csak az, amit a klienstől várunk. Nagyjából a &lt;b&gt;CFormModel&lt;/b&gt; is ezt oldja meg (ha jól tudom), próbáltam is használatát, de kevésbé volt szimpatikus, mint a saját megoldásom.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Ha elakadok, sokszor segít a &lt;b&gt;Yii fórum&lt;/b&gt;ban keresgélés, de a &lt;b&gt;stackoverflow&lt;/b&gt;-n is nagyon sok Yii-s problémára találok megoldást.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Amit viszont örömmel használok a Yii alap lehetőségeiből és &lt;b&gt;letölthető extension&lt;/b&gt;-jaiból: &lt;i&gt;EAjaxUpload&lt;/i&gt;, &lt;i&gt;urlManager&lt;/i&gt;, &lt;i&gt;YiiMail&lt;/i&gt;, &lt;i&gt;I18N&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Amit még fontosnak tartok megemlíteni, mert sokat könnyít a fejlesztésen, az az, hogy az &lt;b&gt;I18N&lt;/b&gt; modult kiegészítettem egy &lt;i&gt;wrapper&lt;/i&gt; osztállyal, amit ugyanúgy kell használni, mint a &lt;b&gt;Yii&lt;/b&gt; által adott &lt;i&gt;default tool&lt;/i&gt;-t, annyi különbséggel, hogy nem kell magunknak belerakni az új fordítandó szavakat az adott dictionary php-ba, hanem magától belerakja, ha még nincs benne, illetve a file-t is létrehozza, ha még nincs. Ez a felfogás a &lt;b&gt;PRADO&lt;/b&gt;-ból jött, mert ott is nagyon tetszett, hogy ezt megcsinálja helyettem. Ezt a Yii fórumon meg is osztottam természetesen.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;Jelenleg a UNIT tesztek írását készítem, ahol azért néha rájövök, hogy nem teljesen sikerült minden részt tesztelhetőre készíteni. Ezért is alakítottam ki a &lt;b&gt;DTO&lt;/b&gt; környzetet például.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: rgba(255, 255, 255, 0.918); color: #222222; display: inline ! important; float: none; font-family: arial,sans-serif; font-size: 13px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"&gt;&lt;i&gt;-- írta&amp;nbsp; Murányi Sándor&lt;/i&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-7719961548699948675?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/7719961548699948675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2012/02/az-art-workhu-tortenete-muranyi-s.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7719961548699948675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7719961548699948675'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2012/02/az-art-workhu-tortenete-muranyi-s.html' title='Az Art-Work.hu története (Murányi S.)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-2114362858810495252</id><published>2011-11-03T09:58:00.000-07:00</published><updated>2011-11-03T09:58:43.717-07:00</updated><title type='text'>Yii 1.1 Application Development Cookbook (összefoglaló magyarul)</title><content type='html'>Sajnos irói válságban szenvedek, de szerencsére egyedül vagyok ezzel. &lt;b&gt;Greg&lt;/b&gt;nek szerencsére sikerült egy nagyon jó kis összefoglalót írnia a &lt;b&gt;weblabor.hu&lt;/b&gt; hasábjain a nemrég megjelent &lt;b&gt;Yii 1.1 Application Development Cookbook&lt;/b&gt;-ról:&lt;br /&gt;&lt;br /&gt;"Nemrég jelent meg a Packt kiadónál a Yii 1.1 Application Development Cookbook, nyolcvan hasznos recepttel a Yii Frameworkhöz. A szerző az egyik Yii core developer, Alexander Makarov.&lt;br /&gt;&lt;br /&gt;A könyv véleményem szerint inkább a Yii Framework alapjaival már tisztában lévő fejlesztőknek szól, viszont ők sokat tanulhatnak belőle. Minden fejezet bővelkedik kódpéldákban, és mindennapi problémákra kínál megoldásokat.&lt;br /&gt;..."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblabor.hu/olvasas/110127"&gt;Az egész cikket ide klikkolva lehet megtekinteni.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://weblabor.hu/misc/fs/yii-application-development-cookbook.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://weblabor.hu/misc/fs/yii-application-development-cookbook.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-2114362858810495252?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/2114362858810495252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/11/yii-11-application-development-cookbook.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2114362858810495252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2114362858810495252'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/11/yii-11-application-development-cookbook.html' title='Yii 1.1 Application Development Cookbook (összefoglaló magyarul)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6101524328790195093</id><published>2011-08-28T08:52:00.000-07:00</published><updated>2011-08-28T08:53:04.497-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='programozás'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='könyv'/><title type='text'>Megjelent Nagy Gusztáv - Web Programozás (alapismeretek) című könyve</title><content type='html'>Egyre többen probálkoznak &lt;b&gt;Web programozás&lt;/b&gt;sal tizenéves gyerekektől egyetemen végzett diákokon át&amp;nbsp;lelkes amatőrökig. A számítógépek, programozási nyelvek, mobil telefonok már már hihetetlen iramú fejlődése naprakész ismerettséget követel minden (&lt;i&gt;webes&lt;/i&gt;) programozásra vetemedő egyéntől. De egy biztos. Megéri.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nagy Gusztáv&lt;/b&gt; megpróbálja egy könyvben összefoglalni mi is az a Web- és Web Programozás. Az alap &lt;b&gt;HTML&lt;/b&gt; elemektől kezdve, a &lt;b&gt;CSS&lt;/b&gt; gyönyörein át a különböző szerverbeállítások fondorlatosságaiba merülhetünk bele, fűszerezve persze szerver oldali programokkal (&lt;b&gt;PHP&lt;/b&gt;). Továbbá megtudjuk mi is az a &lt;b&gt;CMS&lt;/b&gt;, és megismerhetjük a Keretrendszer fogalmát is (megemlíti a &lt;b&gt;Yii&lt;/b&gt;-t is, így került ebbe a blogba ;) )&lt;br /&gt;&lt;br /&gt;A könyvet nyugodt szívvel ajánlhatjuk olyanoknak akik még csak most ismerkednek a webes programozással, de olyanoknak is, akik régebben kezdték és szeretnék felfrissjteni/felújitani tudásukat.&lt;br /&gt;&lt;br /&gt;Jó könyv, csak így tovább Gusztáv!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nagygusztav.hu/web-programozas"&gt;Link a könyvhöz.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://nagygusztav.hu/sites/default/files/kepek/nagy_gusztav-webprog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://nagygusztav.hu/sites/default/files/kepek/nagy_gusztav-webprog.png" width="227" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6101524328790195093?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6101524328790195093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/08/megjelent-nagy-gusztav-web-programozas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6101524328790195093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6101524328790195093'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/08/megjelent-nagy-gusztav-web-programozas.html' title='Megjelent Nagy Gusztáv - Web Programozás (alapismeretek) című könyve'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-1971904095495601431</id><published>2011-08-01T13:00:00.000-07:00</published><updated>2011-08-01T13:00:02.700-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kütyü'/><category scheme='http://www.blogger.com/atom/ns#' term='extension'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='github'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><category scheme='http://www.blogger.com/atom/ns#' term='markdown'/><title type='text'>Gittegylet meg a Yii - avagy Yiiki 2.0 (4. rész)</title><content type='html'>Ebben a negyedik és egyben utolsó részben kicsit kifényesítjük a programunkat, olyan finomságokat rakunk majd bele, mint MarkDown-parser (markdown értelmező), WIKI editor és a legvégén pedig megnézzük hogyan lehet a Git (illetve a &lt;a href="http://github.com/"&gt;Github&lt;/a&gt;) segítségével forrásunkat publikussá tenni.&lt;br /&gt;&lt;br /&gt;Fejlesztéseink közben gyakran fordul elő olyan helyzet, hogy valaki (lehet, hogy mi magunk) valahol máshol (pl. egy másik keretrendszer alatt) már megoldotta a felmerülő problémát és szeretnénk a kódot újra felhasználni. Erre Yii barátunk többféle lehetőséget ad. Használhatunk, kifejezetten Yii-nek szánt kiterjeszések -et (extensions: &lt;a href="http://www.yiiframework.com/extensions/"&gt;http://www.yiiframework.com/extensions/&lt;/a&gt; ) vagy teljesen Yii-től független csomagokat. Ilyen például a &lt;b&gt;ZendFramework&lt;/b&gt;-be beépített &lt;b&gt;RSS&lt;/b&gt; kezelő rendszer. Nekünk jelenleg erre nincs szükségünk, de ha valakit bővebben érdekel, az itten járhat utána: &lt;a href="http://www.yiiframework.com/doc/cookbook/20/"&gt;http://www.yiiframework.com/doc/cookbook/20/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;MarkDown&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Szerencsénkre Yii már az 1.0-ás verzió óta rendelkezik egy ún. MarkDown osztállyal (CMarkdown) és egy MarkDown widget-tel amit a megjelenítésre fogunk használni. Nyissuk is meg a Nézet file-unkat és módosítsuk:&lt;br /&gt;&amp;nbsp;&lt;i&gt;/protected/views/page/view.php&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=nMAx6QzS"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;... és ennyi, a megjelenítés kész is van. A &lt;b&gt;CMarkDown&lt;/b&gt;&amp;nbsp;osztályról és használatáról itt lehet bővebben olvasni:&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CMarkdown"&gt;http://www.yiiframework.com/doc/api/1.1/CMarkdown&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Zii&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Zii&lt;/b&gt; nem más mint a hivatalos, Yii fejlesztők által támogatott extension- azaz &lt;i&gt;kiterjesztés&lt;/i&gt; könyvtár. Ez együtt érkezik magával a Yii rendszerrel tehát nem kell semmi mást beállítanunk vagy installálnunk. Ezzel szemben van egy YiiExt nem hivatalos kiterjesztés-könyvtár amit innen&amp;nbsp;&lt;a href="http://code.google.com/p/yiiext/"&gt;http://code.google.com/p/yiiext/&lt;/a&gt;&amp;nbsp;lehet elérni. Innen fogjuk mi a &lt;a href="http://markitup.jaysalvat.com/home/"&gt;markItUp&lt;/a&gt; szövegszerkesztőt beállítani, ami szépen megy a már előre felkészített &lt;b&gt;MarkDown&lt;/b&gt; tipusú Oldalainkhoz.&lt;br /&gt;&lt;br /&gt;Töltsük is le a &lt;b&gt;markit_xx.zip&lt;/b&gt; file-t (&lt;a href="http://code.google.com/p/yiiext/downloads/detail?name=markitup_1.1.zip&amp;amp;can=2&amp;amp;q="&gt;http://code.google.com/p/yiiext/downloads/detail?name=markitup_1.1.zip&amp;amp;can=2&amp;amp;q=&lt;/a&gt;), tömörítsük ki és másoljuk be a legutolsó &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;markitup/&lt;/span&gt; mappát a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/extensions/&lt;/span&gt;&amp;nbsp;alá. Ha ezzel megvagyunk egyszerűen csak hívjuk meg a widget-et a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/views/page/_form.php&lt;/span&gt; file-ban és állítsuk be a paramétereket:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Kx4YhwmN"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ha mindent jól csináltunk akkor valami ilyesmit kell, hogy lássunk ha meglátogatjuk a &lt;a href="http://localhost/yiiki2/index.php?r=page/create"&gt;http://localhost/yiiki2/index.php?r=page/create&lt;/a&gt; oldalt:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-pGgBk-b8fuo/TiYVydVPlVI/AAAAAAAAJOM/FeV4REc_TZQ/s1600/createpage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="317" src="http://1.bp.blogspot.com/-pGgBk-b8fuo/TiYVydVPlVI/AAAAAAAAJOM/FeV4REc_TZQ/s640/createpage.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Maga a &lt;b&gt;WIKI&lt;/b&gt; szerkesztőnk már egész jól néz ki, de milyen jó lenne ha a &lt;b&gt;title&lt;/b&gt; meg a &lt;b&gt;body&lt;/b&gt;&amp;nbsp;feliratok magyarul jelennének meg. Ezt nagyon egyszerűen a &lt;b&gt;Page&lt;/b&gt; modell osztályunk &lt;b&gt;attributeLabels()&lt;/b&gt; függvényével tehetjük meg.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Github&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Git&lt;/b&gt; forráskezelő előretörését nagy mértékben segítette a &lt;a href="http://github.com/"&gt;Github&lt;/a&gt; oldal, ami nem más mint egy online kód tároló, ahová teljesen ingyé feltehetjük a kódunkat. Egyébként már a &lt;b&gt;Google&lt;/b&gt; is támogatja a &lt;b&gt;Git&lt;/b&gt;-et a &lt;b&gt;Mercury&lt;/b&gt; meg az &lt;b&gt;SVN&lt;/b&gt; mellett. Ha eddig nem tettük volna, az &lt;a href="http://yiihun.blogspot.com/2011/07/gittegylet-meg-yii-avagy-yiiki-20-1.html"&gt;első cikk&lt;/a&gt; alapján &lt;i&gt;commit&lt;/i&gt;-oljuk a változásainkat, és készítsünk egy fiókot a &lt;a href="https://github.com/plans"&gt;Github&lt;/a&gt; oldalon. Ha ezzel megvagyunk, akkor készítsünk egy &lt;b&gt;new&amp;nbsp;repository&lt;/b&gt;-t. Miután beállítottuk az alap paramétereket (csak a név kötelező), az új oldalon csak kövessük végig az utasításokat az &lt;b&gt;Existing Git Repo?&lt;/b&gt; rész alatt. Ha minden igaz, valahogy most így nézünk ki:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-rAuItt762VE/TiYvztvUPKI/AAAAAAAAJOQ/l3yh8eiop7Q/s1600/github.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://1.bp.blogspot.com/-rAuItt762VE/TiYvztvUPKI/AAAAAAAAJOQ/l3yh8eiop7Q/s640/github.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A programot egyébként itt is meg lehet találni:&amp;nbsp;&lt;a href="https://github.com/imehesz/Yiiki2"&gt;https://github.com/imehesz/Yiiki2&lt;/a&gt;&amp;nbsp;és a a Github egyik erőssége az ún. &lt;i&gt;fork&lt;/i&gt;-olás ami azt jelenti, hogy ha pl. találunk egy hibát a kódban, &lt;i&gt;fork&lt;/i&gt;-olhatjuk az eredetit, kijavíthatjuk és jelezhetjük a program készítőjének egy &lt;i&gt;pull-request&lt;/i&gt;-tel azaz &lt;i&gt;pull&lt;/i&gt; &lt;i&gt;kérés&lt;/i&gt;sel, hogy a kód javítva lett, és ha jónak találja, akkor frissítheti az eredeti kódot.&lt;br /&gt;&lt;br /&gt;Hát ennyi. Remelém aki végig követte a sorozatot annak sikerült valamit tanulni belőle. Indítottam egy &lt;a href="http://www.yiiframework.com/forum/index.php?/topic/21748-elakdtam-a-yiiki2-vel-segitseg-kene/"&gt;fórum bejegyzést&lt;/a&gt; annak akinek segítségre van szüksége, nem ígérem, hogy azonnal de megpróbálok mindenkinek válaszolni. (Akinek meg van kedve segíteni a válaszadásban annak előre is köszönöm)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-1971904095495601431?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/1971904095495601431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/08/gittegylet-meg-yii-avagy-yiiki-20-4.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1971904095495601431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1971904095495601431'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/08/gittegylet-meg-yii-avagy-yiiki-20-4.html' title='Gittegylet meg a Yii - avagy Yiiki 2.0 (4. rész)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-pGgBk-b8fuo/TiYVydVPlVI/AAAAAAAAJOM/FeV4REc_TZQ/s72-c/createpage.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-7882544951049737812</id><published>2011-07-26T01:04:00.000-07:00</published><updated>2011-07-26T01:04:00.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crud'/><category scheme='http://www.blogger.com/atom/ns#' term='beforeSave'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='gii'/><title type='text'>Gittegylet meg a Yii - avagy Yiiki 2.0 (3. rész)</title><content type='html'>Akik még mindig olvassák ezt a cikk sorozatot, azoknak &lt;b&gt;KÖSZI&lt;/b&gt;. Akik csak most probálkoznak bekapcsolódni, azoknak mindenképp ajánlom az előző két rész elolvasását hiszen ott ismerkedtünk meg olyan dolgokkal mint a &lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;b&gt;yiic&lt;/b&gt;&lt;/span&gt; parancs, &lt;b&gt;Git&lt;/b&gt; forráskezelő és a &lt;b&gt;Gii&lt;/b&gt; kódgeneráló.&lt;br /&gt;&lt;br /&gt;Az előző részt ott fejeztük be, hogy a &lt;b&gt;Gii&lt;/b&gt; segítségével elkészítettük a &lt;b&gt;Page&lt;/b&gt; modell osztályunkat a &lt;i&gt;pages&lt;/i&gt; táblához. Ha most megnézzük, hogy hogy áll a forrásunkat (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;git status&lt;/span&gt;) akkor láthatjuk, hogy egy &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Page.php&lt;/span&gt; file jött létre a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/model/&lt;/span&gt; mappán belül. Ezt hozzá is adhatjuk a szokásos &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;git add&lt;/span&gt; paranccsal. (A Git-ről itt van egy&amp;nbsp;&lt;a href="http://www.math.bme.hu/~balazs/git/miagit.html"&gt;leírás magyarul&lt;/a&gt; a &lt;b&gt;BME&lt;/b&gt; oldalain. Ebben a cikk sorozatban már csak a végén vesszük elő mégegyszer, amikor publikáljuk a programunkat).&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;CRUD&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Azzal, hogy elkészítettük a &lt;b&gt;Page&lt;/b&gt; modellünket, még semmi, böngészőben látható eredményt nem sikerült produkálnunk. Itt jön a CRUD a képbe,&lt;br /&gt;&lt;br /&gt;&lt;b&gt;C&lt;/b&gt;reate - Létrehoz&lt;br /&gt;&lt;b&gt;R&lt;/b&gt;ead - (Be)olvas&lt;br /&gt;&lt;b&gt;U&lt;/b&gt;pdate - Frissít&lt;br /&gt;&lt;b&gt;D&lt;/b&gt;elete - Töröl&lt;br /&gt;&lt;br /&gt;Most megint vegyük elő a varázságyúnkat (Gii) és belépés után kattintsunk a &lt;i&gt;Crud Generator&lt;/i&gt; linkre. Ha minden igaz, egy két mezős form-ot kell kapnunk, ahol valójában elég csak az első mezőt kitölteni a &lt;b&gt;Model Class&lt;/b&gt;-t azaz Modell Osztáy-t, a &lt;b&gt;Controller ID&lt;/b&gt;-t a Gii magától kitalálja. Jó mi? (&lt;u&gt;Megj&lt;/u&gt;: a &lt;b&gt;Base Controller Class&lt;/b&gt; és a &lt;b&gt;Code Template&lt;/b&gt; útvonal is átírható, így ezek segítségével ha akarjuk teljesen újraírhatjuk a Gii viselkedését.)&lt;br /&gt;&lt;br /&gt;Tehát írjuk be a &lt;b&gt;Model Class&lt;/b&gt;-be, hogy &lt;i&gt;Page&lt;/i&gt; és nyomjuk meg (csak egyszer!) a &lt;i&gt;Preview&lt;/i&gt; gombot. Ha valami ilyesmit látunk akkor örülhetünk:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-n_Z3blYvu9w/Thz9bhYNGeI/AAAAAAAAJN4/Cwb7L2z-VJk/s1600/crud.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="391" src="http://2.bp.blogspot.com/-n_Z3blYvu9w/Thz9bhYNGeI/AAAAAAAAJN4/Cwb7L2z-VJk/s400/crud.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Itt már lényegesen több file fog elkészülni mint a modell létrehozásánál. Láthatjuk, hogy maga a &lt;b&gt;Controller&lt;/b&gt; (vezérlő) is elkészül majd, a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;view/page&lt;/span&gt; mappa is, ahol a rendszer fogja tárolni a szükséges nézet file-okat (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;create.php, update.php, view.php&lt;/span&gt; stb). Ha minden OK, nyomhatunk a Generate-ra.&lt;br /&gt;&lt;br /&gt;A programunk jelenlegi állapotában már mindenre kész. Tudunk oldalakat listázni, készíteni és törölni. Hogy megbizonyosodjunk róla, böngészőnkkel látogassuk meg a következő URL-t:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://localhost/index.php?r=page"&gt;http://localhost/index.php?r=page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Na de mi nem elégszünk meg ennyivel, hiszen egy igazi Wiki-t szeretnénk készíteni. Jöhet a testreszabás ...&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Testreszabás&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Beviteli form módosítása&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ha most probálnánk egy &lt;i&gt;Page&lt;/i&gt;-t azaz &lt;i&gt;Oldal&lt;/i&gt;t készíteni (&lt;a href="http://localhost/index.php?r=page/create"&gt;http://localhost/index.php?r=page/create&lt;/a&gt;), akkor azonnal észlelnénk, hogy a beviteli form-on egy csomó olyan mező van, amit nem szeretnénk kézzel minden egyes alkalommal kitölteni, illetve elvárnánk a programunktól, hogy saját maga töltse ki. Ilyen például a &lt;b&gt;created&lt;/b&gt; vagy a &lt;b&gt;revision&lt;/b&gt; mező.&lt;br /&gt;&lt;br /&gt;Módosítsuk is a form-unkat valahogy így:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=XR8ReiTv"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A Page Modell Szabályainak Beállítésai&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A Page (&lt;i&gt;Oldal&lt;/i&gt;) modellünkre is ráfér egy kis farigcsálás. Ugyan &lt;b&gt;Gii&lt;/b&gt; többnyire kitalálta, hogy milyen szabályokat hozzon létre a különböző form mezőkhöz, a gondolatolvasástól azért még messze van.&lt;br /&gt;&lt;br /&gt;Mi ugyanis szeretnénk, ha az &lt;b&gt;Oldal&lt;/b&gt;unk címébe csakis betűk, számok, vagy aláhúzás jel szerepelhessen. (Egy jó kis bővítés lenne, ha a programunk automatikusan felülírná a bevitt a címet, de az példa kedvéért itt egy szabályt hozunk létre)&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected/models/Page.php&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=qQRDBCZ6"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Az itt használt szabályok elég egyértelműek, de ha valaki jobban bele szeretne mélyülni itt olvashat róluk bővebben: &lt;a href="http://www.yiiframework.com/doc/cookbook/56/"&gt;http://www.yiiframework.com/doc/cookbook/56/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Itt még azt is megfigyelhetjük, hogy hogyan kell a programunkat magyarul tanítani ;)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A &lt;i&gt;beforeSave()&lt;/i&gt; and &lt;i&gt;save()&lt;/i&gt; modell függvények használata/felülírása&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A modelljeink, amik a programunkban az adatbázis lekérdezéseket kezelik, mindenféle függyvényekkel fel vannak fegyverkezve, hogy nekünk ne kelljen védőkesztyű nélkül SQL-kódban kotorászni. Az egyik ilyen függvény a &lt;b&gt;save()&lt;/b&gt; (mentés) és hű csatlósa a &lt;b&gt;beforeSave()&lt;/b&gt; (mentés elött elment). A save() egy adatbázis rekordot köteles elmenteni vagy felülírni.&lt;br /&gt;&lt;br /&gt;A &lt;i&gt;pages&lt;/i&gt; adatbázis táblánkban van egy olyan mező, hogy &lt;i&gt;created&lt;/i&gt; (készítve), ami egy dátum mező. (a példánkban UNIX Timestamp-et használunk!) Ez a mező tartja nyilván, hogy az adott oldal mikor lett készítve/felülírva. Ugyan használhatnánk a &lt;b&gt;save()&lt;/b&gt; függvényt arra, hogy ezt az értéket beállítsuk, a példa kedvéért ezt a &lt;b&gt;beforeSave()&lt;/b&gt;-vel oldjuk meg.&lt;br /&gt;&lt;br /&gt;(Az fontos, hogy itt a szülő &lt;b&gt;beforeSave()&lt;/b&gt;-jével térjünk vissza, &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;return parent::beforeSave()&lt;/span&gt; )&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected/models/Page.php&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=97Fnq8jN"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Néha előfordul, hogy még a form mezők ellenőrzése elött szeretnénk beállítani valamilyen értéket, ezt a &lt;b&gt;beforeValidate()&lt;/b&gt; funkcióval tehetjük meg.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;save()&lt;/b&gt; függvénynél már kicsit más a helyzet. Először vegyük sorra, hogy mit is szeretnénk a programunktól, amikor elmentünk egy oldalt. Ha minden igaz, említettük az elején, hogy a jövőben szeretnénk egy &lt;i&gt;revert&lt;/i&gt; opciót, ami annyit jelent, hogy az odalalainkat, ha akarjuk, visszaállíthatjuk egy korábbi változatba. Ezt többféle módon is meg lehet valósítani, de talán a legrövidebb megoldás, ha az oldalakat mindig újként mentjük el, és csak növeljük a &lt;i&gt;revision&lt;/i&gt; azaz verziószámot.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected/models/Page.php&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Vvsr2bMj"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;A Yii modell osztálya olyan finomságokkal lát el bennünket, mint például a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$this-&amp;gt;isNewRecord&lt;/span&gt; ami egyszerűen megmondja nekünk, hogy most egy új rekordról van e szó, vagy csak felülírunk egyet. Mi persze tudjuk, hogy nekünk arra van szükségünk, hogy minden egyes oldal újként legyen elmentve, tehát ha az oldal nem új, akkor egyszerűen gyártunk egyet ami a&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt; $newpage-&amp;gt;attributes=$this-&amp;gt;attributes&lt;/span&gt; segítségével felveszi az eredeti oldal értékeit.&lt;br /&gt;&lt;br /&gt;Még annyit érdemes megjegyezni, hogy ha a &lt;b&gt;save()&lt;/b&gt; függvényt &lt;i&gt;false&lt;/i&gt; paraméterrel hívjuk meg, akkor az &lt;b&gt;ActiveRecord&lt;/b&gt;-ban beállított szabályai nem vonatkoznak az adott rekordra.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Az Oldalak-at lekérő SQL módosítása és a hozzá tartozó Nézet (View) beállítása&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ha most néznénk meg az Oldalak listáját, azt vennénk észre, hogy programunk, az egyes Oldalakhoz tartozó összes reviziót megmutatja. Ez ideáig rendben is van, hiszen minden egyes változatot "&lt;i&gt;új&lt;/i&gt;"-ként mentettünk el, azonban ez elég zavaró lehet, meg bugyután is néz ki. Ha eddig még nem említettük volna, majd minden &lt;b&gt;Controller &lt;/b&gt;osztálynak&amp;nbsp;van egy úgynevezett actionIndex()-je ami az alapértelmezett függvény. Jelen esetünkben ez szolgáltatja az Oldalak listáját. Keressük is meg a PageController-ben és módosítsuk a következők szerint:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected/controllers/PageController.php - actionIndex()&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=bxYHGrRp"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;SQL-ben valamennyire jártasabbak egyből kiszúrhatják, hogy mi is történik. Itt létrehozunk egy úgynevezett &lt;b&gt;CDBCriteria()&lt;/b&gt; osztályt aminek segítségével különböző SQL paramétereket állíthatunk be, és ez által módosíthatjuk a lekérdezéseinket, ami ebben az esetben az Oldalak csoportosítását jelenti a title azaz cím szerint, és rendezést a létrehozás dátuma szerint.&lt;br /&gt;&lt;br /&gt;Az alábbi file-okat pedig módosítsuk izlésünk szerint (illetve az én izlésem szerint). Ha még emlékszünk, a PageController-t kicsit átalakítottuk, hogy az adott Oldal azonosító ID-ja helyett a title mező értékével dolgozzon. Ez nagyon szép és jó, de a program többi részét is kicsit át kell alakítanunk. Ilyen például az &lt;b&gt;actionCreate()&lt;/b&gt; és &lt;b&gt;actionUpdate()&lt;/b&gt; funkciókban használt &lt;b&gt;redirect()&lt;/b&gt; ami azt a célt szolgálja, hogy bizonyos események után böngészőnket egy meghatározott oldalra küldje.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected/controllers/PageController.php&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=AgnPpj5k"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;A következő file-ok pedig a megjelenítést szolgálják ...&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected/views/page/_view.php&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=fa14GBhZ"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;protected/views/page/view.php&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=TMahz0F4"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Jajj de jó, már lassan készen is vagyunk. Mondjuk a megjelenített oldal egyáltalán nem úgy néz ki mint egy igazi &lt;b&gt;Wiki&lt;/b&gt; oldal. A következő részben megnézzük, hogyan használjuk a Yii-be alapból beépített &lt;b&gt;MarkDown&lt;/b&gt; értelmezőt, hogy megússzuk a sok &lt;i&gt;str_replace()&lt;/i&gt;-t ;)&lt;br /&gt;&lt;br /&gt;Mivel a &lt;b&gt;Wiki&lt;/b&gt; alkalmazásunk elég speciális (ID-k helyett a cím alapján találunk meg egy-egy Oldalt), ezért a &lt;b&gt;Page&lt;/b&gt; vezérlőnkben elég sok minden változott,úgyhogy a teljesség kedvéért ide betettük az egész osztályt.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=1Cks2p1W"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-7882544951049737812?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/7882544951049737812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/07/gittegylet-meg-yii-avagy-yiiki-20-3.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7882544951049737812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7882544951049737812'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/07/gittegylet-meg-yii-avagy-yiiki-20-3.html' title='Gittegylet meg a Yii - avagy Yiiki 2.0 (3. rész)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-n_Z3blYvu9w/Thz9bhYNGeI/AAAAAAAAJN4/Cwb7L2z-VJk/s72-c/crud.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6600994367909177525</id><published>2011-07-19T01:00:00.000-07:00</published><updated>2011-07-19T01:00:10.284-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='migrációk'/><category scheme='http://www.blogger.com/atom/ns#' term='kód generálás'/><category scheme='http://www.blogger.com/atom/ns#' term='modell'/><category scheme='http://www.blogger.com/atom/ns#' term='gii'/><title type='text'>Gittegylet meg a Yii - avagy Yiiki 2.0 (2. rész)</title><content type='html'>Az első részben elkészítettük a &lt;b&gt;Yiiki 2.0&lt;/b&gt; alkalmazásunk alapjául szolgáló keretünket a Yii segítségével és megismerkedtünk a Git forráskezelővel. Ebben részben először kicsit átírjuk a belépő &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;index.php&lt;/span&gt; file-t, elkészítjük az adatbázisunkat a Yii-be épített &lt;i&gt;migráció&lt;/i&gt; kezelővel, majd létrehozzuk a Modell osztályunkat &lt;b&gt;Gii&lt;/b&gt;-vel, a Yii kódgeneráló varázságyújával (tényleg az).&lt;br /&gt;&lt;br /&gt;Amikor az alkalmazásunkat létrehoztuk a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiic&lt;/span&gt; paranccsal, maga a Yii készített nekünk egy konfigurációs file-t a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/config/&lt;/span&gt; alatt &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;main.php&lt;/span&gt; néven. Természetesen használhatnánk ezt a file-t úgy ahogy van, de igazából nem szerencsés a rendszer kofigurációs adatait a forráskezelő alá tenni, hiszen a beállítások mások lesznek különböző környezetek alatt (pl. fejlesztői, éles stb), sőt az adatbázis kapcsolathoz szükséges felhasználó és jelszó is ebben a file-ban van. Erre a problémára&amp;nbsp;természetesen többféle megoldás is lehet, itt csak egyet mutatunk be.&lt;br /&gt;&lt;br /&gt;Első lépésként másoljuk a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/config/main.php&lt;/span&gt; -t &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;development.config.php&lt;/span&gt; -ra:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$cp protected/config/main.php protected/config/development.config.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ha most &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;git stat&lt;/span&gt;-tal megnéznénk, hogy hogyan is áll a forráskódunk, látnánk, hogy a git azt jelzi, hogy van egy új file-unk. Mi persze nem szeretnénk a konfigurációs file-t a forráskezelő alá helyezni, ezért tegyük is a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.gitignore&lt;/span&gt; file-ba.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Belépő script módosítása&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Most kedvenc kódszerkesztőnk segítségével (ami nyilván &lt;a href="http://www.vim.org/"&gt;VIM&lt;/a&gt;), nyissuk meg az &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;index.php&lt;/span&gt; file-t és módosítsuk a követlkező képpen.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Lk1LUxDx"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ezzel csupán azt értük el, hogy amikor ha a &lt;b&gt;YII_DEBUG&lt;/b&gt; konstanst &lt;i&gt;true&lt;/i&gt;-ra állítjuk, akkor programunk a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;development.config.php&lt;/span&gt;-t fogja betölteni, egyébként pedig a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;production.config.php&lt;/span&gt;-t amit majd később az éles, mindenki által elérhető szerveren fogunk használni.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Adatbázis Migrációk&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yiihun.blogspot.com/2010/11/adatbazis-migraciok-yii-vel.html"&gt;Migrációkról&lt;/a&gt; más esett szó ezen a blogon, igaz akkor még egy különálló modulként kellett installálni, de szerencsére ez mára már a &lt;b&gt;Yii&lt;/b&gt;, pontosabban a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiic&lt;/span&gt; része. Röviden arról van szó, hogy könnyebb hordozhatóság kedvéért az adatbázis táblákat migrációs osztályok és tömbök segítségével készítjük el.&lt;br /&gt;&lt;br /&gt;Jelenleg, mivel az eredeti &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;main.php&lt;/span&gt; konfigurációs file-t másoltuk át &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;development.config.php&lt;/span&gt;-re, adatbázisunk még mindig a&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;testdrive.db&lt;/span&gt;. Ezzel sajna nem sokra megyünk, úgyhogy állítsuk is át valami másra, pl:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;'components' =&amp;gt; array(&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; 'db'=&amp;gt;array(&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; 'connectionString' =&amp;gt; 'sqlite:'.dirname(__FILE__).'/../data/yiiki2.db.sqlite',&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; ),&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;),&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Ugyanezt tegyük meg a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/config/console.php&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; file-ban is, hiszen a migrácókat készítő &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiic&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; parancs innen olvassa be az adatbázis hozzáférési adatait.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Már nincs más hátra mint előre, készítsük el a táblánkat az adatbázisban (a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiiki2/&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; mappában adjuk ki a következő parancsot):&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$./protected/yiic migrate create pages_tabla_letrehozasa&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Yii Migration Tool v1.0 (based on Yii v1.1.8)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Create new migration '/var/www/yiiki2/protected/migrations/m110710_033230_pages_tabla_hozzaadasa.php'? [yes|no]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Mondjuk neki, you &lt;b&gt;'y'&lt;/b&gt; (igen) és ha minden igaz, akkor egy a megerősítő "&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;New migration created successfully.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;" - üzenetet kapjuk vissza. HURRÁ! Ezzel egy új file került létrehozásra a protected/migrations alatt valami hasonló névvel:&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;m110710_033230_pages_tabla_hozzaadasa.php&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;. Itt az &lt;b&gt;'m'&lt;/b&gt; csak azt jelzi, hogy ez egy migráció, az utána következő számsorozat pedig a migráció sorszáma, majd a név amit megadtunk.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Nyissuk is meg ezt a file-t és módosítsuk a következők szerint:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=WCSN3eDc"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ezzel elkészítettük az új migrációs lépést, de még le is kell futtassuk, hogy a táblánk magában az adatbázisban is megjelenjen:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$ ./protected/yiic migrate&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Yii Migration Tool v1.0 (based on Yii v1.1.8)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Creating migration history table "tbl_migration"...done.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Total 1 new migration to be applied:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; m110710_033230_pages_tabla_hozzaadasa&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Apply the above migration? [yes|no]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ez csak azt jelenti nekünk, hogy ez a &lt;b&gt;Yii Migrációs Eszköz&lt;/b&gt;&amp;nbsp;1.0-ás változata, a Yii 1.1.8-ra épül és jelenleg &lt;b&gt;1 migrációs lépés&lt;/b&gt;t lehet végrehajtani a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pages_tabla_letrehozasa&lt;/span&gt; -t. Mondjuk neki, hogy &lt;b&gt;'y' &lt;/b&gt;vagy&lt;b&gt; 'yes'&lt;/b&gt;. Ha miden jól sikerült valami hasonlót kell, hogy lássunk:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;*** applying m110710_033230_pages_tabla_hozzaadasa&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; &amp;gt; create table pages ... done (time: 0.201s)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;*** applied m110710_033230_pages_tabla_hozzaadasa (time: 0.054s)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Migrated up successfully.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ez kb. annyit jelent, hogy minden OK. Csak egy megjegyzés - ugyan ebben a cikkben nem fogunk többet a migrációkkal foglalkozni, érdemes őket tanulmányozni, hiszen nagyon sok mindenben segítséget nyújthatnak. Páldául ha az idegen kulcsokat (foreign-keys) a táblák között megfelelően beállítjuk, Yii automatikusan összeköti &lt;b&gt;Modell&lt;/b&gt; osztályainkat a használandó &lt;b&gt;BELONGS_TO&lt;/b&gt;, &lt;b&gt;HAS_ONE&lt;/b&gt; stb. kapcsolatokkal. Persze ezt kézzel is be tudjuk állítani, de mennyivel egyszerűbb amikor nem kell gépelni ... elvégre is lusta programozók lennénk, vagy mi fene.&lt;br /&gt;&lt;br /&gt;Mivel jelenleg egyedül programozunk ez a lépés elhanyagolható, de a példa gyakorlás kedvéért érdemes magát az új migrációs lépést egyből a forráskezelő alá tenni, hogy "csapattársaink" is frissíthessék az adatbázisaikat. Használjuk a git status-t és a git add-et és persze a git commit-ot :)&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Gii Gii Gii Giiiiiiiii&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ha annak idején a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiic&lt;/span&gt;-et a Yii &lt;i&gt;varázspálcájának&lt;/i&gt; hívtuk, a &lt;b&gt;Gii&lt;/b&gt;-t joggal nevezhetjük &lt;b&gt;varázságyú&lt;/b&gt;nak. Egy nagyon egyszerű de szexi, böngészőn keresztül futtatható kód generáló eszközről van szó, ami szépen felgyorsítja a programozást. Azoknak akik meg nyöszörögnek (mert akadnak páran), hogy túl sok a varázslás meg a mágia, vissza lehet menni saját keretrendszert barkácsolni. Sok szerencsét.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Gii&lt;/b&gt; ugyan együtt érkezik a rendszerrel de biztonsági okok miatt alapból ki van kapcsolva. Nyissuk meg a konfigurációs file-unkat és keressünk rá a &lt;b&gt;gii&lt;/b&gt; szóra a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;modules&lt;/span&gt; tömb környékén. Ha megvan, nyilván szedjük ki a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;/* ...&amp;nbsp;*/&lt;/span&gt;-t, és állítsunk be egy jelszavat (password), mondjuk: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;giiros&lt;/span&gt;&amp;nbsp;-ra (vicces mi? haha).&lt;br /&gt;&lt;br /&gt;Most látogassuk meg a Gii eszközt egy böngészőben ezen a URL-en:&amp;nbsp;&lt;a href="http://localhost/p/yiiki2/index.php?r=gii"&gt;http://localhost/yiiki2/index.php?r=gii&lt;/a&gt;. Ha mindent jól csináltunk akkor a &lt;b&gt;Yii Code Generator&lt;/b&gt;-nak kell megjelennie (ez a Gii) és egy jelszót bekérő form mezőnek. Büszkén írjuk is be a jelszavunkat (tudod, a &lt;i&gt;giiros&lt;/i&gt;). Itt már láthatjuk is a köszöntő oldalt ami röviden annyit közöl, hogy a Kód Generáló segítségével gyorsan felépíthetjük a Yii alkalmazásunkat. És tényleg ... Elsőként tanácsos a Modell-t elkészítenünk, hiszen ez köti össze az adatbázisunkat a programmal. Klikkoljunk is rája:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-ThSsHDpDAAY/ThnXEs380jI/AAAAAAAAJII/j84Dptq2AhM/s1600/model.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-ThSsHDpDAAY/ThnXEs380jI/AAAAAAAAJII/j84Dptq2AhM/s1600/model.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;tablePrefix&lt;/b&gt;-szel most ne foglalkozzunk, mert nem állítottuk be, viszont a &lt;b&gt;tábla nevét&lt;/b&gt; (Table Name) töltsük ki azaz írjuk be, hogy: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;pages -&lt;/span&gt;&amp;nbsp; (hiszen ez volt a táblánk neve). &lt;b&gt;Gii&lt;/b&gt; elvileg okosan megpróbálja kitalálni, hogy mi lesz (legyen) a &lt;b&gt;Modell&lt;/b&gt; osztály elnevezése ... Majdnem jó is, én személy szerinte egyes számba szoktam tenni a &lt;b&gt;Modell&lt;/b&gt;-jeimet (tehát pl:&amp;nbsp;&lt;i&gt;Page&lt;/i&gt; a &lt;i&gt;Pages&lt;/i&gt; helyett). A többi értéket hagyhatjuk úgy ahogy van, és kattinthatunk az &lt;i&gt;Előnézet&lt;/i&gt; (Preview) gombra.&lt;br /&gt;&lt;br /&gt;Remélhetőleg egy új file név jelenik meg alul: &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;models/Page.php&lt;/span&gt;. Ha erre a link-re kattintunk, akkor meggyőződhetünk róla, hogy igen, a mezők mind itt vannak és nyomhatunk egyet a &lt;b&gt;Generate&lt;/b&gt; gombra. Ha jó Atyánk és a jogosultságok is úgy akarják, akkor a &lt;b&gt;Page Modell&lt;/b&gt; osztályunk elészült a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;models/&lt;/span&gt; mappa alatt.&lt;br /&gt;&lt;br /&gt;Hát ennyi fért így a második részbe, elég sok mindent átvettünk, persze tudom, lehetne még ezt azt jobban részletezni, de a cikk célja inkább csak amolyan ismertetés féle. A következő részben használni fogjuk a &lt;b&gt;Gii&lt;/b&gt; eszköz &lt;b&gt;CRUD&lt;/b&gt; generáló finomságát, ami elkészíti majd nekünk a &lt;b&gt;Kontroller&lt;/b&gt; és &lt;b&gt;Nézet&lt;/b&gt; file-okat, az alap &lt;b&gt;Create, Update, Read, Delete&lt;/b&gt; funkciókkal. Ja, és talán majd gépelni is fogunk egy kicsit ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6600994367909177525?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6600994367909177525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/07/gittegylet-meg-yii-avagy-yiiki-20-2.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6600994367909177525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6600994367909177525'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/07/gittegylet-meg-yii-avagy-yiiki-20-2.html' title='Gittegylet meg a Yii - avagy Yiiki 2.0 (2. rész)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-ThSsHDpDAAY/ThnXEs380jI/AAAAAAAAJII/j84Dptq2AhM/s72-c/model.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-901641201594525388</id><published>2011-07-12T01:00:00.000-07:00</published><updated>2011-07-12T01:00:08.858-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='forráskezelés'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='objektumok'/><category scheme='http://www.blogger.com/atom/ns#' term='source control'/><title type='text'>Gittegylet meg a Yii - avagy Yiiki 2.0 (1. rész)</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Ugyan ez egy új cikk, de nem teljesen. Talán a tavaly szeptemberben megjelent &lt;a href="http://yiihun.blogspot.com/2010/09/yiiki-avagy-wiki-ala-yii_11.html"&gt;Yiiki avagy WIKI a'la Yii&lt;/a&gt; cikkben bemutatott rendszer 2.0-ás változatának lehetne tekinteni.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Elég sok idő eltelt azóta és maga az alap keretrendszer is sokat változott, szerencsénkre. Még annyival szeretnénk kicsit megfűszerezni a fejlesztést, hogy bevonjuk a mostanában nagy népszerűségnek örvendő &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; forráskezelőt. Vágjunk is bele.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif; font-size: large;"&gt;Bevezetés&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Magába az alapok installálásába nem fogunk belemenni, itt csak felsoroljuk mi mindent kell ismerni:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;-&amp;nbsp;&lt;strong&gt;Objektum Orientált Programozás (PHP 5)&lt;/strong&gt;: A jelenleg stabil Yii 1.1.8-es verzió a PHP 5.1-en alapszik, tehát annak ismerete mindenképp szükséges. -&amp;nbsp;&lt;a href="http://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s" rel="nofollow" style="color: #213abb; text-decoration: none;"&gt;http://hu.wikipedia.org/wiki/Objektumorientált_programozás&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;-&amp;nbsp;&lt;strong&gt;Adatbázis (SQL)&lt;/strong&gt;: A Yii, alapból sokféle adatbázis motort támogat. Az itteni példában én a SQLite-ot fogjuk használni, mert nem igényel különösebben bonyolult szerver oldali beállítást -&amp;nbsp;&amp;nbsp;&lt;a href="http://hu.wikipedia.org/wiki/SQL" rel="nofollow" style="color: #213abb; text-decoration: none;"&gt;http://hu.wikipedia.org/wiki/SQL&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;-&amp;nbsp;&lt;strong&gt;MVC (Model-View-Controller) avagy Modell-Nézet-Vezérlő&lt;/strong&gt;: A Yii az egy &lt;b&gt;MVC&lt;/b&gt;-t szorgalmazó keretrendszer. Dióhéjban annyit jelent, hogy az alkalmazás jól elkülöníthető 3 részre. Az &lt;b&gt;M&lt;/b&gt; vagy modell, ami az adatbázis jellegű lekérdezéseket végzi, a &lt;b&gt;C&lt;/b&gt; vagy vezérlő ami kapcsolatot teremt és feldolgoz felhasználók által bevitt információt és végül a &lt;b&gt;V&lt;/b&gt; vagy nézet, ami pedig magát a megjelenítést végzi. Ilyen többek között a &lt;b&gt;Ruby On Rails&lt;/b&gt; rendszer is. -&amp;nbsp;&lt;a href="http://hu.wikipedia.org/wiki/MVC" rel="nofollow" style="color: #213abb; text-decoration: none;"&gt;http://hu.wikipedia.org/wiki/MVC&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;-&amp;nbsp;&lt;strong&gt;Active Record&lt;/strong&gt;&amp;nbsp;- ami tulajdonképpen "megszűnteti" a függőséget a különböző adatbázisok között és az adatbázis táblákat objektumokként kezeli. Ez a gyakorlatban azt jelenti, hogy mondjuk fejlesztői környezetben használhatunk SQLite-ot élesben pedig MySQL-t vagy MsSQL-t stb. &amp;nbsp;-&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Active_record_pattern" rel="nofollow" style="color: #213abb; text-decoration: none;"&gt;http://en.wikipedia.org/wiki/Active_record_pattern&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #222222; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;- &lt;b&gt;Git, forráskezelés &lt;/b&gt;- vagy &lt;a href="http://hu.wikipedia.org/wiki/Verzi%C3%B3kezel%C3%A9s"&gt;verziókezelés&lt;/a&gt; alatt több verzióval rendelkező adatok kezelését értjük. Leggyakrabban a mérnöki tudományokban és a szoftverfejlesztésben használnak verziókezelő rendszereket fejlesztés alatt álló dokumentumok, tervek, forráskódok és egyéb olyan adatok verzióinak kezelésére, amelyeken több ember dolgozik egyidejűleg.&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;Apache, Nginx és egyéb web szerverek beállításába nem szeretnénk itt belemenni. A programot a következő konfigurációval készítettük:&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;i&gt;- Ubuntu Linux (&lt;/i&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;i&gt;10&lt;/i&gt;&lt;/span&gt;&lt;/i&gt;&lt;i&gt;.10)&lt;/i&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;- Apache 2.x&lt;br /&gt;- SQLite 3&lt;br /&gt;- PHP 5.3.x&lt;br /&gt;- Yii 1.1.8&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;- Csomagoljuk ki a letöltött Yii-t a web szerverünk fő könyvtárába (pl. /var/www/yii ), a forráskód majd szintén a /var/www alá kerül (pl: /var/www/yiiki2).&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;Az is fontos, hogy a Yii rendszer a parancssorból is futtatható legyen! (&lt;i&gt;&lt;b&gt;PHP CLI&lt;/b&gt;&lt;/i&gt;)&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;A WEB alkalmazás létrehozása&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="color: #222222;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;Az alap alkalmazás létrehozása rendkívül egyszerű, csak adjuk ki a kovetkező utasítást (a web szerver &lt;i&gt;root&lt;/i&gt; könyvtárából, ahol reméljük a maga a Yii rendszer is elhelyezkedit (pl &lt;i&gt;/var/www&lt;/i&gt;).&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="color: #222222;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #222222; font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;./yii/framework/yiic webapp yiiki2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="color: #222222;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="color: #222222;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #222222; font-family: Georgia, 'Times New Roman', serif; line-height: 18px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=zrPtFyh2"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ha minden jól sikerült, akkor a "&lt;i&gt;Your application has been created successfully under /var/www/yiiki2&lt;/i&gt;" - szerű üzenet jelenik meg, ami röviden annyit jelent, hogy az alap program sikeresen létrehozva a megadott mappa alatt.&lt;br /&gt;&lt;br /&gt;Azt már itt érdemes megjegyezni, hogy a programunk már ebben a fázisban működőképes. Ha megtekintjük a URL-t egy böngészőben (pl &lt;a href="http://localhos/"&gt;http://localhost&lt;/a&gt;&amp;nbsp;vagy &lt;a href="http://yiiki.peldaprogram.local/"&gt;http://yiiki.peldaprogram.local&lt;/a&gt;) akkor egy (remélhetőleg) üdvözlő képernyő fogad bennünket.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Na itt a Git&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Már rögtön az elején érdemes a munkánkat a forráskezelő alá tenni. Lépjünk be a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiiki2/&lt;/span&gt; mappa alá és adjuk ki a következő parancsot.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$git init&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Initialized empty Git repository in /var/www/yiiki2/.git/&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ez csak annyit jelent, hogy a Git sikeresen létrehozott egy üres (empty) forrástárat a megadott mappa alatt. Ha most megnézzük a könyvtárszerkezetet, akkor valami ilyesmit kell, hogy kapjunk. (rejtett file-okat is mutatva!)&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$ll&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxr-xr-x &amp;nbsp;8 imehesz imehesz 4096 2011-07-08 22:34 ./&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxr-xr-x 42 imehesz imehesz 4096 2011-07-08 22:19 ../&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxrwxrwx &amp;nbsp;2 imehesz imehesz 4096 2011-07-08 22:19 assets/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxr-xr-x &amp;nbsp;2 imehesz imehesz 4096 2011-07-08 22:19 css/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxr-xr-x &amp;nbsp;7 imehesz imehesz 4096 2011-07-08 22:34 .git/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxr-xr-x &amp;nbsp;2 imehesz imehesz 4096 2011-07-08 22:19 images/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;-rw-r--r-- &amp;nbsp;1 imehesz imehesz &amp;nbsp;478 2011-07-08 22:19 index.php&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;-rw-r--r-- &amp;nbsp;1 imehesz imehesz &amp;nbsp;481 2011-07-08 22:19 index-test.php&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxr-xr-x 14 imehesz imehesz 4096 2011-07-08 22:19 protected/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;drwxr-xr-x &amp;nbsp;3 imehesz imehesz 4096 2011-07-08 22:19 themes/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Láthatjuk is, hogy a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.git&lt;/span&gt; mappa ott figyel, amibe a &lt;b&gt;Git&lt;/b&gt; program fogja tárolni a változtatásainkat.&lt;br /&gt;&lt;br /&gt;Rutinos Yii-s mókusként tudjuk azt, hogy az &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;assets/&lt;/span&gt; a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/runtime/&lt;/span&gt; és a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/data/&lt;/span&gt; mappa alatt a Yii olyan dolgokat fog tárolni ami 99%-ban minden rendszeren más és más (pl. fejlesztői és éles környezet!), tehát érdemes lenne ezeket nem forráskezelő alá tenni, mert egyszerűen semmi értelme.&lt;br /&gt;&lt;br /&gt;A Git erre egy nagyon elegáns megoldást kínál (illetve többet is), egyszerűen hozzunk létre egy file-t &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.gitignore&lt;/span&gt; néven (a yiiki2/ mappa alatt), és adjuk meg neki ezeket az útvonalakat. Így amikor a git ezekhez a mappákhoz ér, egyszerűen figyelmen kívűl hagyja őket. A gyakorlat azt diktálja, hogy még pár dolgot ne vegyünk forráskezelés alá, ilyenek például az adatbázis file-ok, vagy tömörített file-ok stb. Tehát a .gitignore file-unk valahogy így nézzen ki.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$less .gitignore&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;assets/*&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;protected/data/*&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;protected/runtime/*&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;*.zip&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;*.sqlite&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Nos, eddig megvolnánk, de ha jól emlékszünk akkor a Git az elöbb azt mondta, hogy egy &lt;i&gt;üres&lt;/i&gt; rendszert hozott létre. Ez igy is van. Az egyik legfontosabb Git parancs amit gyakran használni fogunk az a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;git status&lt;/span&gt;. Adjuk is ki:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$git status&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# On branch master&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# Initial commit&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# Untracked files:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# &amp;nbsp; (use "git add &amp;lt;file&amp;gt;..." to include in what will be committed)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;.gitignore&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;css/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;index-test.php&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;index.php&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;protected/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;themes/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;nothing added to commit but untracked files present (use "git add" to track)&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: 'Courier New', Courier, monospace; font-size: small;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Amint láthatjuk, annyi történt, hogy a Git kilistázta, hogy mely file-ok változtak. Jelen esetben azonban még semmi nem változott, hiszen még semmit nem rendeltünk a forráskezelő alá. Ezt egyébként alul a Git szépen jelzi is, hiszen azt mondja, hogy &lt;i&gt;nincs semmit a commit-hez hozzáadnunk, azonban vannak olyan file-ok amiket nem követ&lt;/i&gt;. Ja, és azt tanácsolja, hogy ezeket a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;git add&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; utasítással adhatjuk a forráskezelő alá. Remek, pont ez kell nekünk. Adjuk is ki:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$git add .&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif; font-size: small;"&gt;A pont "." az azt jelenti, hogy MINDEN használható file-t vagy változást adjon hozzá a forráshoz. Miután kiadtuk a parancsot, szemmel láthatóan semmi nem történt, azonban a Git a háttérben szorgosan dolgozik. Ha most kiadjuk a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;git status&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif; font-size: small;"&gt; -t, egyből észrevesszük, hogy igenis valami történt:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif; font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# On branch master&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# Initial commit&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# Changes to be committed:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;# &amp;nbsp; (use "git rm --cached &amp;lt;file&amp;gt;..." to unstage)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; .gitignore&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; css/bg.gif&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; css/form.css&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; css/ie.css&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; css/main.css&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; css/print.css&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; css/screen.css&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; index-test.php&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;#&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;new file: &amp;nbsp; index.php&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;...&lt;/span&gt;&lt;br /&gt;&lt;div style="font-family: Georgia, 'Times New Roman', serif; font-size: medium;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;A lista elég hosszú, ide csak egy kis részletet illesztettünk be! A lényeg az, hogy ezek a file-ok készen állnak az un. &lt;i&gt;commit&lt;/i&gt;-álásra, ami annyit tesz, hogy a módosításaink (jelen esetben új file-jaink) véglegesen a forrás részei lesznek. Magát a &lt;i&gt;commit&lt;/i&gt;-álást pedig a -drrrrr ... dobpergés- &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;git commit&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; paranccsal hatjuk végre:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$git commit -m "itt a Yiiki2.0, elso commit-unk"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;A &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;-m&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; (message) azaz üzenet, azt jelenti, hogy üzenetet fűzhetünk a &lt;i&gt;commit&lt;/i&gt;-hez, aminek hiányát néhány programozó törzsek gyakran kéz- és/vagy fejvesztéssel büntetnek. Persze a képernyőn minden gyorsan leszalad, azért nézzük meg mi is történt:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;[master (root-commit) 9e22a96] itt a Yiiki2.0, elso commit-unk&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;Committer: Imre Mehesz &amp;lt;imehesz@imehesz-laptop.(none)&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Your name and email address were configured automatically based&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;on your username and hostname. Please check that they are accurate.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;You can suppress this message by setting them explicitly:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; git config --global user.name "Your Name"&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; git config --global user.email you@example.com&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;If the identity used for this commit is wrong, you can fix it with:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; git commit --amend --author='Your Name &amp;lt;you@example.com&amp;gt;'&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;34 files changed, 1512 insertions(+), 0 deletions(-)&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;create mode 100644 .gitignore&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;create mode 100644 css/bg.gif&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;create mode 100644 css/form.css&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;create mode 100644 css/ie.css&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp;create mode 100644 css/main.css&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Itt azt irta ki, hogy létrejött a &lt;i&gt;commit&lt;/i&gt;, és a rendszer beállította a nevünket és az email címünket, de azért ellenőrizzük, hogy jó e. Még talán egy git parancsot érdemes itt megemlítenünk, a &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;log&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt; -ot, ami az utolsó &lt;i&gt;commit&lt;/i&gt;-okat listázza ki:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;$git log&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;commit 9e22a96c0d94b58cb780eaa0d53fedd24df99242&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Author: Imre Mehesz &amp;lt;imehesz@imehesz-laptop.(none)&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;Date: &amp;nbsp; Fri Jul 8 23:24:51 2011 -0400&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;nbsp; &amp;nbsp; itt a Yiiki2.0, elso commit-unk&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;Ebből a commit azonosítón kívül az is látszik, hogy pénteken este fél 12-kor nincs más dolgom, minthogy ilyeneket irogassak :)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;A következő részben reméljük már talán valami kódot is sikerül majd írnunk!&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, 'Times New Roman', serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-901641201594525388?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/901641201594525388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/07/gittegylet-meg-yii-avagy-yiiki-20-1.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/901641201594525388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/901641201594525388'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/07/gittegylet-meg-yii-avagy-yiiki-20-1.html' title='Gittegylet meg a Yii - avagy Yiiki 2.0 (1. rész)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-1171131415218857558</id><published>2011-06-09T14:53:00.000-07:00</published><updated>2011-06-09T14:53:44.652-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nézet'/><category scheme='http://www.blogger.com/atom/ns#' term='theming'/><category scheme='http://www.blogger.com/atom/ns#' term='kinézet'/><category scheme='http://www.blogger.com/atom/ns#' term='modul'/><category scheme='http://www.blogger.com/atom/ns#' term='yii themes'/><category scheme='http://www.blogger.com/atom/ns#' term='Sminkelés'/><title type='text'>Csinibaba Szeress Belém avagy Sminkelés/Themeing a Yii rendszerrel</title><content type='html'>&lt;span style="font-size: large;"&gt;Alapozás&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A "&lt;b&gt;Theming vagy Sminkelés&lt;/b&gt;" nem más, mint egy (webes) alkalmazás kimenetét a felhasználó elé táró &lt;i&gt;kinézet&lt;/i&gt;-lapok rendszere. Egy új &lt;b&gt;Smink&lt;/b&gt;et használva az egész program általános kinézete azonnal megváltoztatható.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Yii&lt;/b&gt;-ben minden &lt;b&gt;Smink&lt;/b&gt;et egy mappa képvisel, ami különböző &lt;b&gt;Nézet&lt;/b&gt; és &lt;b&gt;Layout&lt;/b&gt; (pl: &lt;i&gt;header&lt;/i&gt; vagy &lt;i&gt;footer&lt;/i&gt; stb...) fájlokat tartalmaz(hat), ugyancsak itt találhatók meg a Sminkhez tartozó &lt;i&gt;képek&lt;/i&gt;, &lt;i&gt;CSS&lt;/i&gt;- és &lt;i&gt;JS&lt;/i&gt; file-ok is. A &lt;b&gt;Smink&lt;/b&gt; neve minden esetben megegyezik a mappa nevével &lt;span style="font-size: x-small;"&gt;(&lt;span style="color: red;"&gt;fontos!&lt;/span&gt;)&lt;/span&gt;. Az összes &lt;b&gt;Smink&lt;/b&gt; a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;WebRoot/themes&lt;/span&gt; mappa alatt található, és egyszerre csak egy &lt;b&gt;Smink&lt;/b&gt; lehet aktív.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Smink felkenése:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Egy &lt;b&gt;Smink&lt;/b&gt;et úgy aktiválhatunk, hogy beállítjuk a &lt;b&gt;Web program&lt;/b&gt;unk '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;theme&lt;/span&gt;' paraméterét. Ezt vagy magában a fő konfigurációs file-ben tehetjuk meg (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;protected/config/main.php&lt;/span&gt;), vagy futás közben a &lt;b&gt;Kontroller&lt;/b&gt;ben. (persze futás közben sminket feltenni veszélyes is lehet - minden körülmények között!)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Megjegyzés&lt;/b&gt;: maga a Smink neve kis- és nagybetű érzékeny. Ha egy olyan Smink-et probálunk aktiválni, ami nem létezik a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Yii::app()-&amp;gt;theme&lt;/span&gt;' &lt;b&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;null&lt;/span&gt;&lt;/b&gt;-t fog vissza adni.&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Paletta készítése:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Smink&lt;/b&gt;-nek mindenképpen követnie kell a &lt;b&gt;Yii&lt;/b&gt; által használt és szorgalmazott könyvtárfelépítést. Például minden &lt;b&gt;Nézet&lt;/b&gt; file-nak a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/views&lt;/span&gt;' mappában kell elhelyezkednie, a layout file-oknak pedig a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/views/layouts&lt;/span&gt;'- és a rendszer nézet file-oknak pedig a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/views/system&lt;/span&gt;' alatt. Tehát ha pl. le szeretnénk cserélni a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PostController&lt;/span&gt;' &lt;b&gt;kontroller&lt;/b&gt; '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;create&lt;/span&gt;' &lt;b&gt;nézet&lt;/b&gt; file-ját a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;classic&lt;/span&gt;' &lt;b&gt;smink&lt;/b&gt;-ben, csak mentsük el az új nézet file-unkat valahogy így '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Webroot/themes/classic/views/post/create.php&lt;/span&gt;'.&lt;br /&gt;&lt;br /&gt;Azokat a &lt;b&gt;Nézet&lt;/b&gt; file-okat, amelyek olyan &lt;b&gt;Kontroller&lt;/b&gt;ekhez tartoznak amik egy meghatározott &lt;b&gt;Modul&lt;/b&gt; részei, ugyanúgy a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;views&lt;/span&gt;' mappa alá kell elhelyezni. Például, ha az előbb említett &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;PostController&lt;/span&gt; egy '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;forum&lt;/span&gt;' nevű modul alatt található, akkor az új "&lt;i&gt;sminkelt&lt;/i&gt;" &lt;b&gt;nézet&lt;/b&gt; file-t a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;WebRoot/themes/classic/views/forum/post/create.php&lt;/span&gt;-ként mentjük el. Ha pedig maga a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;forum&lt;/span&gt; modul egy másik modul, pl: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;'support'&lt;/span&gt; része (mert iiyet lehet a &lt;b&gt;Yii&lt;/b&gt;-vel ;) ) akkor egyszerűen ide mentjük: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;WebRoot/themes/classic/views/support/forum/post/create.php&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Megjegyzés&lt;/b&gt;: Mivel a '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;views&lt;/span&gt;' mappa tartalmazhat kényes file-okat, érdemes úgy konfigurálni, hogy halandó internetfelhasználó ne férhessen hozzá.&lt;/blockquote&gt;&lt;br /&gt;Amikor a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;render()&lt;/span&gt;-t vagy &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;renderPartial()&lt;/span&gt;-t meghívjuk, hogy&amp;nbsp; a &lt;b&gt;Nézet&lt;/b&gt;-ünket megjelenítse, &lt;b&gt;Yii&lt;/b&gt; először megpróbálja megtalálni magát a &lt;i&gt;nézet file&lt;/i&gt;-t és a hozzá tartózó &lt;i&gt;layout&lt;/i&gt; &lt;i&gt;file&lt;/i&gt;-t az &lt;b&gt;aktív smink&lt;/b&gt; könyvtár alatt. Ha sikerül, ezek a file-ok kerülnek megjelenítésre. Ha nem, akkor pedig az alap &lt;i&gt;nézet&lt;/i&gt; és &lt;i&gt;layout file&lt;/i&gt;-ok, amiket a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;viewPath&lt;/span&gt;/&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;layoutPath&lt;/span&gt;-ek állítanak be.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Tipp&lt;/b&gt;: Gyakran előfordul olyan, hogy a &lt;b&gt;nézet&lt;/b&gt; file-unkból szeretnénk elérni egyéb, csak az &lt;i&gt;aktív smink&lt;/i&gt;re jellemző, file-okat. Ilyenek lehetnek például a képek a &lt;b&gt;smink&lt;/b&gt; '&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;images&lt;/span&gt;' mappában. A &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;baseUrl&lt;/span&gt; változó segítségével ezt könnyedén megtehetjük, valahogy így: &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;Yii::app()-&amp;gt;theme-&amp;gt;baseUrl.'/images/FileName.gif'&lt;/span&gt;.&lt;/blockquote&gt;Alább látható egy &lt;b&gt;Yii&lt;/b&gt; alkalmazás teljes mappa rendszere, két sminkkel &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;basic&lt;/span&gt; és &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;fancy&lt;/span&gt; néven.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;WebRoot/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; assets&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; protected/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; .htaccess&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; components/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; controllers/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; models/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; views/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layouts/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main.php&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index.php&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;themes/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; basic/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; views/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .htaccess&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layouts/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main.php&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index.php&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp; fancy/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; views/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; .htaccess&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; layouts/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; main.php&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; site/&lt;/div&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index.php&lt;/div&gt;&lt;/blockquote&gt;És ha az alkalmazásunk konfigurációs file-jába ezt beállítjuk (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/protected/config/main.php&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;div style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;b&gt;return array&lt;/b&gt;(&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;&amp;nbsp; '&lt;span style="color: red;"&gt;theme&lt;/span&gt;'=&amp;gt;'&lt;span style="color: red;"&gt;basic&lt;/span&gt;',&lt;br /&gt;&amp;nbsp; ...&lt;br /&gt;);&lt;/div&gt;&lt;/blockquote&gt;akkor a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;basic&lt;/span&gt; smink lesz aktív, ami azt jelenti, hogy a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;themes/basic/views &lt;span style="font-family: inherit;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;alatti&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;&lt;span style="font-family: inherit;"&gt;&lt;/span&gt; /layouts&lt;/span&gt;/&lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;main.php&lt;/span&gt; és a &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;site/index.php&lt;/span&gt; kerül megjelenítésre. Ha pedig ezek nem lennének meg, akkor &lt;b&gt;Yii&lt;/b&gt; automatikusan a "&lt;i&gt;gyári&lt;/i&gt;" &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;/protected/views&lt;/span&gt;-t fogja használni.&lt;br /&gt;&lt;br /&gt;then the basic theme will be in effect, which means the application's layout will use the one under the directory themes/basic/views/layouts, and the site's index view will use the one under themes/basic/views/site. In case a view file is not found in the theme, it will fall back to the one under the protected/views directory.&lt;br /&gt;&lt;br /&gt;Hát ennyi :)&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://yiithemes.mehesz.net/"&gt;Yii Themes&lt;/a&gt; oldalon lehet ingyé előre elkészített &lt;b&gt;Smink&lt;/b&gt;eket letölteni a &lt;b&gt;Yii&lt;/b&gt;-hez.&lt;br /&gt;&lt;br /&gt;Eredeti cikk (még több infóval): &lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/topics.theming"&gt;http://www.yiiframework.com/doc/guide/1.1/en/topics.theming&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.filmkultura.hu/regi/articles/films/images/csinibaba/2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.filmkultura.hu/regi/articles/films/images/csinibaba/2.jpg" width="221" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-1171131415218857558?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/1171131415218857558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/06/csinibaba-szeress-belem-avagy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1171131415218857558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1171131415218857558'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/06/csinibaba-szeress-belem-avagy.html' title='Csinibaba Szeress Belém avagy Sminkelés/Themeing a Yii rendszerrel'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-8514132106169860975</id><published>2011-05-28T06:19:00.000-07:00</published><updated>2011-05-28T06:19:48.214-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nézet'/><category scheme='http://www.blogger.com/atom/ns#' term='kontroller'/><category scheme='http://www.blogger.com/atom/ns#' term='renderPartial'/><category scheme='http://www.blogger.com/atom/ns#' term='render'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><title type='text'>Függyvény hívása Nézetből</title><content type='html'>Néha előfordul, hogy valamilyen bonyolultabb kimenetet kell produkálnunk &lt;b&gt;Nézet&lt;/b&gt;ünkben - például egy táblát. A legtöbben azt tanácsolják, hogy az &lt;b&gt;MVC&lt;/b&gt; szabályainak megfelelően a &lt;b&gt;Nézet&lt;/b&gt; az legyen egyszerű, ne legyen benne túl sok ciklus stb. Tehát valahogy a kódunkat máshová kell helyeznünk. Erre fogunk néhány példát bemutatni.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Függvényünket betehetjük a &lt;b&gt;Modell&lt;/b&gt;ünkbe, így a Nézetben elérhetővé válik a modellen keresztül &amp;nbsp;mint osztály metódus. A hátulütője ennek az, hogy a modellbe nem igazán szép nézettel/kimenettel kapcsolatos függvényeket tenni. Tehát ez a módszer egyáltalán &lt;b&gt;nem tanácsolt&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=jfV4xAXA"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Használjunk &lt;b&gt;Widget&lt;/b&gt;-et. Készíthetünk egy osztályt, ami a CWidget-et bővíti ki, ebben az esetben a Nézetből csak meghívjuk a Widget-ünket és kész is. Ez akkor is nagyon hasznos, ha például több nézetben szeretnénk megjeleníteni ugyanazt a tartalmat.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=zeCZkPKN"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tegyük a függvényünket a &lt;b&gt;Kontroller&lt;/b&gt;be. Ha csak egyetlen Nézet használja a függvényünket (és nem tartalmaz nagyon összetett logikát) elég lehet, hogy a Kontrollerbe helyezzük el.&lt;/li&gt;&lt;li&gt;Használjunk&amp;nbsp;&lt;b&gt;Nézet&lt;/b&gt; file-t. Mert a CController &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;render()&lt;/span&gt; és &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;renderPartial()&lt;/span&gt; metódusai visszaadhatnak értéket is megjelenítés helyett. Ez azt jelenti, hogy a függvényünket betehetjuük egy speciális Nézet file-ba, lehetőleg ugyanabba a mappába ahol maga a hívó file helyezkedik el. Ezt úgy érhetjük el, hogy a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;render()&lt;/span&gt;&amp;nbsp;- vagy &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;renderPartial()&lt;/span&gt;) - harmadik paraméterét &lt;i&gt;true&lt;/i&gt;-ra állítjuk be.&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=jpz0drsh"&gt;&lt;/script&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Eredeti cikk: &lt;a href="http://www.yiiframework.com/wiki/125/putting-function-to-be-called-in-view/"&gt;http://www.yiiframework.com/wiki/125/putting-function-to-be-called-in-view/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UI&lt;/b&gt;: Yii-s widget-ekrol meg itt olvashattok bovebben (magyarul!):&amp;nbsp;&lt;a href="http://yiihun.blogspot.com/2011/03/nosza-irjunk-widget-et-tyuklepesrol.html"&gt;Nosza irjunk widget-et tyuklepesrol tyuklepesre&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-8514132106169860975?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/8514132106169860975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/05/fuggyveny-hivasa-nezetbol.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/8514132106169860975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/8514132106169860975'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/05/fuggyveny-hivasa-nezetbol.html' title='Függyvény hívása Nézetből'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-5235363721061584759</id><published>2011-05-15T10:03:00.000-07:00</published><updated>2011-05-15T14:54:29.013-07:00</updated><title type='text'>2011-es PHP keretrendszer statisztika</title><content type='html'>Ennek annyira megörültem, hogy gyorsan fel is teszem ide:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-ktjUYXC11vI/TdBLXvmoLmI/AAAAAAAAI0A/Z4vQdLMeLpg/s1600/mostpopularframework2011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-ktjUYXC11vI/TdBLXvmoLmI/AAAAAAAAI0A/Z4vQdLMeLpg/s1600/mostpopularframework2011.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;De ez még szebb:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/--zkflbqeEQs/TdBLhmcR5xI/AAAAAAAAI0E/8tWBr7A6gwM/s1600/phpframeworktrend.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/--zkflbqeEQs/TdBLhmcR5xI/AAAAAAAAI0E/8tWBr7A6gwM/s1600/phpframeworktrend.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;Itt az eredeti link:&amp;nbsp;&lt;a href="http://www.php-developer.org/most-used-php-framework-the-popular-top-7-list-in-year-2011/"&gt;http://www.php-developer.org/most-used-php-framework-the-popular-top-7-list-in-year-2011/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-5235363721061584759?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/5235363721061584759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/05/2011-es-php-keretrendszer-statisztika.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5235363721061584759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5235363721061584759'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/05/2011-es-php-keretrendszer-statisztika.html' title='2011-es PHP keretrendszer statisztika'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-ktjUYXC11vI/TdBLXvmoLmI/AAAAAAAAI0A/Z4vQdLMeLpg/s72-c/mostpopularframework2011.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-5155978323730300455</id><published>2011-04-19T01:00:00.000-07:00</published><updated>2011-04-19T01:00:08.419-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery tools'/><category scheme='http://www.blogger.com/atom/ns#' term='CHtml'/><category scheme='http://www.blogger.com/atom/ns#' term='kütyü'/><category scheme='http://www.blogger.com/atom/ns#' term='dry'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><title type='text'>Nosza, írjunk widget-et! 2. rész (tyúklépésről tyúklépésre)</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;2. rész&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #222222; font-size: 13px; line-height: 18px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;h4 style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; position: relative; text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;Írta:&lt;/i&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: arial, sans-serif;"&gt;János Zahratka&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: arial, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse;"&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Nos, ahogy ígértem, íme a második rész. Ebben a szakaszban származtatni fogjuk a már elkészített&amp;nbsp;&lt;strong&gt;jQTBaseOverlay widget&lt;/strong&gt;-ünket, aminek ezúttal már a HTML oldalon megjelenő eredménye is lesz.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Emlékeztetőül:&amp;nbsp;&lt;a href="http://yiihun.blogspot.com/2011/03/nosza-irjunk-widget-et-tyuklepesrol.html" target="_blank"&gt;az előző részben&lt;/a&gt;&amp;nbsp;elkészítettünk egy alap&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;-et, a&amp;nbsp;&lt;a href="http://flowplayer.org/tools/index.html" target="_blank"&gt;jQuery Tools&lt;/a&gt;&amp;nbsp;&lt;strong&gt;overlay plugin&lt;/strong&gt;-jéhez. Erre azért volt szükség, mert a plugin-ból több, különböző eszközt lehet csinálni. Ebben a részben két felhasználási lehetőséget fogok megmutatni. Az egyik egy olyan overlay doboz, amibe bármilyen tartalmat el lehet helyezni. A másik pedig egy üzenő/kérdező dialógus, amivel üzeneteket, illetve kérdéseket lehet megjeleníteni a felhasználóknak, és utóbbi esetében a választól függően lehet "reagálni" a felhasználó választására.&lt;/div&gt;&lt;h4 style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;jQTOverlay&lt;/h4&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Első lépésben létrehozunk egy új php állományt a&amp;nbsp;&lt;strong&gt;protected/components/widgets&lt;/strong&gt;&amp;nbsp;mappában&amp;nbsp;&lt;strong&gt;jQTOverlay.php&lt;/strong&gt;&amp;nbsp;névvel. Még mielőtt nekikezdenénk a&lt;strong&gt;widget&lt;/strong&gt;&amp;nbsp;osztályának kiterjesztéséhez, gondoskodnunk kell róla, hogy a&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;&amp;nbsp;megtalálja a szülő osztályát, ezt pedig a&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/api/1.1/YiiBase#import-detail" target="_blank"&gt;YiiBase osztály import&lt;/a&gt;&amp;nbsp;metódusának segítségével fogjuk megoldani. Az üres osztályunk valahogy így fog kinézni:&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;Yii::import('application.&lt;wbr&gt;&lt;/wbr&gt;components.widgets.&lt;wbr&gt;&lt;/wbr&gt;jQTBaseOverlay');&lt;br /&gt;class jQTOverlay extends jQTBaseOverlay&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Ezután kicsit átírjuk a publikus&amp;nbsp;&lt;strong&gt;init&lt;/strong&gt;&amp;nbsp;metódust, ami a&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;&amp;nbsp;alapértékeinek beállítását végzi el. Ebben az esetben mindőssze annyit fog csinálni ez a metódus, hogy lefuttatja a szülő osztály azonos nevű metódusát, majd meghívja a&amp;nbsp;&lt;strong&gt;registerClientScript&lt;/strong&gt;, és a&amp;nbsp;&lt;strong&gt;renderBegin&lt;/strong&gt;&amp;nbsp;metódusokat. Egyik sem csinál mást, "csak" végrehajtja a szülő osztályban lévő azonos nevű eljárásokat. Ez azért lett így összerakva, mert az alap osztályban már minden szükséges metódus, és paraméter definiálva van, itt pedig csak a megfelelő sorrendben hívogatni kell őket.&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    public function init() {&lt;br /&gt;        parent::init();&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;registerClientScript();&lt;br /&gt;        $this-&amp;gt;renderBegin();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Ha ezzel megvagyunk, előkapjuk a&amp;nbsp;&lt;strong&gt;run&lt;/strong&gt;&amp;nbsp;metódust, és meghívjuk benne a&amp;nbsp;&lt;strong&gt;renderContent&lt;/strong&gt;&amp;nbsp;és a&amp;nbsp;&lt;strong&gt;renderEnd&lt;/strong&gt;&amp;nbsp;metódusokat. Ezek szintén definiálva vannak a szülő osztályban.&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    public function run() {&lt;br /&gt;        $this-&amp;gt;renderContent();&lt;br /&gt;        $this-&amp;gt;renderEnd();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Már csak négy metódus van hátra, melyek egy kivételével szintén csak annyit csinálnak, hogy meghívják a szülő osztály azonos nevű metódusait. Ezek a&lt;strong&gt;registerClientScript&lt;/strong&gt;, a&amp;nbsp;&lt;strong&gt;renderBegin&lt;/strong&gt;, a&amp;nbsp;&lt;strong&gt;renderContent&lt;/strong&gt;, és a&amp;nbsp;&lt;strong&gt;renderEnd&lt;/strong&gt;&amp;nbsp;metódusok. Az üres metódus arra való, hogy ha valaki tovább szeretné származtatni ezt a&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;et, akkorű jobb, ha megvan ez a metódus is.&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    protected function  registerClientScript() {&lt;br /&gt;        parent::registerClientScript()&lt;wbr&gt;&lt;/wbr&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  renderBegin() {&lt;br /&gt;        parent::renderBegin();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  renderContent() {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  renderEnd() {&lt;br /&gt;        parent::renderEnd();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;A&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;-et tovább lehetne rövidíteni azzal, hogy azokat a metódusokat, amelyek csak a szülő osztályban lévő önmagukat hívják meg nem kell deklarálni, csak meghívni a&amp;nbsp;&lt;a href="http://php.net/manual/en/keyword.parent.php" target="_blank"&gt;parent&lt;/a&gt;&amp;nbsp;segítségével, azonban gondolni kell arra is, hogy esetleg olyan osztályt fogunk csinálni, ami ezt a már kibővített osztályt fogja tovább származtatni.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Ahogy ígértem, valóban sokkal rövidebb lesz a második rész, ugyanis az a helyzet, hogy a&amp;nbsp;&lt;strong&gt;jQTOverlay widget&lt;/strong&gt;&amp;nbsp;ezzel készen is van. Lássuk a kódot!&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;Yii::import('application.&lt;wbr&gt;&lt;/wbr&gt;components.widgets.&lt;wbr&gt;&lt;/wbr&gt;jQTBaseOverlay');&lt;br /&gt;class jQTOverlay extends jQTBaseOverlay&lt;br /&gt;{&lt;br /&gt;    public function init() {&lt;br /&gt;        parent::init();&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;registerClientScript();&lt;br /&gt;        $this-&amp;gt;renderBegin();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function run() {&lt;br /&gt;        $this-&amp;gt;renderEnd();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  registerClientScript() {&lt;br /&gt;        parent::registerClientScript()&lt;wbr&gt;&lt;/wbr&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  renderBegin() {&lt;br /&gt;        parent::renderBegin();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function renderContent() {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  renderEnd() {&lt;br /&gt;        parent::renderEnd();&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Már csak annyi van hátra, hogy bármely&amp;nbsp;&lt;strong&gt;view (nézet)&lt;/strong&gt;&amp;nbsp;állományban meghívjuk, ami valahogy így néz ki:&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;&amp;lt;!-- Ha erre klikkel, akkor jöhet az overlay. --&amp;gt;&lt;br /&gt;&amp;lt;?php echo CHtml::link(CHtml::encode('&lt;wbr&gt;&lt;/wbr&gt;Overlay'),&lt;br /&gt;    array('#'),&lt;br /&gt;    array(&lt;br /&gt;        'id' =&amp;gt; 'showOverlay',&lt;br /&gt;        'name' =&amp;gt; 'showOverlay',&lt;br /&gt;        'rel' =&amp;gt; '#Overlay'&lt;br /&gt;    )&lt;br /&gt;); ?&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;!-- És ez a widget hívása. --&amp;gt;&lt;br /&gt;&amp;lt;?php $this-&amp;gt;beginWidget('&lt;wbr&gt;&lt;/wbr&gt;application.components.&lt;wbr&gt;&lt;/wbr&gt;widgets.jQTOverlay', array(&lt;br /&gt;    'htmlOptions' =&amp;gt; array(&lt;br /&gt;        'id' =&amp;gt; 'overlay',&lt;br /&gt;        'name' =&amp;gt; 'overlay'&lt;br /&gt;    ),&lt;br /&gt;    'trigger' =&amp;gt; 'showOverlay',&lt;br /&gt;    'useMask' =&amp;gt; true,&lt;br /&gt;    'title' =&amp;gt; 'Overlay',&lt;br /&gt;)); ?&amp;gt;&lt;br /&gt;    Bármilyen HTML, vagy php tartalom, amit meg akarunk jeleníteni.&lt;br /&gt;&amp;lt;?php //$this-&amp;gt;endWidget(); ?&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;h4 style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;jQTDialog&lt;/h4&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;A második származtatott&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;-ünk egy kicsit - de tényleg csak egy kicsit - bonyolultabb, de csak azért, mert arra vetemedtem, hogy egy&amp;nbsp;&lt;strong&gt;type&lt;/strong&gt;&amp;nbsp;nevű paraméter segítségével három dialógus típust kezeljek egy&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;&amp;nbsp;megírásával. Mindhárom változat működése azonos. A különbség abban van, hogy milyen válaszlehetőségeket adok a felhasználónak.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Két paramétert vezettem be, amelyek a szülő osztályban nem léteznek. Az egyik a már előbb említett&amp;nbsp;&lt;strong&gt;type&lt;/strong&gt;, ami a dialógus típusát határozza meg. Értéke "alert" (figyelmeztetés), "question" (kérdés) vagy "decision" (döntés) lehet. A másik a&amp;nbsp;&lt;strong&gt;message&lt;/strong&gt;&amp;nbsp;paraméter, amely a megjelenítendő üzenetet, vagy kérdést tárolja.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;A szülő osztályból átvettem még az&amp;nbsp;&lt;strong&gt;_openTag&lt;/strong&gt;&amp;nbsp;paramétert, ami pontosan ugyanazt tárolja, mint a szülő.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Az&amp;nbsp;&lt;strong&gt;init&lt;/strong&gt;&amp;nbsp;metódus ezúttal összetettebb lesz, mint az előző esetben.&lt;/div&gt;&lt;ul style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;&lt;li&gt;Megvizsgálja, hogy a&amp;nbsp;&lt;strong&gt;type&lt;/strong&gt;&amp;nbsp;paraméter a megfelelő értéket tartalmaz-e, azután azt is meg kell vizsgálni, hogy van-e üzenet, amit meg kell jeleníteni (&lt;strong&gt;message&lt;/strong&gt;). Ha ez a két paraméter nem megfelelő, akkor a&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;&amp;nbsp;egyszerűen leáll és nem jelenít meg semmit.&lt;/li&gt;&lt;li&gt;Megváltoztatja az overlay CSS osztályának nevét a dialógus típusának megfelelően. Ez nem kötelező, viszont szerintem jó megoldás arra, hogy az egyes dialógus típusok más-más megjelenési formát vehessenek fel.&lt;/li&gt;&lt;li&gt;Meghívja a szülő osztály azonos nevű metódusát, aztán az előbbi&amp;nbsp;&lt;strong&gt;overlay widget&lt;/strong&gt;-ben leírt módon a&amp;nbsp;&lt;strong&gt;registerClientScript&lt;/strong&gt;&amp;nbsp;és&amp;nbsp;&lt;strong&gt;renderBegin&lt;/strong&gt;&amp;nbsp;metódusok hívásai következnek.&lt;/li&gt;&lt;/ul&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    public function init() {&lt;br /&gt;        if('alert' !== $this-&amp;gt;type &amp;amp;&amp;amp; 'question' !== $this-&amp;gt;type &amp;amp;&amp;amp; 'decision' !== $this-&amp;gt;type) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        if(null === $this-&amp;gt;message) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;htmlOptions['class'] = $this-&amp;gt;type;&lt;br /&gt;        $this-&amp;gt;params['closeOnClick'] = false;&lt;br /&gt;&lt;br /&gt;        parent::init();&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;registerClientScript();&lt;br /&gt;        $this-&amp;gt;renderBegin();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;A&amp;nbsp;&lt;strong&gt;run&lt;/strong&gt;&amp;nbsp;metódus ugyanazt csinálja, mint az előző&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;.&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    public function run() {&lt;br /&gt;        $this-&amp;gt;renderEnd();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;A&amp;nbsp;&lt;strong&gt;registerClientScript&lt;/strong&gt;&amp;nbsp;metódus állítja elő azt a javascript kódot, ami az oldal végére kerül, és a dialógus kliens oldali működéséért felelős.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Ha kérdés típusú dialógust szeretnénk megjeleníteni, akkor több válaszlehetőséget kell biztosítanunk, és egyúttal gondoskodnunk kell róla, hogy a lap tudja, hogy mit válaszolt a felhasználó. Ennek első része az, hogy egy&amp;nbsp;&lt;strong&gt;target&lt;/strong&gt;&amp;nbsp;nevű változóba betöltjük a dialógus azonosítóját, ami vagy meg van adva az&amp;nbsp;&lt;strong&gt;overlay plugin&lt;/strong&gt;&amp;nbsp;paraméterei között, vagy ha nincs, akkor a dialógus azonosítója lesz az.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;Ha ez megvan, akkor elkérjük a szülő osztálytól a script első részét, és hozzáfűzzük a válasz gombok kezelésének szkriptjét, aztán az így elkészült kódot visszatesszük a publikus&amp;nbsp;&lt;strong&gt;script&lt;/strong&gt;&amp;nbsp;praméterbe, majd meghívjuk a szülő osztály azonos nevű metódusát.&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;&lt;i&gt;A script kódja csak annyira van megírva, hogy az igényeknek megfelelően simán folytatni lehessen, tehát az igazi használathoz még dolgozni kell rajta.&lt;/i&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    protected function  registerClientScript() {&lt;br /&gt;        if('question' === $this-&amp;gt;type || 'decision' === $this-&amp;gt;type) {&lt;br /&gt;            if(isset($this-&amp;gt;params['&lt;wbr&gt;&lt;/wbr&gt;target'])) {&lt;br /&gt;                $target = $this-&amp;gt;params['target'];&lt;br /&gt;            } else {&lt;br /&gt;                $target = $this-&amp;gt;htmlOptions['id'];&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            $script = $this-&amp;gt;script;&lt;br /&gt;&lt;br /&gt;            $script = $script . "\n" .&lt;br /&gt;                '$("#' . $target . ' .buttons button").click(function(event) {' .&lt;br /&gt;                    'var result = $(this).attr("value");' .&lt;br /&gt;                '});';&lt;br /&gt;&lt;br /&gt;            $this-&amp;gt;script = $script;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        parent::registerClientScript()&lt;wbr&gt;&lt;/wbr&gt;;&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;És már csak annyi kell, hogy megjelenítsük a dialógusunk HTML kódját. Ennek első felét a&amp;nbsp;&lt;strong&gt;renderBegin&lt;/strong&gt;&amp;nbsp;metódus végzi, ami kiírja a dialógus kezdő részét, címét - ha van -, aztán az üzenetet, vagy kérdést.&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    protected function  renderBegin() {&lt;br /&gt;        ob_start();&lt;br /&gt;        ob_implicit_flush(false);&lt;br /&gt;        echo "\n" . CHtml::openTag($this-&amp;gt;tagName, $this-&amp;gt;htmlOptions) . "\n";&lt;br /&gt;        if(null !== $this-&amp;gt;title || '' !== $this-&amp;gt;title) {&lt;br /&gt;            echo CHtml::tag('h3', array('class' =&amp;gt; 'title'), CHtml::encode($this-&amp;gt;title), true) . "\n";&lt;br /&gt;        }&lt;br /&gt;        echo CHtml::tag('p', array('class' =&amp;gt; 'message'), CHtml::encode($this-&amp;gt;message), true);&lt;br /&gt;        $this-&amp;gt;_openTag = ob_get_contents();&lt;br /&gt;        ob_clean();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;/span&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: medium; line-height: normal;"&gt;És jön az utolsó metódus, név szerint a&amp;nbsp;&lt;strong&gt;renderEnd&lt;/strong&gt;, ami mindössze annyit csinál, hogy a kód végére odateszi a dialógus típusának megfelelő gombokat, aztán lezárja a&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;&amp;nbsp;záró kódjával az egészet.&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; border-collapse: separate; color: black; font-family: 'Times New Roman'; font-size: small; line-height: normal;"&gt;&lt;pre&gt;...&lt;br /&gt;    protected function  renderEnd() {&lt;br /&gt;        $content = ob_get_clean();&lt;br /&gt;        echo $this-&amp;gt;_openTag;&lt;br /&gt;        echo trim($content);&lt;br /&gt;        echo "\n" . CHtml::openTag('div', array('class' =&amp;gt; 'buttons')) . "\n";&lt;br /&gt;        if('alert' === $this-&amp;gt;type) {&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonOk', 'value' =&amp;gt; 'ok', 'class' =&amp;gt; 'close'), 'OK', true) . "\n";&lt;br /&gt;        } elseif('question' === $this-&amp;gt;type) {&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonYes', 'value' =&amp;gt; 'yes', 'class' =&amp;gt; 'close'), 'Igen', true) . "\n";&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonNo', 'value' =&amp;gt; 'no', 'class' =&amp;gt; 'close'), 'Nem', true) . "\n";&lt;br /&gt;        } elseif('decision' === $this-&amp;gt;type) {&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonYes', 'value' =&amp;gt; 'yes', 'class' =&amp;gt; 'close'), 'Igen', true) . "\n";&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonNo', 'value' =&amp;gt; 'no',  'class' =&amp;gt; 'close'), 'Nem', true) . "\n";&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonCancel', 'value' =&amp;gt; 'cancel',  'class' =&amp;gt; 'close'), 'Mégsem', true) . "\n";&lt;br /&gt;        }&lt;br /&gt;        echo CHtml::closeTag('div');&lt;br /&gt;        echo "\n" . CHtml::closeTag($this-&amp;gt;&lt;wbr&gt;&lt;/wbr&gt;tagName) . '' . "\n";&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most pedig nézzük a teljes kódot!&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;Yii::import('application.&lt;wbr&gt;&lt;/wbr&gt;components.widgets.&lt;wbr&gt;&lt;/wbr&gt;jQTBaseOverlay');&lt;br /&gt;class jQTDialog extends jQTBaseOverlay&lt;br /&gt;{&lt;br /&gt;    public $type = 'alert';&lt;br /&gt;    public $message;&lt;br /&gt;&lt;br /&gt;    private $_openTag;&lt;br /&gt;&lt;br /&gt;    public function init() {&lt;br /&gt;        if('alert' !== $this-&amp;gt;type &amp;amp;&amp;amp; 'question' !== $this-&amp;gt;type &amp;amp;&amp;amp; 'decision' !== $this-&amp;gt;type) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        if(null === $this-&amp;gt;message) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;htmlOptions['class'] = $this-&amp;gt;type;&lt;br /&gt;        $this-&amp;gt;params['closeOnClick'] = false;&lt;br /&gt;&lt;br /&gt;        parent::init();&lt;br /&gt;&lt;br /&gt;        $this-&amp;gt;registerClientScript();&lt;br /&gt;        $this-&amp;gt;renderBegin();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function run() {&lt;br /&gt;        $this-&amp;gt;renderEnd();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  registerClientScript() {&lt;br /&gt;        if('question' === $this-&amp;gt;type || 'decision' === $this-&amp;gt;type) {&lt;br /&gt;            if(isset($this-&amp;gt;params['&lt;wbr&gt;&lt;/wbr&gt;target'])) {&lt;br /&gt;                $target = $this-&amp;gt;params['target'];&lt;br /&gt;            } else {&lt;br /&gt;                $target = $this-&amp;gt;htmlOptions['id'];&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            $script = $this-&amp;gt;script;&lt;br /&gt;&lt;br /&gt;            $script = $script . "\n" .&lt;br /&gt;                '$("#' . $target . ' .buttons button").click(function(event) {' .&lt;br /&gt;                    'var result = $(this).attr("value");' .&lt;br /&gt;                '});';&lt;br /&gt;&lt;br /&gt;            $this-&amp;gt;script = $script;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        parent::registerClientScript()&lt;wbr&gt;&lt;/wbr&gt;;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  renderBegin() {&lt;br /&gt;        ob_start();&lt;br /&gt;        ob_implicit_flush(false);&lt;br /&gt;        echo "\n" . CHtml::openTag($this-&amp;gt;tagName, $this-&amp;gt;htmlOptions) . "\n";&lt;br /&gt;        if(null !== $this-&amp;gt;title || '' !== $this-&amp;gt;title) {&lt;br /&gt;            echo CHtml::tag('h3', array('class' =&amp;gt; 'title'), CHtml::encode($this-&amp;gt;title), true) . "\n";&lt;br /&gt;        }&lt;br /&gt;        echo CHtml::tag('p', array('class' =&amp;gt; 'message'), CHtml::encode($this-&amp;gt;message), true);&lt;br /&gt;        $this-&amp;gt;_openTag = ob_get_contents();&lt;br /&gt;        ob_clean();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected function  renderEnd() {&lt;br /&gt;        $content = ob_get_clean();&lt;br /&gt;        echo $this-&amp;gt;_openTag;&lt;br /&gt;        echo trim($content);&lt;br /&gt;        echo "\n" . CHtml::openTag('div', array('class' =&amp;gt; 'buttons')) . "\n";&lt;br /&gt;        if('alert' === $this-&amp;gt;type) {&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonOk', 'value' =&amp;gt; 'ok', 'class' =&amp;gt; 'close'), 'OK', true) . "\n";&lt;br /&gt;        } elseif('question' === $this-&amp;gt;type) {&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonYes', 'value' =&amp;gt; 'yes', 'class' =&amp;gt; 'close'), 'Igen', true) . "\n";&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonNo', 'value' =&amp;gt; 'no', 'class' =&amp;gt; 'close'), 'Nem', true) . "\n";&lt;br /&gt;        } elseif('decision' === $this-&amp;gt;type) {&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonYes', 'value' =&amp;gt; 'yes', 'class' =&amp;gt; 'close'), 'Igen', true) . "\n";&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonNo', 'value' =&amp;gt; 'no',  'class' =&amp;gt; 'close'), 'Nem', true) . "\n";&lt;br /&gt;            echo CHtml::tag('button', array('id' =&amp;gt; $this-&amp;gt;htmlOptions['id'] . 'ButtonCancel', 'value' =&amp;gt; 'cancel',  'class' =&amp;gt; 'close'), 'Mégsem', true) . "\n";&lt;br /&gt;        }&lt;br /&gt;        echo CHtml::closeTag('div');&lt;br /&gt;        echo "\n" . CHtml::closeTag($this-&amp;gt;&lt;wbr&gt;&lt;/wbr&gt;tagName) . '' . "\n";&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;Végül pedig az elkészült&amp;nbsp;&lt;strong&gt;widget&lt;/strong&gt;&amp;nbsp;használata a&amp;nbsp;&lt;strong&gt;view (nézet)&lt;/strong&gt;&amp;nbsp;állományokban.&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;...&lt;br /&gt;&amp;lt;!-- Ha erre klikkel, akkor jöhet a dialógus. --&amp;gt;&lt;br /&gt;&amp;lt;?php echo CHtml::link(CHtml::encode('&lt;wbr&gt;&lt;/wbr&gt;Dialog'),&lt;br /&gt;    array('#'),&lt;br /&gt;    array(&lt;br /&gt;        'id' =&amp;gt; 'showDialog',&lt;br /&gt;        'name' =&amp;gt; 'showDialog',&lt;br /&gt;        'rel' =&amp;gt; '#Dialog'&lt;br /&gt;    )&lt;br /&gt;); ?&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&amp;lt;!-- És ez a widget hívása. --&amp;gt;&lt;br /&gt;&amp;lt;?php $this-&amp;gt;widget('application.&lt;wbr&gt;&lt;/wbr&gt;components.widgets.jQTDialog', array(&lt;br /&gt;    'htmlOptions' =&amp;gt; array(&lt;br /&gt;        'id' =&amp;gt; 'overlay',&lt;br /&gt;        'name' =&amp;gt; 'overlay'&lt;br /&gt;    ),&lt;br /&gt;    'trigger' =&amp;gt; 'showDialog',&lt;br /&gt;    'useMask' =&amp;gt; true,&lt;br /&gt;    'title' =&amp;gt; 'Dialógus',&lt;br /&gt;    'type' =&amp;gt; 'question',&lt;br /&gt;    'message' =&amp;gt; 'Valamit kérdezni akartam, de elfelejtettem. Nem tudod, mi volt az?'&lt;br /&gt;)); ?&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;Remélem, lesz némi haszna a cikknek! Akinek netán kedve támadna, hogy megjegyzéssel illesse a két cikket, ne fogja vissza magát! Nem vagyok egy über okos programozó, csak szeretek ezzel foglalkozni, és szívesen tanulok én is abból, amit a nálam okosabbak mondanak/írnak.&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-5155978323730300455?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/5155978323730300455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/04/nosza-irjunk-widget-et-2-resz.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5155978323730300455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5155978323730300455'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/04/nosza-irjunk-widget-et-2-resz.html' title='Nosza, írjunk widget-et! 2. rész (tyúklépésről tyúklépésre)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-7718359301806194158</id><published>2011-04-02T06:29:00.000-07:00</published><updated>2011-04-06T15:22:21.029-07:00</updated><title type='text'>Hajrá MAGYAROK!</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;b&gt;Hajrá MAGYAROK!&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;FRISSITES 2:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Na, csak hogy lathassatok kemeny munkank gyumolcset, bekuldtem a cuccost:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/yiidoc/source/detail?r=2008"&gt;http://code.google.com/p/yiidoc/source/detail?r=2008&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;FRISSITES:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Hat holgyeim es uraim, ugy latom &lt;b&gt;kesz vagyunk&lt;/b&gt; - 3.5 nap alatt ... nem rossz :) nagyon szepen koszonjuk mindenkinek az idejet es energiajat.&lt;br /&gt;&lt;br /&gt;Ha valakinek lemaradt volna a neve, kerem jelezze!!! Remelem mar az &lt;i&gt;1.1.8&lt;/i&gt;-asban benne lesz a cucc. Koszi megegyszer!&lt;br /&gt;&lt;br /&gt;--------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Már nem lehet elbújni a felelősség alól, hehe. &lt;br /&gt;&lt;br /&gt;Ha megy az angol, márpedig ha a &lt;b&gt;Yii&lt;/b&gt; rendszert használod, akkor valamennyire biztos megy, légyszives légy oly kedves, segíts nekünk abban, hogy végre a &lt;b&gt;Yii&lt;/b&gt; megszolaljon már &lt;u&gt;magyarul&lt;/u&gt; is. &lt;br /&gt;&lt;br /&gt;Az egész nem tart tovább mint &lt;b&gt;tíz másodperc&lt;/b&gt;. Tényleg. Se &lt;b&gt;regisztrálni nem kell&lt;/b&gt;, se semmi. Csak klikkolj a linkre, nézd meg melyik mondat hiányzik és ha tudod, fordítsd le:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://j.mp/ftAMJu"&gt;http://j.mp/ftAMJu&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="background-color: black; font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;KÖ&lt;/span&gt;&lt;span class="Apple-style-span" style="color: white;"&gt;S&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;ZI&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: black; font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;ui&lt;/b&gt;: ja, ha segítettél a fordításban, légyszi jelentkezz, hogy a nevedet feltüntethessük valahol!&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;Néhány kifejezés, amit jó lenne a fordítás során betartani, hogy nagyjából egységes legyen ( ahova ? jelet tettem, nem vagyok biztos ):&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Controller&lt;/b&gt; - Vezérlő&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Model&lt;/b&gt; - Modell&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;View&lt;/b&gt; - Nézet&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;MVC&lt;/b&gt; - MVC (szvsz, ne fordítsuk!)&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Active Record&lt;/b&gt; - Aktív Rekord (más ötlet?)&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Class&lt;/b&gt; - Osztály&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Cache&lt;/b&gt; - Gyorsítótár&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;b&gt;Alias&lt;/b&gt; - Álnév&lt;br /&gt;&lt;b&gt;Extension&lt;/b&gt; - Bővítmény&lt;br /&gt;&lt;b&gt;Widget&lt;/b&gt; - Widget, ne forditsuk!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Eddigi fordítóink:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;- Balázs Simon&lt;br /&gt;- Benyó Balázs&lt;br /&gt;- Erős Bence&lt;br /&gt;- Hajdu Mihály&lt;br /&gt;- Kádár Péter&lt;br /&gt;- Kelemen Zádor Dániel&lt;br /&gt;- &lt;a href="http://mehesz.net/"&gt;Méhész Imre&lt;/a&gt;&lt;br /&gt;- Nagy Róbert&lt;br /&gt;- Perjési Szabolcs&lt;br /&gt;- Schumacher Zsolt&lt;br /&gt;- &lt;a href="http://nyukapiszka.blogspot.com/"&gt;Vajda János&lt;/a&gt;&lt;br /&gt;- Zahratka János&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-7718359301806194158?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/7718359301806194158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/04/hajra-magyarok.html#comment-form' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7718359301806194158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7718359301806194158'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/04/hajra-magyarok.html' title='Hajrá MAGYAROK!'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-1800615527124873478</id><published>2011-03-20T01:00:00.000-07:00</published><updated>2011-03-21T17:47:45.118-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jquery tools'/><category scheme='http://www.blogger.com/atom/ns#' term='CHtml'/><category scheme='http://www.blogger.com/atom/ns#' term='kütyü'/><category scheme='http://www.blogger.com/atom/ns#' term='dry'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><title type='text'>Nosza, írjunk widget-et! (tyúklépésről tyúklépésre)</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large; font-weight: bold;"&gt;1. rész&lt;/span&gt;&lt;/div&gt;&lt;h4 style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;Írta:&lt;/i&gt;&amp;nbsp;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; border-collapse: collapse; font-family: arial, sans-serif;"&gt;János Zahratka&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;&lt;h4&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h4&gt;&lt;h4&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Ok, de mi az a widget?&lt;/span&gt;&lt;/h4&gt;&lt;ol&gt;&lt;li&gt;A &lt;b&gt;Yii&lt;/b&gt; egyik alapelve a &lt;b&gt;DRY&lt;/b&gt; (Dont Repeat Yourself), vagyis ne ismételd önmagad! Ennek szellemében a widget egyik tulajdonsága, hogy kódrészleteket tárol, amelyeket aztán tetszés szerinti számossággal képes reprodukálni az oldalakon.&lt;br /&gt;&lt;br /&gt;Tegyük fel, hogy dobozokra szeretnénk felosztani weblapjainkat! Ekkor az átlag halandó nekiáll a HTML kódnak, és összeszedve minden kitartását bemásolgatja a dobozok leíró kódját a megfelelő helyekre. Ezzel önmagában nincs is semmi gond, egészen addig, amíg nem kell megváltoztatni a dobozok kódját. No, ekkor szokott előjönni az az effekt, hogy az ember fia/lánya rágyújt egy újabb koporsószögre, és nagyot sóhajtva nekiáll, hogy ismét végigmenjen az összes lap kódján, és egyenként megváltoztassa az egyes dobozokat. Kb. a harmadik, negyedik ilyen kimerítő változtatás után kezd testetölteni a gondolat, hogy ez az egész weblap készítés nagyon macerás dolog.&lt;br /&gt;Ha&amp;nbsp;&lt;a href="http://www.yiiframework.com/" target="_blank"&gt;Yii&lt;/a&gt;-t használunk, akkor mázlisták vagyunk, hisz itt van nekünk a&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CWidget" target="_blank"&gt;widget&lt;/a&gt;, s ennek segítségével szó szerint percek alatt képesek vagyunk arra, hogy a teljes weblap összes kódjában megváltoztassuk a dobozokat megjelenítő kódot. Nos, akkor nézzünk erre egy kis példát! Maradva a feltételezésnél, egy sima doboz konténer kódját kell előállítanunk.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Yii kód&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;HTML eredmény&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;lt;?php $this-&amp;gt;beginWidget('&lt;wbr&gt;&lt;/wbr&gt;dobozWidget'); ?&amp;gt;&lt;br /&gt;    ... A doboz tartalma ...&lt;br /&gt;&amp;lt;?php $this-&amp;gt;endWidget(); ?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;lt;div class="doboz"&amp;gt;&lt;br /&gt;    &amp;lt;div class="tartalom"&lt;br /&gt;        ... A doboz tartalma ...&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Ó, igen, tudom, ez egy használhatatlan példa, viszont nagyon is jól mutatja a widget kód reprodukálási tulajdonságát.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A widget újabb igen jó tulajdonsága, hogy paraméterezhető. Tehát nemcsak egy nevet tudunk neki megadni, hanem - a példánál maradva - mondjuk a doboz címét is.&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Yii kód&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;HTML eredmény&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;lt;?php $this-&amp;gt;beginWidget('&lt;wbr&gt;&lt;/wbr&gt;dobozWidget', array(&lt;br /&gt;    'title' =&amp;gt; 'A doboz címe'&lt;br /&gt;)); ?&amp;gt;&lt;br /&gt;    ... A doboz tartalma ...&lt;br /&gt;&amp;lt;?php $this-&amp;gt;endWidget(); ?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;lt;div class="doboz"&amp;gt;&lt;br /&gt;    &amp;lt;div class="cim"&amp;gt;A doboz címe&amp;lt;/div&amp;gt;&lt;br /&gt;    &amp;lt;div class="tartalom"&lt;br /&gt;        ... A doboz tartalma ...&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Nos, igen, ezen a példán azért már látszik valami abból, hogy nemcsak kód gépelést takarít meg a widget a fejlesztőnek, hanem bizony a paraméterezési lehetőséggel igencsak összetett widgeteket lehet írni.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;És még mindíg vannak lehetőségek a widgetekben. A fejlesztők - nagyon okosan - gondoltak arra is, hogy ne csak a tartalmat lehessen hordozni a widget-ben, hanem a formát is. Ezért aztán lehetőség van arra, hogy a dobozunk formáját is belepakoljuk, sőt, ha netán arra vetemednénk, hogy javascript funkciókkal ruháznánk fel a dobozt (animált megjelenés, görgethető tartalom, stb), akkor az ehhez a kódrészlethez tartozó javascript állományokat is magában hordozhatja, és amikor szükség van rá, pár sor megírásával gondoskodik róla, hogy a szükséges CSS és egyéb file-ok elérhetővé váljanak a weblap megjelenítésénél.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;És még van egy nagyon-nagyon fontos tulajdonsága, amivel ez a cikk ugyan nem foglalkozik, de érdemes tudni, hogy arra is van lehetőség, hogy a kliens oldali megjelenítéshez hozzá lehet fűzni a szerver oldali kiszolgáló&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CAction" target="_blank"&gt;action&lt;/a&gt;-okat.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Talán első blikkre elég is ennyi a widget-ek tulajdonságairól. A most következő példa widget eléggé jól fogja szemléltetni, hogy milyen jó kis cuccokat lehet farigcsálni velük, ha egy kis időt rászánunk a dologra.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Lássuk a feladatot!&lt;/span&gt;&lt;/h4&gt;"A Gugli a barátod" című mondás nagyon is igaz voltát bizonyítja, hogy keresgélés közben ráakadtam a&amp;nbsp;&lt;a href="http://flowplayer.org/tools/index.html" target="_blank"&gt;jQuery Tools&lt;/a&gt;&amp;nbsp;oldalra. Ez egy jQuery alá írt kis gyűjtemény, ami a felhasználói felületet hivatott kiegészíteni, feltuningolni. Egy szó, mint száz, eldöntöttem, hogy lekapom a netről, és beledolgozom a kis Yii eszköztáramba. Jó, ha az embernek vannak ilyesmik a keze ügyében.&lt;br /&gt;Az Overlay egy olyan kis plugin, amivel az oldal "fölé" lehet megjeleníteni különböző tartalmakat. Egyszerűbben fogalmazva egy panel szerűség, amit tetszőleges tartalommal lehet megtölteni, aztán ezt meg lehet jeleníteni - mondjuk egy linkre, vagy képre kattintva -, illetve el lehet rejteni. Az oldalon jó sok demo mutatja be az egyes plugin-ek működését, sőt, olyan demo-kat is feltettek, melyek az egyes elemek kombinációit demonstrálják.&lt;br /&gt;Némi negatívumként meg kell említenem, hogy a letöltés nem ment simán. Megpróbáltam összerakni magamnak egy összeállítást, de a letöltés gombra kattintva nem találta a cuccot. Viszont egy szerkesztőt megnyitva, és egyenként ráklikkelgetve az egyes szkriptekre, majd kijelölve, és bemásolva a szerkesztőbe simán meg lehet csinálni a saját összeállítást.&lt;br /&gt;Szóval a feladat az, hogy csináljunk egy olyan widget-et, ami:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;lekezeli a megjelenítendő HTML kód paramétereit,&lt;/li&gt;&lt;li&gt;"legyártja" a plugin használatához szükséges HTML kódot,&lt;/li&gt;&lt;li&gt;elérhetővé teszi a megjelenő oldalon a plugin-hez tartozó CSS, és javascript állományokat,&lt;/li&gt;&lt;li&gt;beállítja a plugin lehetséges paramétereit,&lt;/li&gt;&lt;li&gt;elkészíti és befűzi az oldal végére azt a scriptet, amitől az Overlay működni fog,&lt;/li&gt;&lt;li&gt;és végül alkalmas arra, hogy ebből a widget-ből származtatással új widget-eket lehessen írni az Overlay kibővítéséhez.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;h4&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;A "kopasz" widget&lt;/span&gt;&lt;/h4&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;A magam részéről egyfajta komponensnek tekintem a widget-eket, ezért a&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/components/widgets&lt;/span&gt;&amp;nbsp;mappába szoktam tenni őket. Esetünkben a kiinduló widget a következőképpen néz ki:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&amp;lt;?php&lt;br /&gt;class jQTBaseOverlay extends CWidget&lt;br /&gt;{&lt;br /&gt;    public function init() {&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public function run() {&lt;br /&gt;    }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;A "&lt;i&gt;kopasz&lt;/i&gt;", azaz üres widget-ünk összesen négy dolgot tartalmaz:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A widget nevét, amire később hivatkozni fogunk.&lt;/li&gt;&lt;li&gt;Azt az osztályt, amiből származtatjuk, s így örököljük a szülő paramétereit és metódusait (CWidget).&lt;/li&gt;&lt;li&gt;A publikus&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_init"&gt;init&lt;/a&gt;&amp;nbsp;metódust, amiben majd beállítjuk a widget paramétereit, és elkészítjük a widget nyitó fejrészét.&lt;/li&gt;&lt;li&gt;A szintén publikus&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_run"&gt;run&lt;/a&gt;&amp;nbsp;metódust, amiben megjelenítjük a widget tartalmát, és a záró lábrészét.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Paraméterek&lt;/span&gt;&lt;/h4&gt;&lt;br /&gt;A példa widget-ben szintaktikailag három, logikailag négy fajta osztály szintű paramétert fogunk használni:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A&amp;nbsp;&lt;strong&gt;publikus paraméterek&lt;/strong&gt;&amp;nbsp;azok, amelyek értékét közvetlenül megadhatja, illetve lekérheti a felhasználó.&lt;/li&gt;&lt;li&gt;A&amp;nbsp;&lt;strong&gt;privát, vagy protected (védett) paraméterek&lt;/strong&gt;&amp;nbsp;olyan változók, melyeknek értékét nem közvetlenül adjuk meg, vagy kapjuk meg, hanem valamilyen eljárás, számítás eredményét hordozzák. Jó példa erre a&amp;nbsp;&lt;strong&gt;_clientScript&lt;/strong&gt;, melynek értékét a Yii-től kapjuk meg. Csinálhatnánk azt is, hogy ezt az értéket minden alkalommal lekérjük a rendszertől és nem tároljuk, ám ez lassítaná a widget futását, és ezzel az egész lap megjeleítését.&lt;/li&gt;&lt;li&gt;Harmadik típusú változónk a&amp;nbsp;&lt;strong&gt;privát, belső típus&lt;/strong&gt;. Ezt arra használjuk, hogy két védett, vagyis az osztályon kívülről elérhetetlen metódusok között adatokat adjunk át.&lt;/li&gt;&lt;li&gt;A negyedik kategória, amit ebben a widget-ben használunk a&amp;nbsp;&lt;strong&gt;privát, belső és statikus paraméter&lt;/strong&gt;. Ez a fajta változó megkapja a kezdeti értékét, és a nem statikus változókkal szemben megőrzi azt akkor is, ha egy új Overlay widget-et szeretnénk létrehozni a lapon.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Publikus paraméterek&lt;/span&gt;&lt;/h5&gt;&lt;ol&gt;&lt;li&gt;A&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CHtml" target="_blank"&gt;CHtml helper&lt;/a&gt;&amp;nbsp;metódusai használnak egy&amp;nbsp;&lt;strong&gt;htmlOptions&lt;/strong&gt;&amp;nbsp;nevű tömböt, ami arra szolgál, hogy a megjelenítendő HTML kód paramétereit lehessen átadni vele a widget-nek, ezért mi is alkalmazni fogjuk, hogy csak azokat a paramétereket kelljen külön megtanulnunk, megjegyeznünk, amelyek kiegészítik a Yii kód formátumát.&lt;/li&gt;&lt;li&gt;További ilyen, Yii szerű paraméter a&amp;nbsp;&lt;strong&gt;tagName&lt;/strong&gt;, ami azt a HTML tagot jelenti, amit majd a widget Overlay-ként megjelenít. Ez alapértelmezésben a&amp;nbsp;&lt;strong&gt;div&lt;/strong&gt;tag.&lt;br /&gt;&lt;strong&gt;Megjegyzés:&lt;/strong&gt;&amp;nbsp;Ez a paraméter nagyon hasznossá válhat abban az esetben, ha pl.: valaki netán arra vetemedne, hogy HTML5 alapú oldalt akar csinálni. Ekkor nem kell átírnia a widget-et, csak annyi a dolga, hogy a widget hívásakor beállítja az használni kívánt HTML tag nevét.&lt;/li&gt;&lt;li&gt;A&amp;nbsp;&lt;strong&gt;title&lt;/strong&gt;&amp;nbsp;paraméterben lehet majd megadni a megjelenő Overlay panel címét. Ha nem adjuk meg, vagyis üresen hagyjuk, akkor nem jeleníti meg a címet HTML oldalon.&lt;/li&gt;&lt;li&gt;A&amp;nbsp;&lt;strong&gt;trigger&lt;/strong&gt;-ben kell megadni annak a másik HTML elemnek a nevét, amire klikkelve megjelenik az Overlay.&lt;/li&gt;&lt;li&gt;A&amp;nbsp;&lt;strong&gt;useMask&lt;/strong&gt;&amp;nbsp;paraméter true/false (igaz/hamis) értékeket vehet fel, és arra szolgál, hogy amikor az Overlay megjelenik, takarja-e el egy valamilyen szinű felület az oldal többi részét.&lt;/li&gt;&lt;li&gt;A&amp;nbsp;&lt;strong&gt;params, maskParams&lt;/strong&gt;&amp;nbsp;paraméterekben lehet megadni azokat a paramétereket, melyek az Overlay működését szabályozzák.&lt;/li&gt;&lt;li&gt;Aki érzi annyira a szert, hogy tovább akarja bonyolítani a javascript kódot, annak itt vannak az Overlay adta események paraméterei:&amp;nbsp;&lt;strong&gt;events, maskEvents&lt;/strong&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Privát paraméterek&lt;/span&gt;&lt;/h5&gt;&lt;ol&gt;&lt;li&gt;Az&amp;nbsp;&lt;strong&gt;_id&lt;/strong&gt;&amp;nbsp;paramétert elvileg nem kellene definiálni, mert azt már örököltük a&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CWidget" target="_blank"&gt;CWidget&lt;/a&gt;&amp;nbsp;osztálytól, viszont azt szeretnénk, hogy a widget-ünk ne a szokásos "yw0" id-t kapja, ha nem adunk meg neki mi magunk id-t a létrehozás során, hanem legyen saját, csak erre a widget-re jellemző egyedi neve.&lt;/li&gt;&lt;li&gt;Az&amp;nbsp;&lt;strong&gt;_assetsUrl&lt;/strong&gt;&amp;nbsp;a widget "tartozékainak" (CSS, javascript, képek, stb.) elérési útvonalát tárolja.&lt;/li&gt;&lt;li&gt;Ahhoz, hogy a widget "tartozékait" hozzá tudjuk tenni a megjelenítendő HTML oldalakhoz, szükségünk van a&amp;nbsp;&lt;strong&gt;_clientScript&lt;/strong&gt;&amp;nbsp;paraméterre, aminek érékét majd a Yii-től kell elkérnünk.&lt;/li&gt;&lt;li&gt;Következő paraméterünk a&amp;nbsp;&lt;strong&gt;_script&lt;/strong&gt;, ami arra szolgál, hogy a widget működéséhez szükséges javascript kódot tárolja.&lt;/li&gt;&lt;/ol&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Privát, belső paraméterek&lt;/span&gt;&lt;/h5&gt;&lt;ol&gt;&lt;li&gt;Az&amp;nbsp;&lt;strong&gt;_openTag&lt;/strong&gt;-ot arra használjuk, hogy az&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_init"&gt;init&lt;/a&gt;&amp;nbsp;metódusban megkezdett widget megjelenítésre elkészített kódját átvigyük vele a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_run"&gt;run&lt;/a&gt;&amp;nbsp;metódusba, hogy ott folytathassuk vele a megjelenítést.&lt;br /&gt;&lt;strong&gt;Megjegyzés:&lt;/strong&gt;A megjelenítéshez a php&amp;nbsp;&lt;a href="http://php.net/manual/en/book.outcontrol.php" target="_blank"&gt;Output Buffering Control (kimenet pufferelés)&lt;/a&gt;&amp;nbsp;technikáját használjuk, hogy lehetőség legyen pl.: a&amp;nbsp;&lt;a href="http://php.net/manual/en/function.header.php" target="_blank"&gt;header&lt;/a&gt;-ek módosítására még a megjelenítés előtt.&lt;/li&gt;&lt;/ol&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Privát, belső, statikus paraméterek&lt;/span&gt;&lt;/h5&gt;&lt;ol&gt;&lt;li&gt;Utolsó osztály szintű paraméterünk a statikus&amp;nbsp;&lt;strong&gt;_counter&lt;/strong&gt;, amit arra fogunk használni, hogy a widget egyedi nevének (&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__id"&gt;_id&lt;/a&gt;) automatikus létrehozásakor legyen egy számlálónk, amit a név végéhez hozzáfűzve valóban egyedi értéket kapunk.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Ok, most lássuk mindezt kódban is!&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    public $htmlOptions = array();&lt;br /&gt;    public $tagName = 'div';&lt;br /&gt;    public $title = null;&lt;br /&gt;    public $trigger = null;&lt;br /&gt;    public $useMask = false;&lt;br /&gt;    public $params = array();&lt;br /&gt;    public $events = array();&lt;br /&gt;    public $maskParams = array();&lt;br /&gt;    public $maskEvents = array();&lt;br /&gt;&lt;br /&gt;    private $_id;&lt;br /&gt;    private $_assetsUrl;&lt;br /&gt;    private $_clientScript;&lt;br /&gt;    private $_script;&lt;br /&gt;&lt;br /&gt;    private $_openTag;&lt;br /&gt;    private static $_counter = 0;&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h4&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Metódusok&lt;/span&gt;&lt;/h4&gt;A widget-ben&amp;nbsp;&lt;strong&gt;public (publikus)&lt;/strong&gt;&amp;nbsp;és&amp;nbsp;&lt;strong&gt;protected (védett)&lt;/strong&gt;&amp;nbsp;metódusokat fogunk használni attól függően, hogy megengedjük-e a metódushoz való hozzáférést az osztályon kívülről.&lt;br /&gt;A publikus metódusok egy része az un.&amp;nbsp;&lt;a href="http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members" target="_blank"&gt;getter/setter (olvasás/írás)&lt;/a&gt;&amp;nbsp;kategóriába tartoznak, és arra szolgálnak, hogy a paraméterek bekérése vagy beállítása során kódrészleteket hajtsanak végre, mellyel befolyásolni tudják a paraméterek értékeit.&lt;br /&gt;A "publikusok" másik része pedig vagy automatikusan kerül majd meghívásra, vagy pedig az ebből a widget-ből származtatott új widget-ekben lehet majd használni őket.&lt;br /&gt;Nos, ha eddig nem volt eléggé hosszadalmas és unalmas a cikk, akkor most jön a java, mert elkezdem magyarázgatni, hogy mit is csinálnak az egyes metódusok.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;init&lt;/span&gt;&lt;/h5&gt;A publikus&amp;nbsp;&lt;strong&gt;init&lt;/strong&gt;&amp;nbsp;metódus nevéhez hűen inicializálja a widget paramétereit. Egy sima widget esetében nem kellene az inicializálást így szétdarabolni több almetódusra, ám ez egy speciális eset, mivel a&amp;nbsp;&lt;strong&gt;jQTBaseOverlay&lt;/strong&gt;&amp;nbsp;widget alapnak készül, amiből majd az újabb widget-eket származtatni fogjuk. Ennek fényében már nem is olyan furcsa, hogy ennek a widget-nek egyáltalán nincs is megjelenése a view-ban.&lt;br /&gt;Tehát ez a metódus meghívja a következő almetódusokat:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_initHrmlOprions"&gt;initHtmlOptions&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_initParams"&gt;initParams&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_registerScriptFiles"&gt;registerScriptFiles&lt;/a&gt;,&lt;/li&gt;&lt;li&gt;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_getScript"&gt;getScript&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;    &lt;span class="Apple-style-span" style="font-size: x-small;"&gt;...&lt;br /&gt;    public function init() {&lt;br /&gt;        $this-&amp;gt;initHtmlOptions();&lt;br /&gt;        $this-&amp;gt;initParams();&lt;br /&gt;        $this-&amp;gt;registerScriptFiles();&lt;br /&gt;        $this-&amp;gt;getScript();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;run&lt;/span&gt;&lt;/h5&gt;Ez a metódus ezúttal üresen marad. Pusztán annyi a szerepe, hogy majd a leszármaztatott widget-ben elővegyük. Egyébként a widget-ben ez a metódus futtatja le magát a widget-et.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;...&lt;br /&gt;    public function run() {&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;getId&lt;/span&gt;&lt;/h5&gt;Ez a metódus az&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__id"&gt;_id&lt;/a&gt;&amp;nbsp;paraméter értékét állítja be, vagy adja vissza attól függően, hogy az&amp;nbsp;&lt;strong&gt;autoGenerate&lt;/strong&gt;&amp;nbsp;bemeneti paraméter értéke false (hamis), vagy true (igaz).&lt;br /&gt;Ha automatikusan kell előállítania az értéket, akkor fogja az osztály nevét, hozzáfűz egy kötőjelet, és a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__counter"&gt;_counter&lt;/a&gt;&amp;nbsp;változó eggyel megnövelt értékét, majd ezt a string-et visszaadja.&lt;br /&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    public function getId($autoGenerate = true) {&lt;br /&gt;        if(null !== $this-&amp;gt;_id) {&lt;br /&gt;            return $this-&amp;gt;_id;&lt;br /&gt;        } elseif($autoGenerate) {&lt;br /&gt;            return $this-&amp;gt;_id = get_class($this) . '-' . (self::$_counter++);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;setId&lt;/span&gt;&lt;/h5&gt;A metódus cask annyit csinál, hogy a&amp;nbsp;&lt;strong&gt;value&lt;/strong&gt;&amp;nbsp;bemeneti paramétert átadja a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__counter"&gt;_counter&lt;/a&gt;&amp;nbsp;változónak.&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    public function setId($value = null) {&lt;br /&gt;        if(null !== $value) {&lt;br /&gt;            $this-&amp;gt;_id = $value;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;h5&gt;&lt;br /&gt;&lt;/h5&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;getAssetsUrl&lt;/span&gt;&lt;/h5&gt;Megvizsgálja, hogy az&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__assetsUrl"&gt;_assetsUrl&lt;/a&gt;&amp;nbsp;paraméternek van-e már értéke. Ha nincs, akkor bekéri a Yii alkalmazástól az&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/api/1.1/CAssetManager" target="_blank"&gt;assetManager&lt;/a&gt;&amp;nbsp;hivatkozását, aztán megállapítja, hogy hol van a widget állományunk, és hozzáfűzi a "/assets" stringet. Ha ezekkel végzett, publikálja a widget-hez tartozó CSS, javascript, és egyéb állományokat, majd beállítja az&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__assetsUrl"&gt;_assetsUrl&lt;/a&gt;&amp;nbsp;értékét. Ezután már csak annyi van hátra, hogy felszabadítsa az&amp;nbsp;&lt;strong&gt;assetManager&lt;/strong&gt;&amp;nbsp;változó által lefoglalt memóriát és visszaadja a beállított&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__assetsUrl"&gt;_assetsUrl&lt;/a&gt;-t.&lt;br /&gt;&lt;br /&gt;A&amp;nbsp;&lt;strong&gt;publish&lt;/strong&gt;&amp;nbsp;metódus utolsó paramétere (YII_DEBUG) azért van megadva, mert ha a fejlesztői szakaszban vagyunk, akkor minden alkalommal publikálni kell a widget "tartozékait", hisz a rendszer nem tudja, hogy mit változtattunk a feljesztés közben. Ha az oldal már kint lesz a neten, és üzemel, akkor természetesen már nem kell majd minden alkalommal publikálni a cuccokat, és ezt a&amp;nbsp;&lt;strong&gt;YII_DEBUG&lt;/strong&gt;&amp;nbsp;be is állítja helyettünk, tehát nem kell majd feltúrni az összes widget kódját, hogy átkapcsoljuk az erőltetett publikálást.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A "tartozékok" kezelésének megértéséhez tudom ajánlani a&amp;nbsp;&lt;a href="http://www.yiiframework.com/wiki/148/understanding-assets" target="_blank"&gt;cikket&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    public function getAssetsUrl() {&lt;br /&gt;        if(null === $this-&amp;gt;_assetsUrl) {&lt;br /&gt;            $assetManager = Yii::app()-&amp;gt;getAssetManager();&lt;br /&gt;            $path = dirname(__FILE__) . '/assets';&lt;br /&gt;&lt;br /&gt;            $this-&amp;gt;_assetsUrl = $assetManager-&amp;gt;publish($path, false, -1, YII_DEBUG);&lt;br /&gt;&lt;br /&gt;            unset($assetManeger);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return $this-&amp;gt;_assetsUrl;&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;getClientScript&lt;/span&gt;&lt;/h5&gt;Ó, igen. Kelleni fog a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__clientScript"&gt;_clientScript&lt;/a&gt;&amp;nbsp;is, amit ez a metódus állít be. Persze csak akkor, ha még nincs beállítva.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    public function getClientScript() {&lt;br /&gt;        if(null === $this-&amp;gt;_clientScript) {&lt;br /&gt;            $this-&amp;gt;_clientScript = Yii::app()-&amp;gt;getClientScript();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        return $this-&amp;gt;_clientScript;&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;h5&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;getScript&lt;/span&gt;&lt;/h5&gt;A&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__script"&gt;_script&lt;/a&gt;&amp;nbsp;paraméter értékét is elő kell állítani, hogy aztán majd hozzá lehessen fűzni az oldal végéhez.&lt;br /&gt;Ha még nincs beállítva az értéke, akkor egy üres tömbbe beleteszi a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_params"&gt;params&lt;/a&gt;, majd az&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_events"&gt;events&lt;/a&gt;&amp;nbsp;értékeit. Mindezt úgy csinálja, hogy összefűzi a két paraméter értékeit, mert a&amp;nbsp;&lt;strong&gt;jQery Tools Overlay&lt;/strong&gt;&amp;nbsp;plugin-je úgy lett megírva, hogy egy objektumban fogadja a beállításokat, és az eseményeket. Ha ezzel megvan akkor még azt is megvizsgálja, hogy akarunk-e&amp;nbsp;&lt;strong&gt;mask&lt;/strong&gt;-ot tenni a megjelenítendő panel mögé. Ezek után már csak annyi a dolga, hogy az összefűzött tömböt átalakítsa a javascript számára "emészthető" formára, aztán elkészítse a javascript-et, amihez még a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_trigger"&gt;trigger&lt;/a&gt;&amp;nbsp;paramétert is felhasználja, s végül az így összerakott javascript string-et adja vissza.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    public function getScript() {&lt;br /&gt;        if(null === $this-&amp;gt;_script) {&lt;br /&gt;            $params = array();&lt;br /&gt;            $params = CMap::mergeArray($this-&amp;gt;&lt;wbr&gt;&lt;/wbr&gt;params, $this-&amp;gt;events);&lt;br /&gt;            if($this-&amp;gt;useMask) {&lt;br /&gt;                $params['mask'] = CMap::mergeArray($this-&amp;gt;&lt;wbr&gt;&lt;/wbr&gt;maskParams, $this-&amp;gt;maskEvents);&lt;br /&gt;            }&lt;br /&gt;            $params = CJavaScript::encode($params);&lt;br /&gt;            $this-&amp;gt;_script = '$("#' . $this-&amp;gt;trigger . '").overlay(' . $params . ');';&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        unset($params);&lt;br /&gt;&lt;br /&gt;        return $this-&amp;gt;_script;&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;/pre&gt;&lt;pre&gt;&lt;h5 style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;setScript&lt;/span&gt;&lt;/h5&gt;&lt;div style="white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Persze arra is lehetőséget kell adni, hogy ne csak automatikusan lehessen beállítani a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1__script"&gt;_script&lt;/a&gt;&amp;nbsp;értékét. A metódus kap egy értéket, amit átad, és ezzel meg is van a dolog.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    public function setScript($value = null) {&lt;br /&gt;        if(null !== $value) {&lt;br /&gt;            $this-&amp;gt;_script = $value;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;h5 style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;initHtmlOptions&lt;/span&gt;&lt;/h5&gt;&lt;div style="white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ahol javascript van, ott bizony nem árt, ha a HTML elemeknek adunk nevet, azaz&amp;nbsp;&lt;strong&gt;id&lt;/strong&gt;-t, hogy könnyen és gyorsan azonosíthatóak legyenek. Ha a widget véletlenül nem kapna&amp;nbsp;&lt;strong&gt;id&lt;/strong&gt;-t, akkor majd ad saját magának. Ugyanezt megcsinálja a&amp;nbsp;&lt;strong&gt;name&lt;/strong&gt;&amp;nbsp;HTML paraméterrel is. Végezetül pedig még arról is gondoskodik, hogy ha netán nincs CSS osztály hozzárendelve a widget-hez, akkor ad neki. Mindezt a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_htmlOptions"&gt;htmlOptions&lt;/a&gt;&amp;nbsp;paraméterben tárolja el a widget.&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    protected function initHtmlOptions() {&lt;br /&gt;        if(!isset($this-&amp;gt;htmlOptions['&lt;wbr&gt;&lt;/wbr&gt;id'])) {$this-&amp;gt;htmlOptions['id'] = $this-&amp;gt;getId();}&lt;br /&gt;        if(!isset($this-&amp;gt;htmlOptions['&lt;wbr&gt;&lt;/wbr&gt;name'])) {$this-&amp;gt;htmlOptions['name'] = $this-&amp;gt;getId();}&lt;br /&gt;        if(!isset($this-&amp;gt;htmlOptions['&lt;wbr&gt;&lt;/wbr&gt;class'])) {$this-&amp;gt;htmlOptions['class'] = 'overlay';}&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;/div&gt;&lt;div&gt;&lt;h5 style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;initParams&lt;/span&gt;&lt;/h5&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ez a metódus az egész widget legizmosabb metódusa. röviden összefoglalva arról gondoskodik, hogy a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_overlay-params"&gt;params&lt;/a&gt;, az&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_overlay-events"&gt;events&lt;/a&gt;, a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_overlay-params"&gt;maskParams&lt;/a&gt;&amp;nbsp;és a&amp;nbsp;&lt;a href="https://mail.google.com/mail/?ui=2&amp;amp;ik=4fd5929279&amp;amp;view=att&amp;amp;th=12ec0b8aed7a0832&amp;amp;attid=0.1&amp;amp;disp=inline&amp;amp;realattid=f_glct1hux0&amp;amp;zw#0.1_overlay-events"&gt;maskEvents&lt;/a&gt;paraméterek megkapják a kezdeti, vagy alapértelmezett értékeiket.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ha a "close", "target" elemek be vannak állítva, akkor az értékük elé odateszi a "#" jelet, mert ez a két paraméter HTML id (azonosító), amit a jQuery a CSS szelektorok szabályai szerint ismer fel.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ha a "top" értéke nincs megadva, akkor beállítja "center"-re. A jQuery Tools-ban az Overlay "top" paramétere alapértelmezésben "10%". Ezt az értéket saját hatáskörben felülírtam, hogy függőlegesen is középre igazítsa a megjelenítendő panelt.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;A következő lépés az, hogy megnézi, hogy az Overlay saját eseményei be vannak-e állítva. Ha igen, akkor leszedi előlük a "js:" szöveget, mert ez a Yii-ben szokásos jelölés, aminek a végeredményben nem szabad benne lennie.&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ezutan néhány alapértelmezett érték beállítása következik a "mask" paraméterein, de csak abban az esetben, ha nincsenek megadva ("closeSpeed", "color", stb).&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;A metódus utolsó blokkja ismét eseményekkel foglalkozik, csak ezúttal nem a panel eseményeivel, hanem a mögötte megjeletethető mask eseményeivel.&lt;/span&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    protected function initParams() {&lt;br /&gt;        if(isset($this-&amp;gt;params['close'&lt;wbr&gt;&lt;/wbr&gt;])) {$this-&amp;gt;params['close'] = (strpos($this-&amp;gt;params['close']&lt;wbr&gt;&lt;/wbr&gt;, '#') !== 0 ? '#' : '') . $this-&amp;gt;params['close'];}&lt;br /&gt;        if(isset($this-&amp;gt;params['&lt;wbr&gt;&lt;/wbr&gt;target'])) {$this-&amp;gt;params['target'] = (strpos($this-&amp;gt;params['target'&lt;wbr&gt;&lt;/wbr&gt;], '#') !== 0 ? '#' : '') . $this-&amp;gt;params['target'];}&lt;br /&gt;        if(!isset($this-&amp;gt;params['top']&lt;wbr&gt;&lt;/wbr&gt;)) {$this-&amp;gt;params['top'] = 'center';}&lt;br /&gt;&lt;br /&gt;        if(isset($this-&amp;gt;events['&lt;wbr&gt;&lt;/wbr&gt;onBeforeLoad'])) {$this-&amp;gt;events['onBeforeLoad'] = (strpos($this-&amp;gt;events['&lt;wbr&gt;&lt;/wbr&gt;onBeforeLoad'], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;events['onBeforeLoad'];&lt;wbr&gt;&lt;/wbr&gt;}&lt;br /&gt;        if(isset($this-&amp;gt;events['&lt;wbr&gt;&lt;/wbr&gt;onLoad'])) {$this-&amp;gt;events['onLoad'] = (strpos($this-&amp;gt;events['onLoad'&lt;wbr&gt;&lt;/wbr&gt;], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;events['onLoad'];}&lt;br /&gt;        if(isset($this-&amp;gt;events['&lt;wbr&gt;&lt;/wbr&gt;onBeforeClose'])) {$this-&amp;gt;events['onBeforeClose'&lt;wbr&gt;&lt;/wbr&gt;] = (strpos($this-&amp;gt;events['&lt;wbr&gt;&lt;/wbr&gt;onBeforeClose'], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;events['onBeforeClose']&lt;wbr&gt;&lt;/wbr&gt;;}&lt;br /&gt;        if(isset($this-&amp;gt;events['&lt;wbr&gt;&lt;/wbr&gt;onClose'])) {$this-&amp;gt;events['onClose'] = (strpos($this-&amp;gt;events['&lt;wbr&gt;&lt;/wbr&gt;onClose'], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;events['onClose'];}&lt;br /&gt;&lt;br /&gt;        if(!isset($this-&amp;gt;maskParams['&lt;wbr&gt;&lt;/wbr&gt;closeSpeed'])) {$this-&amp;gt;maskParams['&lt;wbr&gt;&lt;/wbr&gt;closeSpeed'] = 'normal';}&lt;br /&gt;        if(!isset($this-&amp;gt;maskParams['&lt;wbr&gt;&lt;/wbr&gt;color'])) {$this-&amp;gt;maskParams['color'] = '#000000';}&lt;br /&gt;        if(!isset($this-&amp;gt;maskParams['&lt;wbr&gt;&lt;/wbr&gt;loadSpeed'])) {$this-&amp;gt;maskParams['loadSpeed'&lt;wbr&gt;&lt;/wbr&gt;] = 'normal';}&lt;br /&gt;        if(!isset($this-&amp;gt;maskParams['&lt;wbr&gt;&lt;/wbr&gt;maskId'])) {$this-&amp;gt;maskParams['maskId'] = '#overlay-mask';}&lt;br /&gt;        if(!isset($this-&amp;gt;maskParams['&lt;wbr&gt;&lt;/wbr&gt;opacity'])) {$this-&amp;gt;maskParams['opacity'] = 0.5;}&lt;br /&gt;        if(!isset($this-&amp;gt;maskParams['&lt;wbr&gt;&lt;/wbr&gt;zIndex'])) {$this-&amp;gt;maskParams['zIndex'] = 99;}&lt;br /&gt;&lt;br /&gt;        if(isset($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeLoad'])) {$this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeLoad'] = (strpos($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeLoad'], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeLoad'];}&lt;br /&gt;        if(isset($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onLoad'])) {$this-&amp;gt;maskEvents['onLoad'] = (strpos($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onLoad'], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;maskEvents['onLoad'];}&lt;br /&gt;        if(isset($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeClose'])) {$this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeClose'] = (strpos($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeClose'], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onBeforeClose'];}&lt;br /&gt;        if(isset($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onClose'])) {$this-&amp;gt;maskEvents['onClose'] = (strpos($this-&amp;gt;maskEvents['&lt;wbr&gt;&lt;/wbr&gt;onClose'], 'js:') !== 0 ? 'js:' : '') . $this-&amp;gt;maskEvents['onClose'];}&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;/div&gt;&lt;div&gt;&lt;h5 style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;registerScriptFiles&lt;/span&gt;&lt;/h5&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Ahhoz, hogy a widget kinézetét befolyásolni tudjuk, érdemes hozzáfűzni egy CSS állományt, amiben kényelmesen meg tudjuk határozni a megjelenését. Ezen kívül a jQuery Tools-nak szüksége van magára a jQuery-re, illetve saját magára. Ezeket az állományokat "pakolja" ki ez a metódus a megjelenítendő HTML lapba.&lt;/span&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    protected function registerScriptFiles() {&lt;br /&gt;        $url = $this-&amp;gt;getAssetsUrl();&lt;br /&gt;&lt;br /&gt;        $cs = $this-&amp;gt;getClientScript();&lt;br /&gt;        $cs-&amp;gt;registerCssFile($url . '/css/' . 'overlay.css');&lt;br /&gt;&lt;br /&gt;        $cs-&amp;gt;registerCoreScript('&lt;wbr&gt;&lt;/wbr&gt;jquery');&lt;br /&gt;        $cs-&amp;gt;registerScriptFile($url . '/js/' . 'jquery-tools.min.js', CClientScript::POS_HEAD);&lt;br /&gt;&lt;br /&gt;        unset($cs);&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;h5 style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;registerClientScript&lt;/span&gt;&lt;/h5&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;E metódus egyetlen faladata az, hogy a "legyárott" javascript-et befűzze az oldal végére.&lt;/span&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    protected function registerClientScript() {&lt;br /&gt;        if(!isset($this-&amp;gt;_script)) {&lt;br /&gt;            return false;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        $cs = $this-&amp;gt;getClientScript();&lt;br /&gt;&lt;br /&gt;        $cs-&amp;gt;registerScript(__CLASS__ . '#' . $this-&amp;gt;_id, $this-&amp;gt;getScript(), CClientScript::POS_READY);&lt;br /&gt;&lt;br /&gt;        unset($cs);&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;h5 style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;renderBegin&lt;/span&gt;&lt;/h5&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;És elérkeztünk végre ahhoz a ponthoz, amikor a beállítások, alapértelmezett értékek és egyéb előkészületek után végre megjeleníthetjük magát a kész widget-et. Első lépésben kiírjuk a megjelenítő pufferbe a widget kezdő részét.&lt;/span&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    protected function renderBegin() {&lt;br /&gt;        ob_start();&lt;br /&gt;        ob_implicit_flush(false);&lt;br /&gt;        echo "\n" . CHtml::openTag($this-&amp;gt;tagName, $this-&amp;gt;htmlOptions) . "\n";&lt;br /&gt;        echo CHtml::tag('div', array('class' =&amp;gt; 'close'), 'X', true) . "\n";&lt;br /&gt;        if(null !== $this-&amp;gt;title || '' !== $this-&amp;gt;title) {&lt;br /&gt;            echo CHtml::tag('h3', array('class' =&amp;gt; 'title'), CHtml::encode($this-&amp;gt;title), true);&lt;br /&gt;        }&lt;br /&gt;        $this-&amp;gt;_openTag = ob_get_contents();&lt;br /&gt;        ob_clean();&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;h5 style="font-family: 'Times New Roman';"&gt;&lt;/h5&gt;&lt;h5 style="font-family: 'Times New Roman';"&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;renderEnd&lt;/span&gt;&lt;/h5&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;A megjelenítés második része pedig a widget tartalmának és végének kiírása és a puffer egészének kiküldése a böngészőbe.&lt;/span&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace; font-size: x-small;"&gt;    ...&lt;br /&gt;    protected function renderEnd() {&lt;br /&gt;        $content = ob_get_clean();&lt;br /&gt;        echo $this-&amp;gt;_openTag;&lt;br /&gt;        echo trim($content);&lt;br /&gt;        echo "\n" . CHtml::closeTag($this-&amp;gt;&lt;wbr&gt;&lt;/wbr&gt;tagName) . '' . "\n";&lt;br /&gt;    }&lt;br /&gt;    ...&lt;/span&gt;&lt;/pre&gt;&lt;pre style="font-family: 'Times New Roman';"&gt;&lt;/pre&gt;&lt;pre style="font-family: 'Times New Roman';"&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;Hú, ez jó hosszú volt eddig, és még nincs vége a dolognak. Odáig jutottunk, hogy elkészült az alap widget, amiből majd származtatni fogjuk az Overlay egyes változatait. Ahogy azt illik, nézzük meg a teljes kódot egyben!&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;&lt;/span&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman';"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://yiiradiio.mehesz.net/downloads/jQTBaseOverlay.php"&gt;protected/components/widgets/jQTBaseOverlay.php&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yiiradiio.mehesz.net/downloads/overlay.css"&gt;protected/components/widgets/assets/css/overlay.css&lt;/a&gt;&lt;br /&gt;&lt;a href="http://yiiradiio.mehesz.net/downloads/jquery-tools.min.js"&gt;protected/components/widgets/assets/js/jquery-tools.min.js&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"Mára ennyit a tudomány, és a technika érdekességeiből" - szokták volt mondogatni anno a Delta c. műsorban.&lt;br /&gt;&lt;br /&gt;Tudom, kicsit hosszúra sikeredett a dolog, de talán akad majd egy-két hasznos információ benne, amiért érdemes végigolvasni!&lt;br /&gt;&lt;br /&gt;A következő részben már olyan widget-et fogunk készíteni, ami ebből származik, és ígérem, sokkal rövidebb lesz a kód is, és a leírás is, ami hozzá tartozik.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-1800615527124873478?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/1800615527124873478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/03/nosza-irjunk-widget-et-tyuklepesrol.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1800615527124873478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1800615527124873478'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/03/nosza-irjunk-widget-et-tyuklepesrol.html' title='Nosza, írjunk widget-et! (tyúklépésről tyúklépésre)'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-1509204432640328032</id><published>2011-03-08T01:00:00.000-08:00</published><updated>2011-03-08T01:00:08.623-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nézet'/><category scheme='http://www.blogger.com/atom/ns#' term='urlManager'/><category scheme='http://www.blogger.com/atom/ns#' term='kütyü'/><category scheme='http://www.blogger.com/atom/ns#' term='vezérlő'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='modell'/><title type='text'>MVC Model-View-Controller avagy Modell-Nézet-Vezérlő</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;Model-View-Controller (MVC)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A Yii a &lt;b&gt;model-view-controller&lt;/b&gt; (MVC / modell-nézet-kontroller/vezérlő) tervezési&amp;nbsp;mintát valósítja meg, ami webprogramozás terén széleskörűen alkalmazott. Az MVC&amp;nbsp;célja elválasztani az üzleti logikát a felhasználói felülettel kapcsolatos&amp;nbsp;elgondolásoktól oly módon, hogy a fejlesztők minél könnyebben változtathassák&amp;nbsp;meg az egyes részeket anélkül, hogy a többire hatással lennének. Az MVC mintában&lt;br /&gt;a &lt;b&gt;modell&lt;/b&gt; képviseli az információt (adatot) és az üzleti logikát; a &lt;b&gt;nézet&lt;/b&gt;&amp;nbsp;tartalmazza a felhasználói felület elemeit, úgy mint szövegek, űrlapok;&amp;nbsp;a &lt;b&gt;kontroller/vezérlő&lt;/b&gt; pedig kezeli a modell és a nézet közti párbeszédet.&lt;br /&gt;&lt;br /&gt;Az MVC mellett a Yii a '&lt;b&gt;front-controller&lt;/b&gt;'-t, más néven alkalmazást, is bevezeti,&amp;nbsp;ami a felhasználói kérések feldolgozásához biztosít végrehajtási környezetet.&amp;nbsp;Az alkalmazás feloldja a felhasználói kérést, majd továbbítja a megfelelő&amp;nbsp;kontrollernek további feldolgozásra.&lt;br /&gt;&lt;br /&gt;A következő ábra egy Yii alkalmazás statikus felépítését mutatja:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Egy Yii alkalmazás statikus felépítése&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.yiiframework.com/tutorial/image?type=guide&amp;amp;version=1.1&amp;amp;lang=en&amp;amp;file=structure.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.yiiframework.com/tutorial/image?type=guide&amp;amp;version=1.1&amp;amp;lang=en&amp;amp;file=structure.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Egy tipikus munkafolymat&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A következő ábra egy tipikus munkafolyamatot mutat, aminek során a Yii alklamzás&amp;nbsp;egy felhasználói kérést kezel:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;Egy Yii alklamazás tipikus munkafolyamata&lt;/i&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.yiiframework.com/tutorial/image?type=guide&amp;amp;version=1.1&amp;amp;lang=en&amp;amp;file=flow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.yiiframework.com/tutorial/image?type=guide&amp;amp;version=1.1&amp;amp;lang=en&amp;amp;file=flow.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;1.&lt;/span&gt; A felhasználó kérést intéz a következő URL-lel `&lt;a href="http://www.example.com/index.php?r=post/show&amp;amp;id=1"&gt;http://www.example.com/index.php?r=post/show&amp;amp;id=1&lt;/a&gt;` a webszerver pedig a kérést&amp;nbsp;kezelendő, végrehajtja a rendszertöltő `index.php` szkriptet.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;span class="Apple-style-span" style="color: red;"&gt; 2.&lt;/span&gt; A rendszertöltő szkript létrehoz egy &lt;a href="http://yiiframework.com/doc/guide/basics.application"&gt;alkalmazás&lt;/a&gt;&amp;nbsp;példányt, és futtatja.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;3.&lt;/span&gt; Az alkalmazás részletes információt kap a felhasználói kérésről a `&lt;b&gt;request&lt;/b&gt;`&amp;nbsp;nevű &lt;a href="http://yiiframework.com//doc/guide/basics.application#application-component"&gt;alkalmazás komponens&lt;/a&gt;-től.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;4.&lt;/span&gt; Az alklamazás meghatározza a kért &lt;a href="http://yiiframework.com/doc/guide/basics.controller"&gt;kontroller&lt;/a&gt;-t&amp;nbsp;és &lt;a href="http://yiiframework.com/doc/guide/basics.controller#action"&gt;tevékenységet&lt;/a&gt; egy `&lt;b&gt;urlManager&lt;/b&gt;` nevű&amp;nbsp;alkalmazás komponens segítségével. A jelenlegi példában ez a `&lt;b&gt;post&lt;/b&gt;` kontrollert&amp;nbsp;jelenti, ami a `&lt;b&gt;PostController&lt;/b&gt;` osztályra hivatkozik; a tevékenység pedig `&lt;b&gt;show&lt;/b&gt;`,&amp;nbsp;aminek a tényleges jelentését a kontroller határozza meg.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;5. &lt;/span&gt;Az alkalmazás példányosítja a kért kontrollert, hogy a továbbiakban kezelje&amp;nbsp;a felhasználói kérést. A kontroller meghatározza, hogy a `&lt;b&gt;show&lt;/b&gt;` tevékenység a&amp;nbsp;kontroller osztályának `&lt;b&gt;actionShow&lt;/b&gt;` metódusára vonatkozik. Ezek után a&amp;nbsp;tevékenységhez kapcsolódó szűrőket hoz létre (pl.: hozzáférés ellenőrzés, benchmarking).&amp;nbsp;A tevékenység végrehajtódik, ha a szűrők ezt engedélyezik.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;6. &lt;/span&gt;A tevékenység beolvassa az adatbázisból az `&lt;b&gt;1&lt;/b&gt;`-es &lt;b&gt;ID&lt;/b&gt;-jű `&lt;b&gt;Post&lt;/b&gt;`&amp;nbsp;&lt;a href="http://yiiframework.com/doc/guide/basics.model"&gt;modell&lt;/a&gt;-t.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;7.&lt;/span&gt; A tevékenység lefordítja a `&lt;b&gt;show&lt;/b&gt;` nevű &lt;a href="http://yiiframework.com/doc/guide/basics.view"&gt;nézet&lt;/a&gt;-et&amp;nbsp;a megadott `&lt;b&gt;Post&lt;/b&gt;` modellel.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;8. &lt;/span&gt;A nézet kiolvassa és megjeleníti a `&lt;b&gt;Post&lt;/b&gt;` modell tulajdonságait.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;9.&lt;/span&gt; A nézet végrehajt néhány &lt;a href="http://yiiframework.com/doc/guide/basics.view#widget"&gt;kütyü&lt;/a&gt;-t.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;10.&lt;/span&gt; A nézetfordítási eredmény beillesztésre kerül az&amp;nbsp;&lt;a href="http://yiiframework.com/doc/guide/basics.view#layout"&gt;elrendezés&lt;/a&gt;-be.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;11.&lt;/span&gt; A tevékenység befejezi a nézet fordítást és az eredményt megjeleníti a&amp;nbsp;felhasználónak.&lt;br /&gt;&lt;br /&gt;Eredeti: &lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc"&gt;http://www.yiiframework.com/doc/guide/1.1/en/basics.mvc&lt;/a&gt;&lt;br /&gt;Fordította: &lt;a href="http://www.blogger.com/profile/08151572304720581146"&gt;Endyl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-1509204432640328032?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/1509204432640328032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/03/mvc-model-view-controller-avagy-modell.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1509204432640328032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/1509204432640328032'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/03/mvc-model-view-controller-avagy-modell.html' title='MVC Model-View-Controller avagy Modell-Nézet-Vezérlő'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6180435830999488565</id><published>2011-02-22T01:00:00.000-08:00</published><updated>2011-02-22T01:00:11.220-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='file feltöltés'/><category scheme='http://www.blogger.com/atom/ns#' term='modell'/><title type='text'>File feltöltés Modellen keresztül</title><content type='html'>Először vegyünk fel egy új paramétert a &lt;b&gt;Modell&lt;/b&gt; osztályunkban, ahol a file nevét fogjuk tárolni (a modellünk lehet &lt;b&gt;Form&lt;/b&gt; vagy &lt;b&gt;Active Record&lt;/b&gt; osztály is). Ezek után állítsunk be egy &lt;a href="http://yiihun.blogspot.com/2011/01/egy-modell-validalasi-esetei.html"&gt;Validálási Szabályt&lt;/a&gt;, hogy &amp;nbsp;biztosak lehessünk abban, hogy a felhasználó csak meghatározott kiterjesztésű file-okat tölthet fel.&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=tU1kRqxc"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Majd a &lt;b&gt;Kontroller&lt;/b&gt; osztályunkban készítsük el azt a funkciót (&lt;i&gt;action&lt;/i&gt;), ami a &lt;b&gt;form&lt;/b&gt;-unk megjelenítéséért és a felhasználó által küldött adatok összegyűjtéséért lesz felelős:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=6MFptnK9"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Végül pedig a &lt;b&gt;Nézet&lt;/b&gt;ünkben állítsuk be a megfelelő file-feltöltő mezőt. (Megj: az &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;enctype&lt;/span&gt;&amp;nbsp;is fontos!)&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=2SgQhuxQ"&gt;&lt;/script&gt;&lt;br /&gt;Eredeti cikk:&amp;nbsp;&lt;a href="http://www.yiiframework.com/wiki/2/"&gt;http://www.yiiframework.com/wiki/2/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6180435830999488565?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6180435830999488565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/02/file-feltoltes-modellen-keresztul.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6180435830999488565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6180435830999488565'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/02/file-feltoltes-modellen-keresztul.html' title='File feltöltés Modellen keresztül'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-954901208884773446</id><published>2011-02-08T09:32:00.000-08:00</published><updated>2011-02-08T09:32:21.459-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP5'/><category scheme='http://www.blogger.com/atom/ns#' term='Telepítés'/><category scheme='http://www.blogger.com/atom/ns#' term='Apache'/><title type='text'>Telepítés</title><content type='html'>&lt;span class="Apple-style-span" style="font-size: large;"&gt;A Yii telepítése a következő két lépésből áll:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A &lt;b&gt;Yii keretrendszer&lt;/b&gt; &lt;b&gt;letöltése&lt;/b&gt; a &lt;a href="http://www.yiiframework.com/"&gt;http://www.yiiframework.com&lt;/a&gt;-ról.&lt;/li&gt;&lt;li&gt;A letöltött fájl &lt;b&gt;kicsomagolása&lt;/b&gt; egy webről elérhető könyvtárba.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;b&gt;Tipp&lt;/b&gt;: Nem feltétlenül szükséges a Yii-t egy webről eléhető könyvtárba&amp;nbsp;telepíteni. Minden Yii alkalmazásnak van egy belépési parancsfájlja és gyakorlatilag&amp;nbsp;ez az egyetlen fájl, amit elérhetővé kell tenni web felhasználók számára.&lt;br /&gt;&lt;br /&gt;A többi&amp;nbsp;&lt;b&gt;PHP&lt;/b&gt; parancsfájl, beleértve a Yii-hez tartozókat, jobb, ha nem elérhető a webről, mivel&amp;nbsp;támadás célpontjává válhatnak.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Követelmények&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A Yii telepítése után célszerű megbizonyosodni arról, hogy webszerverünk teljesít&amp;nbsp;minden követelményt, ami a Yii használatához szükséges. Ez könnyen megtehető a&amp;nbsp;követelmény-ellenőrző parancsfájl böngészőn keresztüli futtatásával, mely a&amp;nbsp;következő URL-en érhető el:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://hostname/path/to/yii/requirements/index.php"&gt;http://hostname/path/to/yii/requirements/index.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A Yii által támasztott alapkövetelmény egy webszerver, mely rendelkezik PHP &lt;b&gt;5.1.0&lt;/b&gt;&amp;nbsp;(vagy későbbi) támogatással. A Yii tesztelve lett &lt;a href="http://httpd.apache.org/"&gt;http://httpd.apache.org&lt;/a&gt;-rel&amp;nbsp;&lt;b&gt;Windows&lt;/b&gt; és &lt;b&gt;Linux&lt;/b&gt; operációs rendszereken. &amp;nbsp;Minden bizonnyal más webszervereken is&amp;nbsp;futtatható, feltéve, hogy rendelkezik &lt;b&gt;PHP 5&lt;/b&gt; támogatással.&lt;br /&gt;&lt;br /&gt;Eredeti:&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/quickstart.installation"&gt;http://www.yiiframework.com/doc/guide/1.1/en/quickstart.installation&lt;/a&gt;&lt;br /&gt;Fordította: &lt;a href="http://www.blogger.com/profile/08151572304720581146"&gt;Endyl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-954901208884773446?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/954901208884773446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/02/telepites.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/954901208884773446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/954901208884773446'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/02/telepites.html' title='Telepítés'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-870508400039355261</id><published>2011-01-25T17:45:00.000-08:00</published><updated>2011-01-26T16:26:59.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='oop'/><title type='text'>Mi is a Yii?</title><content type='html'>A &lt;b&gt;Yii&lt;/b&gt; egy nagyteljesítményű, komponens alapú &lt;b&gt;PHP&lt;/b&gt; keretrendszer nagyszabású&lt;br /&gt;webalkalmazások fejlesztéséhez. Maximális újrahasznosíthatóságot tesz lehetővé&lt;br /&gt;a webprogramozás terén, és a fejlesztési folyamatot is jelentősen meggyorsítja.&lt;br /&gt;A &lt;b&gt;Yii&lt;/b&gt; név (ejtsd: angolosan `Yee` vagy fonetikusan `[ji:]`) a következő szavakból&lt;br /&gt;ered: *easy (egyszerű)*, *efficient (hatékony)* és *extensible (kiterjeszthető)*.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Követelmények&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Egy &lt;b&gt;Yii&lt;/b&gt; alapú webalkalmazás futtatásához egy webszerverre van szükség, mely&lt;br /&gt;rendelkezik &lt;b&gt;PHP 5.1.0&lt;/b&gt; (vagy későbbi) támogatással.&lt;br /&gt;&lt;br /&gt;Azoknak a fejlesztőknek, akik &lt;b&gt;Yii&lt;/b&gt;-vel akarnak dolgozni, az objektum-orientált&lt;br /&gt;programozás (&lt;b&gt;OOP&lt;/b&gt;) megértése meglehetősen hasznosnak bizonyul, mivel a &lt;b&gt;Yii&lt;/b&gt; egy&lt;br /&gt;tisztán &lt;b&gt;OOP&lt;/b&gt; keretrendszer.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Mire jó a Yii?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Yii&lt;/b&gt; egy általános webprogramozási keretrendszer, ami voltaképpen felhasználható&lt;br /&gt;bármilyen webalkalmazás fejlesztéséhez. Mivel könnyűsúlyú (light-weighted) és&lt;br /&gt;kifinomult gyorsítótárazási megoldásokat nyújt, kifejezetten alkalmas nagy forgalmú&lt;br /&gt;alkalmazások, úgy mint portálok, fórumok, tartalomkezelők (&lt;b&gt;CMS&lt;/b&gt;), e-kereskedelmi&lt;br /&gt;rendszerek, stb. fejlesztésére.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;A Yii összehasonlítva más keretrendszerekkel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mint a legtöbb &lt;b&gt;PHP&lt;/b&gt; keretrendszer, a &lt;b&gt;Yii&lt;/b&gt; egy &lt;b&gt;MVC&lt;/b&gt; kertrendszer.&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Yii&lt;/b&gt; felülmúlja a többi a keretrendszert a következőkben: hatékony, képességekben&lt;br /&gt;gazdag, és világosan dokumentált. A &lt;b&gt;Yii&lt;/b&gt; a kezdektetől fogva komoly weblakalmazások&lt;br /&gt;fejlesztésére lett tervezve. Nem egy projekt mellékterméke vagy netán harmadik féltől&lt;br /&gt;származó kódok összefércelt változata, hanem a szerzők webalkalmazások fejlesztésében&lt;br /&gt;és vizsgálatában szerzett tekintélyes tapasztalatának eredménye és a legnépszerűbb&lt;br /&gt;webprogramozási keretrendszerek és alkalmazások tükröződése.&lt;br /&gt;&lt;br /&gt;Eredeti:&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/guide/1.0/en/quickstart.what-is-yii"&gt;http://www.yiiframework.com/doc/guide/1.0/en/quickstart.what-is-yii&lt;/a&gt;&lt;br /&gt;Fordította: &lt;a href="http://www.blogger.com/profile/08151572304720581146"&gt;Endyl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-870508400039355261?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/870508400039355261/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/01/mi-is-yii.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/870508400039355261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/870508400039355261'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/01/mi-is-yii.html' title='Mi is a Yii?'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6613489974742493653</id><published>2011-01-21T06:03:00.000-08:00</published><updated>2011-01-21T06:03:23.848-08:00</updated><title type='text'>Yii Radiio 38. adás</title><content type='html'>Halihó,&lt;br /&gt;&lt;br /&gt;Mivel az új &lt;a href="http://yiiradiio.mehesz.net/"&gt;Yii Radiio&lt;/a&gt; oldalon már van automatikus fordítás (igen, magyarra is!) ezért nem fogom fordítgatni az egyes részeket, csak a &lt;a href="http://twitter.com/yiihun"&gt;Twitter&lt;/a&gt;-en keresztül osztom majd meg az új linket.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6613489974742493653?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6613489974742493653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/01/yii-radiio-38-adas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6613489974742493653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6613489974742493653'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/01/yii-radiio-38-adas.html' title='Yii Radiio 38. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6083685428121590064</id><published>2011-01-17T10:35:00.000-08:00</published><updated>2011-01-17T10:35:13.691-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='adatbázis'/><category scheme='http://www.blogger.com/atom/ns#' term='migrációk'/><category scheme='http://www.blogger.com/atom/ns#' term='query builder. db'/><title type='text'>Itt a Yii 1.1.6-os</title><content type='html'>Végre valahára itt van az 1.1.6-os változat. Személy szerint már nagyon vártam leginkább a beépített &lt;b&gt;Adatbázis Migrációk&lt;/b&gt; miatt. Csak nagyjából nézzük mi van az új verzióban:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Újdonság:&lt;/b&gt;&lt;br /&gt;- Adatbázis Migrációk&lt;br /&gt;- &lt;strong&gt;DB Query&lt;/strong&gt; építő (erről majd később próbálok valamit összerakni)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Változott:&lt;/b&gt;&lt;br /&gt;- A filterek használata esetén a &lt;b&gt;CGridView&lt;/b&gt; az első oldallal tér vissza.&lt;br /&gt;- A &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;&lt;span style="color: #38761d;"&gt;$live&lt;/span&gt;&lt;/span&gt; paraméter változtatható az &lt;span style="color: #38761d;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;$htmlOptions&lt;/span&gt;&lt;/span&gt;-on keresztül (&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;CHtml::clientChange()&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Javítások:&lt;/b&gt;&lt;br /&gt;- &lt;b&gt;PHP&lt;/b&gt; hibaüzenet &lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;&lt;span style="color: #38761d;"&gt;CJuiDatePicker::$name&lt;/span&gt;&lt;/span&gt; használatánál.&lt;br /&gt;- &lt;span style="color: #38761d;"&gt;CActiveForm&lt;/span&gt; felesleges&amp;nbsp;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;, &amp;quot;Courier&amp;quot;, monospace;"&gt;&lt;span style="color: blue;"&gt;focus()&lt;/span&gt;&lt;/span&gt; &lt;em&gt;JavaScript&lt;/em&gt; kódja.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A változtatások teljes listáját itt találhatjátok: &lt;a href="http://www.yiiframework.com/files/CHANGELOG-1.1.6.txt"&gt;http://www.yiiframework.com/files/CHANGELOG-1.1.6.txt&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6083685428121590064?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6083685428121590064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/01/itt-yii-116-os.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6083685428121590064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6083685428121590064'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/01/itt-yii-116-os.html' title='Itt a Yii 1.1.6-os'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-7024222735647118699</id><published>2011-01-11T01:00:00.000-08:00</published><updated>2011-01-11T01:00:01.696-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='űrlap ellenőrzés'/><category scheme='http://www.blogger.com/atom/ns#' term='validálási esetek'/><category scheme='http://www.blogger.com/atom/ns#' term='scenarios'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='validation'/><category scheme='http://www.blogger.com/atom/ns#' term='validálás'/><title type='text'>Egy Modell Validálási Esetei</title><content type='html'>Ha valakinek van ötlete, hogy lehetne a &lt;i&gt;Validation Scenarios&lt;/i&gt;-t szépen magyarra fordítani, ne kíméljen (talán &lt;i&gt;Értékellenőrzési Forgatókönyv&lt;/i&gt;-nek vagy &lt;em&gt;Szabályozási Szintek&lt;/em&gt;-nek?).&lt;br /&gt;&lt;br /&gt;Az &lt;b&gt;1.0.2&lt;/b&gt;-es megjelenése óta lehetőségünk van különböző &lt;b&gt;Validálási Eseteket&lt;/b&gt; (&lt;i&gt;Validation Scenario&lt;/i&gt;) beállítani modelljeinkhez. Ez nagyon hasznos olyan esetekben, amikor az alkalmazásunk több pontján lehet/kell egy modellen keresztül adatot bekérni a felhasználótól. &lt;br /&gt;&lt;br /&gt;Például egy új felhasználó regisztrálásánál valószínűleg a '&lt;i&gt;felhasználónév&lt;/i&gt;' az '&lt;i&gt;email cím&lt;/i&gt;' és a '&lt;i&gt;jelszó&lt;/i&gt;' mezők kötelezőek, míg az '&lt;i&gt;elfelejtett jelszó&lt;/i&gt;' oldalon talán csak az '&lt;i&gt;email cím&lt;/i&gt;'. Itt egyből látszik, hogy ha mind a három mező kötelező alap esetben, akkor az '&lt;i&gt;elfelejtett jelszó&lt;/i&gt;' funkció nem igazán fog működni, hiszen ha felhasználóbarátok akarunk maradni, akkor nem fogjuk bekérni sem a felhasználónevet sem pedig a jelszót (amit úgyis elfelejtett a kedves kis felhasználó ;) )&lt;br /&gt;&lt;br /&gt;Tehát hasonló problémákra kínál tökéletes megoldást a &lt;b&gt;Validálási Esetek&lt;/b&gt;&amp;nbsp; használata amiket nagyon egyszerűen állíthatunk be az '&lt;i&gt;on&lt;/i&gt;' paraméterrel a különböző modell szabályokhoz (&lt;i&gt;rules&lt;/i&gt;). Az '&lt;i&gt;on&lt;/i&gt;' paraméter talán már ismerős lehet adatbevitelnél (&lt;i&gt;insert&lt;/i&gt;) vagy frissítésnél (&lt;i&gt;update&lt;/i&gt;) attól függően, hogy melyik mentést (&lt;i&gt;save&lt;/i&gt;) használjuk. Elég gyakran ez a kettő nem elég sajnos, viszont ennek az új megoldásnak köszönhetően akarmennyit készíthetünk. Nézzünk is egy példát:&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/model/User.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=ScPXQFBM"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Ezekkel a beállításokkal &lt;b&gt;Yii&lt;/b&gt; már tudni fogja, hogy mikor melyik &lt;b&gt;Szabály&lt;/b&gt; fusson le. A példa kedvéért persze betettünk egy-két extra szabályt is. Remélhetőleg a megjegyzések elolvasása után már jobban érthető, hogy mire is jó ez az egész. Az összehasonlító (&lt;i&gt;compare&lt;/i&gt;) szabálynál látni, hogy több &lt;b&gt;Szintet&lt;/b&gt; is meg lehet adni vesszővel elválasztva (pl: '&lt;i&gt;register&lt;/i&gt;,&lt;i&gt;update&lt;/i&gt;'). &lt;br /&gt;&lt;br /&gt;Tehát ha egy modell ellenőrzését (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CModel::validate()&lt;/span&gt;) szeretnénk elvégezni, egyszerűen adjuk át a &lt;b&gt;Validálási Esetet&lt;/b&gt; paraméterként:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=SwGjn3tA"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Az eredeti cikk, &lt;b&gt;Jonah&lt;/b&gt; által:&amp;nbsp;&lt;a href="http://php-thoughts.cubedwater.com/2009/validation-scenarios/"&gt;http://php-thoughts.cubedwater.com/2009/validation-scenarios/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_4oB_PV43cgw/TSPmSMnNEUI/AAAAAAAAIMU/P_xbrO_y-jQ/s1600/amodel.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_4oB_PV43cgw/TSPmSMnNEUI/AAAAAAAAIMU/P_xbrO_y-jQ/s1600/amodel.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-7024222735647118699?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/7024222735647118699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2011/01/egy-modell-validalasi-esetei.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7024222735647118699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7024222735647118699'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2011/01/egy-modell-validalasi-esetei.html' title='Egy Modell Validálási Esetei'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_4oB_PV43cgw/TSPmSMnNEUI/AAAAAAAAIMU/P_xbrO_y-jQ/s72-c/amodel.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-148397650831105253</id><published>2010-12-28T01:00:00.000-08:00</published><updated>2010-12-28T05:36:59.081-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='egységteszt'/><category scheme='http://www.blogger.com/atom/ns#' term='teszt'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><category scheme='http://www.blogger.com/atom/ns#' term='phpunit'/><title type='text'>Auto TDD  avagy PHPUnit magától</title><content type='html'>Ez a kis tipp nemcsak &lt;b&gt;Yii&lt;/b&gt; fejlesztőknek ajánlott, hanem akárkinek aki a &lt;b&gt;PHPUnit&lt;/b&gt;-ot használ &lt;b&gt;Linux&lt;/b&gt;-os környezetben. (elvileg Apple-lel is működnie kell, de nem próbáltam!) -- &lt;span class="Apple-style-span" style="color: red;"&gt;&lt;b&gt;Javítás&lt;/b&gt;: NEM MŰKÖDIK Apple-lel!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A következő egyszerű utasítással 15 másodpercenként lefuttathatjuk &lt;i&gt;egységtesztjeinket&lt;/i&gt;. (&lt;i&gt;protected/tests&lt;/i&gt;)&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;watch -n 15 -d phpunit unit/&lt;/span&gt;&lt;/blockquote&gt;Az én képernyőm valahogy így néz ki (bal sarokban fut a teszt!)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_4oB_PV43cgw/TRZf-3Xh9EI/AAAAAAAAIME/oHu7k5jyXf0/s640/auto-tdd.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://2.bp.blogspot.com/_4oB_PV43cgw/TRZf-3Xh9EI/AAAAAAAAIME/oHu7k5jyXf0/s400/auto-tdd.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_4oB_PV43cgw/TRamGGYcr2I/AAAAAAAAILs/7SduHxm54qc/s1280/auto-tdd_big.jpg"&gt;Katt nagyobb képhez!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nagyobb tesztek esetén persze lehet finomítani, hogy csak 1 teszt file fusson .., stb.&lt;br /&gt;&lt;br /&gt;Az eredeti cikk itt található:&amp;nbsp;&lt;a href="http://www.yiiframework.com/wiki/124/auto-tdd-how-to-auto-run-phpunit/"&gt;http://www.yiiframework.com/wiki/124/auto-tdd-how-to-auto-run-phpunit/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-148397650831105253?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/148397650831105253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/12/auto-tdd-avagy-phpunit-magatol.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/148397650831105253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/148397650831105253'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/12/auto-tdd-avagy-phpunit-magatol.html' title='Auto TDD  avagy PHPUnit magától'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_4oB_PV43cgw/TRZf-3Xh9EI/AAAAAAAAIME/oHu7k5jyXf0/s72-c/auto-tdd.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6988312242383250146</id><published>2010-12-21T01:00:00.000-08:00</published><updated>2010-12-21T01:00:03.381-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='chromephp'/><category scheme='http://www.blogger.com/atom/ns#' term='logging'/><category scheme='http://www.blogger.com/atom/ns#' term='chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='naplózás'/><title type='text'>A ChromePHP használata Yii alatt</title><content type='html'>Ha valakinek valamilyen oknál fogva nem tetszene a &lt;b&gt;Yii&lt;/b&gt; által kínált &lt;a href="http://www.yiiframework.com/doc/guide/1.1/en/topics.logging"&gt;naplózási&lt;/a&gt; (&lt;i&gt;logging&lt;/i&gt;) rendszer, annak jól jöhet ez a kis kiegészítő. Kifejezetten a &lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt; böngészőre készült és &lt;a href="http://www.chromephp.com/"&gt;ChromePHP&lt;/a&gt; a neve.&lt;br /&gt;&lt;br /&gt;Először is installáljuk a magát a &lt;b&gt;ChromePHP&lt;/b&gt; kiegészítőt a böngészőnkre &lt;a href="https://chrome.google.com/extensions/detail/noaneddfkdjfnfdakjjmocngnfkfehhd"&gt;innen&lt;/a&gt;. Majd töltsük le a &lt;a href="http://www.github.com/ccampbell/chromephp"&gt;ChromePHP osztályt&lt;/a&gt;&amp;nbsp;és másoljuk be a ZIP tartalmát a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/vendors&lt;/span&gt; alá. Miután ezzel megvagyunk, módosítsuk a konfigurációs file-unkat (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/config/main.php&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=hzC44pUX"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;És készen is lennénk. A &lt;b&gt;Log &lt;/b&gt;(bejegyzés), &lt;b&gt;Warning&lt;/b&gt;&amp;nbsp;(figyelmeztetés) és &lt;b&gt;Error &lt;/b&gt;(hiba) utasításokat pedig a következő képpen futtathatjuk:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ChromePHP::log('&lt;b&gt;Hello Virág!&lt;/b&gt;');&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ChromePHP::warn('&lt;b&gt;Figyelmeztetés!&lt;/b&gt;');&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ChromePHP::err('&lt;b&gt;Hiba!&lt;/b&gt;');&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Jó naplózgatást ;)&lt;br /&gt;&lt;br /&gt;Az eredeti cikket itt olvashatjátok:&amp;nbsp;&lt;a href="http://www.yiiframework.com/wiki/119/chromephp-for-yii/"&gt;http://www.yiiframework.com/wiki/119/chromephp-for-yii/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;u&gt;ui&lt;/u&gt;: persze csak fejlesztés közben ajánlatos használni!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6988312242383250146?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6988312242383250146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/12/chromephp-hasznalata-yii-alatt.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6988312242383250146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6988312242383250146'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/12/chromephp-hasznalata-yii-alatt.html' title='A ChromePHP használata Yii alatt'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-4239064984966054907</id><published>2010-12-14T10:22:00.000-08:00</published><updated>2010-12-14T11:01:01.434-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MongoDB'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='haml'/><category scheme='http://www.blogger.com/atom/ns#' term='extjs'/><category scheme='http://www.blogger.com/atom/ns#' term='ext4yii'/><category scheme='http://www.blogger.com/atom/ns#' term='html'/><category scheme='http://www.blogger.com/atom/ns#' term='mediaelementjs'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Yii Radiio 37. adás</title><content type='html'>Idei utolsó (&lt;b&gt;37.&lt;/b&gt;) adásunk, valamikor Január közepe-vége fele jövünk vissza, az &lt;b&gt;1.1.6&lt;/b&gt;-os változat megjelenése után.&lt;br /&gt;&lt;br /&gt;Nagyon szépen köszönjük minden hallgatónknak, hogy havonta kétszer figyelmet és időt szentelnek a műsornak, külön köszönet a magyar &lt;a href="http://www.myspace.com/larryhangman"&gt;Larry Hangman&lt;/a&gt; zenekarnak, akik a műsor zenéjét "&lt;i&gt;kölcsönözték&lt;/i&gt;" nekünk.&lt;br /&gt;&lt;br /&gt;Ezen kívül természetesen a &lt;b&gt;Yii keretrendszer&lt;/b&gt; &lt;a href="http://code.google.com/p/yii/people/list"&gt;fejlesztőinek&lt;/a&gt; és szponzorainknak jár köszönet, akik nélkül nem lenne ilyen sikeres a műsor.&lt;br /&gt;&lt;br /&gt;Szponzorunk ebben a hónapban az &lt;a href="http://ext4yii.com/"&gt;Ext4Yii&lt;/a&gt;, akik az &lt;a href="http://www.sencha.com/products/js/"&gt;ExtJS&lt;/a&gt; modul segítségével a &lt;b&gt;Yii&lt;/b&gt; rendszert a "&lt;i&gt;nagycéges-fellegek&lt;/i&gt;" közé segítik.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Nos, tehát, namégegyszer:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Simon Fraser&lt;/b&gt; élményei a és csalódásai avagy &lt;a href="http://journal.simonf.co.uk/yii-with-gii-does-my-work-for-me"&gt;CodeIgniter a Yii ellen&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;-ről már jónéhányszor esett szó, ez egy újabb, talán a legkiforrottabb, kiegészítő a &lt;b&gt;Yii&lt;/b&gt;-hez, &lt;b&gt;Canni&lt;/b&gt; által,&amp;nbsp;&lt;a href="http://www.yiiframework.com/extension/yiimongodbsuite/"&gt;YiiMongoDBSuite&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Jeffrey Winesett&lt;/b&gt; újabb videója, a klasszikus "&lt;a href="http://vimeo.com/17393443"&gt;Hello World!&lt;/a&gt;" megvalósítása.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;TipsTank&lt;/b&gt; mutatja be, hogyan gyorsítsuk fel &lt;b&gt;HTML&lt;/b&gt; és &lt;b&gt;CSS&lt;/b&gt;&amp;nbsp;kódolási technikánkat a &lt;a href="http://tipstank.com/2010/12/05/go-haml-with-yii-using-phamlp/"&gt;PHaml&lt;/a&gt; segítségével.&lt;br /&gt;&lt;br /&gt;Megjelent az &lt;b&gt;Ext4Yii&lt;/b&gt; &lt;a href="http://www.ext4yii.com/blog/main/post/ext4yii-0-7-release.html"&gt;0.7&lt;/a&gt;-es verziója.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mashable.com/2010/11/19/pros-cons-php/"&gt;8 szakember véleménye&lt;/a&gt; (jó és rossz!) a &lt;b&gt;PHP&lt;/b&gt;-ről általában.&lt;br /&gt;&lt;br /&gt;Ugye milyen jó lenne, ha minden böngészővel lehetne &lt;b&gt;HTML5&lt;/b&gt; tag-eket (&lt;i&gt;audio&lt;/i&gt;, &lt;i&gt;video&lt;/i&gt;) használni? Na, most már lehet:&amp;nbsp;&lt;a href="http://mediaelementjs.com/"&gt;http://mediaelementjs.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A hét oldala&lt;/b&gt;:&amp;nbsp;&lt;a href="http://www.realself.com/"&gt;http://www.realself.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Na, és talán a legizgalmasabb dolog ami történt az elmúlt két hétben (szintén a hét oldalával kapcsolatos) ... &lt;b&gt;1.5 millió látogató&lt;/b&gt; egy hónap alatt, avagy &lt;a href="http://erickennedy.org/Drupal-7-Reasons-to-Switch"&gt;7 indok, miért váltsunk Drupal-ról Yii-re&lt;/a&gt;, &lt;b&gt;Eric Kennedy-&lt;/b&gt;től.&lt;br /&gt;&lt;br /&gt;Jó olvasgatást, és kellemes Ünnepeket :)&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;a href="http://yiiradiio.mehesz.net/"&gt;http://yiiradiio.mehesz.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-4239064984966054907?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/4239064984966054907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/12/yii-radiio-37-ad%C3%A1s.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/4239064984966054907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/4239064984966054907'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/12/yii-radiio-37-ad%C3%A1s.html' title='Yii Radiio 37. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-5841738077168542454</id><published>2010-12-07T01:00:00.000-08:00</published><updated>2010-12-07T01:00:01.784-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='felhasznalo'/><category scheme='http://www.blogger.com/atom/ns#' term='yii user'/><category scheme='http://www.blogger.com/atom/ns#' term='authentication'/><title type='text'>Felhasználó kezelés a Yii-User modullal</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://code.google.com/p/yii-user/logo?cct=1277806289" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://code.google.com/p/yii-user/logo?cct=1277806289" /&gt;&lt;/a&gt;&lt;/div&gt;Alap esetben &lt;b&gt;Yii&lt;/b&gt; egy olyan &lt;i&gt;felhasználó&lt;/i&gt; (&lt;i&gt;user&lt;/i&gt;) rendszerrel lát el bennünket, amit éles helyzetben nem nagyon ajánlatos használni. (pl.: &lt;i&gt;felhasználónév = jelszó&lt;/i&gt;). &lt;span class="Apple-style-span" style="font-size: x-small;"&gt;(Persze ez csak példaként van a rendszerben)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ha szeretnénk valami komolyabb, biztonságosabb és adatbázissal támogatott megoldást használni, kétféle lehetőségünk van. Vagy magunk írjuk meg a szükséges kódot, vagy letöltünk egy modult. Ebben az írásban a &lt;b&gt;Yii User&lt;/b&gt; modult szeretném ismertetni. (Tudom, hogy van egy másik &lt;i&gt;Yii User Management&lt;/i&gt;, de &lt;b&gt;Yii User&lt;/b&gt;-nek nemrég jött ki egy újabb verziója &lt;b&gt;Mishamx&lt;/b&gt; klaviatúrájából. Ja,&amp;nbsp;és még egy remek kis logója is van ;)&amp;nbsp;)&lt;br /&gt;&lt;br /&gt;A modul segítségével felhasználóink regisztrálását és kezelését könnyíthetjük meg. Jelenleg a következő funkciók támogatottak:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Felhasználó beléptetése email-lel vagy névvel&lt;/li&gt;&lt;li&gt;Registráció&lt;/li&gt;&lt;li&gt;Felhasználói fiók aktiválással (email-en keresztül)&lt;/li&gt;&lt;li&gt;Saját felhasználói oldal (&lt;i&gt;profile page&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;Adminisztrátorkodás&lt;/li&gt;&lt;li&gt;Mezők kezelése a&lt;i&gt; felhasználói form&lt;/i&gt;-on&lt;/li&gt;&lt;li&gt;Popup Dátum kezelő widget (&lt;i&gt;jQueryUI datepicker&lt;/i&gt;-rel)&lt;/li&gt;&lt;li&gt;File feltöltő widget&lt;/li&gt;&lt;li&gt;Felhasználók kapcsolatai widget&lt;/li&gt;&lt;li&gt;API&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Installálás&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px;"&gt;Csomagoljuk ki a letöltött file-t az &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;project&amp;gt;/protected&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px;"&gt;&amp;nbsp;mappába.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Állítsuk be a modult a config/main.php file-ban a következő képpen:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=SpeHxYA4"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Beállítások&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Az adatbázisunkban készítsük el a modulhoz szükséges táblákat. (a dump file-ok segítségével: schema.mysql.sql és schema.sqlite.sql)&lt;br /&gt;&lt;br /&gt;És végül változtassuk meg a menüt a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/views/layouts/main.php&lt;/span&gt;&amp;nbsp;file-ban:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Tb8PCUWm"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;A részletes leírást és a paraméterek listáját itt találjátok:&amp;nbsp;&lt;a href="http://code.google.com/p/yii-user/w/list"&gt;http://code.google.com/p/yii-user/w/list&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Az eredeti oldalt pedig itt:&amp;nbsp;&lt;a href="http://www.yiiframework.com/extension/yii-user/"&gt;http://www.yiiframework.com/extension/yii-user/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-5841738077168542454?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/5841738077168542454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/12/felhasznalo-kezeles-yii-user-modullal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5841738077168542454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5841738077168542454'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/12/felhasznalo-kezeles-yii-user-modullal.html' title='Felhasználó kezelés a Yii-User modullal'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6941585212252184576</id><published>2010-11-30T01:00:00.000-08:00</published><updated>2010-11-30T01:00:03.606-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crm'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSearch'/><category scheme='http://www.blogger.com/atom/ns#' term='kanban'/><category scheme='http://www.blogger.com/atom/ns#' term='cms'/><category scheme='http://www.blogger.com/atom/ns#' term='chive'/><category scheme='http://www.blogger.com/atom/ns#' term='anti-spam'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='webenabled'/><category scheme='http://www.blogger.com/atom/ns#' term='jcarousell'/><category scheme='http://www.blogger.com/atom/ns#' term='recaptcha'/><title type='text'>Yii Radiio 36. adás</title><content type='html'>&lt;b&gt;Bob Belderbos&lt;/b&gt; mondja el saját szavaival, hogy miért is &lt;a href="http://bobbelderbos.com/2010/11/yii-awesome-php-framework/"&gt;tetszik neki a Yii&lt;/a&gt; ennyire.&lt;br /&gt;&lt;br /&gt;Talán egy éve már, hogy említettük a &lt;b&gt;Chive&lt;/b&gt;-ot, ami a &lt;i&gt;PHPMyAdmin&lt;/i&gt;-t próbálja letaszítani a &lt;i&gt;MySQL-kezelőfelületek&lt;/i&gt; trónjáról, persze mindenki döntse el saját maga. Nemrég jelent meg a &lt;a href="http://blog.fusonic.net/2010/11/announcing-chive-0-4-the-next-gen-mysql-admin/"&gt;0.4&lt;/a&gt;-es változat, ha másért nem is, azért érdemes kipróbálni, mivel &lt;b&gt;Yii&lt;/b&gt;-fel készült.&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://www.yiiframework.com/extension/scrollingnews/"&gt;ScrollingNews&lt;/a&gt; segítségével készíthetünk &lt;i&gt;jQuery&lt;/i&gt;-vel hajtott tartalom lapozgató finomságokat.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Aztech&lt;/b&gt; próbálkozik egy új(abb) fajta &lt;a href="http://www.yiiframework.com/extension/aii-anti-spam-behavior/"&gt;SPAM megelőzéssel&lt;/a&gt;, illetve az ötlet nem új, de &lt;b&gt;Yii&lt;/b&gt; alá most került ilyesmi először. (megj: én mondjuk személy szerint a &lt;a href="http://www.yiiframework.com/extension/recaptcha/"&gt;ReCaptcha&lt;/a&gt;-t használgatom, viszont ehhez nem kell semmit betölteni.)&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Free Open Source Magazine&lt;/b&gt;-ban jelent meg egy cikk a &lt;a href="http://freeopensourcemagazine.com/content/now-building-complex-web-applications-easy-yii"&gt;Yii&lt;/a&gt;-ről.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ryan Lahue&lt;/b&gt; megoldása a "&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;{&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Model} cannot be blank&lt;/span&gt;" &lt;a href="http://blog.ryanlahue.com/2010/11/yii-crud-please-fix-following-input.html"&gt;hiba üzenetre&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Jeff Winesett&lt;/b&gt;, a &lt;b&gt;Yii&lt;/b&gt; könyv írója, indított útjára egy &lt;b&gt;VIMEO&lt;/b&gt; sorozatot: &lt;a href="http://vimeo.com/16953036"&gt;1. rész, Előkészületek&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Larry Ullman&lt;/b&gt; neve már remélem sokaknak ismerősen cseng, a kezdőknek szánt&amp;nbsp;sorozata egyre népszerűbb a &lt;b&gt;Yii&lt;/b&gt;-t használó programozók táborában. Gyakran kérdezgetik is, &lt;a href="http://www.larryullman.com/2010/11/19/what-is-larry-thinking-33-effortless-e-commerce-and-oop/#qa1"&gt;miért éppen a Yii&lt;/a&gt;-t használja. Most végre elmonta :) (megj: a kedvencem - "&lt;i&gt;A keretrendszerek olyanok mint az autók. Mindegyikkel eljutsz ahová menni akarsz, csak az a kérdés, melyikben érzed jól magad.&lt;/i&gt;")&lt;br /&gt;&lt;br /&gt;Végre sikerült az &lt;b&gt;OpenSearch&lt;/b&gt; kereső alkalmazást a &lt;a href="http://yiiframework.com/"&gt;yiiframework.com&lt;/a&gt;-ra "telepíteni". Ez annyit jelent, hogy egyszerűen a &lt;a href="http://www.yiiframework.com/wiki/103/use-yii-search-in-your-browser/"&gt;böngészőnkből kereshetünk&lt;/a&gt;&amp;nbsp;&lt;b&gt;Yii&lt;/b&gt; oldalon található dolgokat.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://webenabled.com/"&gt;WebEnabled&lt;/a&gt; támogatja a &lt;b&gt;Yii&lt;/b&gt;-t (1.1.5). &amp;nbsp;Az oldal segítségével néhány klikkolással készíthetünk &lt;b&gt;Yii&lt;/b&gt; alapokra épülő alkalmazást, &lt;b&gt;SVN&lt;/b&gt; forráskezelővel (a Git az úton van), &lt;b&gt;SSH&lt;/b&gt; hozzáféréssel és egy linkel, amit a felhasználóinknak tudunk adni, tesztelésre. Ja, és mindezt ingyenesen! (egyébként Yii az első keretrendszer, eddig többnyire &lt;b&gt;CMS&lt;/b&gt;-eket és &lt;b&gt;CRM&lt;/b&gt;-eket támogattak)&lt;br /&gt;&lt;br /&gt;Hogy lehetne még &amp;nbsp;gyorsabban és eredményesebben dolgozni?&amp;nbsp;&lt;a href="http://www.threeriversinstitute.org/blog/?p=579"&gt;Mi az a Kanban?&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A hét oldala&lt;/b&gt;: egy brazil horgász oldal:&amp;nbsp;&lt;a href="http://www.revistapescaesportiva.com.br/"&gt;http://revistapescaesportiva.com.br&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6941585212252184576?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6941585212252184576/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/11/yii-radiio-36-adas.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6941585212252184576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6941585212252184576'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/11/yii-radiio-36-adas.html' title='Yii Radiio 36. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-333461291246644811</id><published>2010-11-22T01:00:00.000-08:00</published><updated>2010-11-22T01:00:03.215-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='migrációk'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='migrations'/><category scheme='http://www.blogger.com/atom/ns#' term='doctrine'/><title type='text'>Adatbázis migrációk a Yii-vel</title><content type='html'>A &lt;b&gt;Rails&lt;/b&gt; keretrendszernek köszönhetően az elmúlt pár évben nagy teret hódított az &lt;b&gt;Adatbázis Migrációk&lt;/b&gt; (&lt;i&gt;Migrations&lt;/i&gt;) használata, még &lt;b&gt;PHP&lt;/b&gt;-s környezetben is. Személyesen hallottam olyanról, hogy míg az egész rendszer &lt;b&gt;PHP&lt;/b&gt; alatt futott, a programozók a &lt;b&gt;Rails&lt;/b&gt;-t használták &lt;i&gt;táblák&lt;/i&gt; és &lt;i&gt;kapcsolatok&lt;/i&gt; készítésére.&lt;br /&gt;&lt;br /&gt;Persze több kevesebb sikerrel megjelentek &lt;b&gt;PHP&lt;/b&gt;-vel hajtott alkalmazások is, az egyik ilyen pl. a &lt;a href="http://www.doctrine-project.org/"&gt;Doctrine Project&lt;/a&gt;. Ebben a cikkben azonban a &lt;b&gt;Pieter Claerhout&lt;/b&gt; által publikált, és a &lt;b&gt;Yii&lt;/b&gt; alá készített &lt;b&gt;Yii-DbMigrations&lt;/b&gt;-t fogjuk ismertetni.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Mire jó ez egyáltalán?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Felmerülhet a kérdés, hogy miért is van szükség ilyen rendszerek használatára. A felvetés jogos, hiszen sima &lt;b&gt;SQL&lt;/b&gt;-t használva is készíthetünk &lt;i&gt;táblákat&lt;/i&gt; és &lt;i&gt;kapcsolatokat&lt;/i&gt;. Valóban, viszont az így készített ún. &lt;i&gt;tábla leírások (schema)&lt;/i&gt; kifejezetten az adott adatbásban működnek.&lt;br /&gt;&lt;br /&gt;Képzeljük el például, hogy a fejlesztés kezdetén &lt;b&gt;SQLite&lt;/b&gt;-ot használtunk és késöbb szeretnénk az adatbézisunkat&amp;nbsp;&lt;b&gt;MySQL&lt;/b&gt; alá tenni (mondjuk a &lt;i&gt;LIVE&lt;/i&gt; szerveren). Sajnos ilyen esetben az összes &lt;i&gt;tábla leírást&lt;/i&gt; újra kell készítenünk, mivel a két adatbázis motorban használt &lt;b&gt;SQL&lt;/b&gt; nem kompatibilis. Itt jön a képbe az &lt;b&gt;Adatbázis Migráció&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;A lényeg az, hogy adtabázisleíró nyelvtől függetlenül tudunk &lt;i&gt;táblákat&lt;/i&gt; és &lt;i&gt;kapcsolatokat&lt;/i&gt; készíteni a&amp;nbsp;&lt;b&gt;PHP&lt;/b&gt; segítségével. Az így elkészített &lt;i&gt;tábla osztályokat&lt;/i&gt; pedig nagyon egyszerűen a kívánt (és támogatott!) adatbázis alá be lehet illeszteni. Külön hab a tortán, hogy arra sem kell emlékeznünk, hogy melyik volt az utolsó lefuttatott &lt;i&gt;tábla osztály&lt;/i&gt;, mindezt a &lt;b&gt;Yii-DbMigartions&lt;/b&gt; elvégzi helyettünk. Úgy is gondolhatunk rá, mint egy adatbázisra szabott &lt;b&gt;Forráskezelő&lt;/b&gt; program (pl: &lt;b&gt;SVN&lt;/b&gt; vagy &lt;b&gt;GIT&lt;/b&gt;)&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;b&gt;Hátrányok&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A modul még csak &lt;i&gt;alpha&lt;/i&gt; állapotban van.&lt;br /&gt;Jelenleg csak &lt;b&gt;SQLite&lt;/b&gt; és &lt;b&gt;MySQL&lt;/b&gt; támogatott.&lt;br /&gt;&lt;ul style="line-height: 1.4em; margin-bottom: 1em !important; margin-left: 2em !important; margin-right: 0px !important; margin-top: 1em !important; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/ul&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Installálás és Beállítás&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Miután kicsomagoltuk a &lt;b&gt;zip&lt;/b&gt; file-t a szokásos helyre -&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/extensions&lt;/span&gt;, győződjünk meg arról, hogy az adatbázissal kapcsolatos beállítások megfelelőek a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/config/main.php&lt;/span&gt;-ben.&lt;br /&gt;&lt;br /&gt;MySQL:&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=TU4yim6z"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;SQLite:&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Fnm26Wah"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;A Parancssor beállítása&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Alap esetben természetesen a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiic&lt;/span&gt; nem tud a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;migrate&lt;/span&gt; utasításról, hiszen még csak most telepítettük a modult. Ezért be kell állítanunk egy új&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;commandMap&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Helvetica, sans-serif;"&gt;-et&lt;/span&gt;&amp;nbsp;&amp;nbsp;a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/config/console.php&lt;/span&gt; file-ban:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=HSjpywB0"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Beállítások tesztelése&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ha minden jól sikerült, egyszerűen futtassuk le a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;yiic&lt;/span&gt; parancsot a parancssorból:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=nCsqyZKL"&gt;&lt;/script&gt;&lt;br /&gt;Reméljük így a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;migrate&lt;/span&gt; parancs már elérhető.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Migrációk készítése&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Nevvekkel kapcsolatos korlátozások&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A migrációs file-okat a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/migrations&lt;/span&gt; vagy a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;migrations&lt;/span&gt; mappába (a modul könyvtárába) helyezhetjük el. Az file-ok neveit pedig a következő képpen ajánlatos elnevezni:&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;m20090614213453_MigracioNeve.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A névnek mindig egy '&lt;i&gt;m&lt;/i&gt;' betűvel kell kezdődnie, utána egy 14 karakter hosszú &lt;i&gt;dátumot meghatározó string&lt;/i&gt;, egy aláhúzásjel '_' és végül pedig egy szabadon választható &lt;i&gt;MigrációNév&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Persze, szerencsénkre, ezt automatikusan is megtehetjük a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/yiic migrate create &amp;lt;MigracioNev&amp;gt;&lt;/span&gt; lefuttatásával:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=UPeZNCVZ"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Táblaleírások készítése&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Magában a &lt;i&gt;tábla leíró file&lt;/i&gt;-ban létre kell hoznunk egy osztályt, aminek a szülő osztálya a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;CDbMigration&lt;/span&gt;, és két kötelező metódusunk az &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;up&lt;/span&gt; és &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;down&lt;/span&gt; lesz. Reméljük a következő példa kicsit segíteni fog:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=jg73KStC"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Tehát az &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;up()&lt;/span&gt; segítségével elkészítjük az új táblát, a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;down()&lt;/span&gt;-nal pedig töröljük.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Támogatott funkciók&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A &lt;i&gt;migráció&lt;/i&gt; osztályban a következő funkciók érhetők el:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;execute&lt;/b&gt;: sima &lt;i&gt;SQL&lt;/i&gt; futtatása, ami nem ad vissza értéket.&lt;/li&gt;&lt;li&gt;&lt;b&gt;query&lt;/b&gt;: sima &lt;i&gt;SQL&lt;/i&gt; futtatása, ami értékkel tér vissza.&lt;/li&gt;&lt;li&gt;&lt;b&gt;createTable&lt;/b&gt;: új tábla készítése&lt;/li&gt;&lt;li&gt;&lt;b&gt;newTable&lt;/b&gt;: új &lt;i&gt;tábla leírás&lt;/i&gt; készítése&lt;/li&gt;&lt;li&gt;&lt;b&gt;addTable&lt;/b&gt;: táblaleírás hozzáadása a migrációhoz&lt;/li&gt;&lt;li&gt;&lt;b&gt;renameTable&lt;/b&gt;: tábla átnevezése&lt;/li&gt;&lt;li&gt;&lt;b&gt;removeTable&lt;/b&gt;: tábla törlése&lt;/li&gt;&lt;li&gt;&lt;b&gt;addColumn&lt;/b&gt;: &lt;i&gt;oszlop&lt;/i&gt; hozzáadása a táblához&lt;/li&gt;&lt;li&gt;&lt;b&gt;renameColumn&lt;/b&gt;: &lt;i&gt;oszlop&lt;/i&gt; átnevezése&lt;/li&gt;&lt;li&gt;&lt;b&gt;changeColumn&lt;/b&gt;: &lt;i&gt;oszlop&lt;/i&gt; változtatása&lt;/li&gt;&lt;li&gt;&lt;b&gt;removeColumn&lt;/b&gt;: &lt;i&gt;oszlop&lt;/i&gt; törlése&lt;/li&gt;&lt;li&gt;&lt;b&gt;addIndex&lt;/b&gt;: &lt;i&gt;index&lt;/i&gt; hozzáadása táblához vagy adatbázishoz&lt;/li&gt;&lt;li&gt;&lt;b&gt;removeIndex&lt;/b&gt;: &lt;i&gt;index&lt;/i&gt; törlése táblából vagy adatbázisból.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;i&gt;Mezőleíró&lt;/i&gt; beállításoknál pedig a következő változók használhatók:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;primary_key&lt;/li&gt;&lt;li&gt;string&lt;/li&gt;&lt;li&gt;text&lt;/li&gt;&lt;li&gt;integer&lt;/li&gt;&lt;li&gt;float&lt;/li&gt;&lt;li&gt;decimal&lt;/li&gt;&lt;li&gt;datetime&lt;/li&gt;&lt;li&gt;timestamp&lt;/li&gt;&lt;li&gt;time&lt;/li&gt;&lt;li&gt;date&lt;/li&gt;&lt;li&gt;binary&lt;/li&gt;&lt;li&gt;boolean&lt;/li&gt;&lt;li&gt;bool&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Persze ezen kívül lehet adatbázis specifikus &lt;i&gt;mezőket&lt;/i&gt;&amp;nbsp;is készíteni, viszont úgy nem tudjuk a programot más adatbázis alá (könnyedén) átemelni.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Táblák készítése másként&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=QBE2sDsS"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Migrációk futtatása&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Csak azért mert elkészítettük a &lt;i&gt;tábla-leírásokat&lt;/i&gt;, az nem azt jelenti, hogy a táblák már készen is vannak az adatbázisban. A &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;migrate&lt;/span&gt; parancs lefuttatásával történik meg mindez:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=AFD1sfF9"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;Még itt a végén annyit érdemes megjegyezni, hogy ha most lefuttatnánk a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;migrate&lt;/span&gt; parancsot mégegyszer, semmi nem történne, hiszen a modul megjegyzi, hogy melyik volt az utolsóként lefutott &lt;i&gt;migráció&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;És ennyi! Mindenképpen javaslom az eredeti cikk elolvasását is, mert ott még van egy-két utasítás amire nem tértünk itt ki, de remélem ezek után mindenkinek megjön a kedve egy kis &lt;i&gt;adatbányászáshoz&lt;/i&gt; :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="https://github.com/pieterclaerhout/yii-dbmigrations"&gt;https://github.com/pieterclaerhout/yii-dbmigrations&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-333461291246644811?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/333461291246644811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/11/adatbazis-migraciok-yii-vel.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/333461291246644811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/333461291246644811'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/11/adatbazis-migraciok-yii-vel.html' title='Adatbázis migrációk a Yii-vel'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-4052939548139481249</id><published>2010-11-16T01:00:00.000-08:00</published><updated>2010-11-16T01:00:08.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yii 1.1.5'/><category scheme='http://www.blogger.com/atom/ns#' term='blueprint'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='swfupload'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Symfony'/><category scheme='http://www.blogger.com/atom/ns#' term='yii irc'/><category scheme='http://www.blogger.com/atom/ns#' term='lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='assets'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='teszt'/><category scheme='http://www.blogger.com/atom/ns#' term='mariadb'/><category scheme='http://www.blogger.com/atom/ns#' term='flash'/><category scheme='http://www.blogger.com/atom/ns#' term='cron'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>Yii Radiio 35. adás</title><content type='html'>Megjelent a &lt;b&gt;Yii 1.1.5&lt;/b&gt;-ös, sok javítással és mégtöbb újdonsággal. A változtatások listája &lt;a href="http://www.yiiframework.com/files/CHANGELOG-1.1.5.txt"&gt;ezen a linken&lt;/a&gt; található meg.&lt;br /&gt;&lt;br /&gt;Nagy port kavart fel &lt;b&gt;Qiang&lt;/b&gt; azon bejelentése, miszerint a &lt;i&gt;Yii 2.0&lt;/i&gt;-át a &lt;i&gt;PHP 5.3&lt;/i&gt; alapjaira építve teljesen újraírják, és nem lesz kompatibilis a régebbi (&lt;i&gt;1.1, 1.2&lt;/i&gt;) ágakkal. (mondjuk szvsz ez teljesen egyértelmű). A kiabálókhoz a &lt;a href="http://www.yiiframework.com/forum/index.php?/topic/12960-yii-framework-20/"&gt;fórumon lehet csatlakozni&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ramirez Cobos&lt;/b&gt; mutatja be, hogyan használhtajuk az &lt;a href="http://www.ramirezcobos.com/2010/11/06/how-to-use-swfuploads-yii-extension/"&gt;SWFUpload&lt;/a&gt;-ot, ami egy &lt;i&gt;Flash&lt;/i&gt; meghajtott file-feltöltő rendszer.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Christian Montoya&lt;/b&gt;&amp;nbsp;irása a &lt;a href="http://tumblr.christianmontoya.com/post/1352956269/blueprint-in-the-yii-php-framework"&gt;BluePrint CSS rendszer&lt;/a&gt;-ről, amit egyre gyakrabban választanak designerek, weboldalak (pl: http://mint.com, http://stay.com vagy a http://dailymotion.com).&lt;br /&gt;&lt;br /&gt;Az &lt;a href="http://churchco.de/top-5-reasons-i-love-the-yii-php-framework/"&gt;5 (6-7-8) legfőbb ok a Yii mellett&lt;/a&gt; (&lt;b&gt;ChruchCO&lt;/b&gt; szerint: Demók, Tesztelés, Közösség, Kiterjesztések, Dokumentáció, Forrás (egyszerűen jó ránézni), Active Record és Scope-ok kezelése )&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Larry Ullman&lt;/b&gt; ismerteti a &lt;b&gt;Zend&lt;/b&gt; keretrendszerben már jól ismert &lt;a href="http://blog.dmcinsights.com/2010/10/27/creating-a-search-index-with-zend_search_lucene/"&gt;(&lt;i&gt;Apache&lt;/i&gt;) Lucene kereső&lt;/a&gt; &lt;b&gt;Yii&lt;/b&gt;-re történő implementálását.&lt;br /&gt;&lt;br /&gt;Üdvözlünk két újabb &lt;i&gt;blogger&lt;/i&gt;t a &lt;b&gt;Yii&lt;/b&gt;&amp;nbsp;torpedó-hajó fedélzetén (&lt;strong&gt;Kyokasuigetsu&lt;/strong&gt;,&amp;nbsp;&lt;strong&gt;Mushfiq&lt;/strong&gt;) akik többek között azt is megírják miért váltottak egyéb rendszerekről (pl. &lt;i&gt;CodeIgniter&lt;/i&gt; és &lt;i&gt;Symfony&lt;/i&gt;). A blogokat &lt;a href="http://kyokasuigetsu25.wordpress.com/2010/10/27/php-framework-for-beginners/"&gt;itt&lt;/a&gt; meg &lt;a href="http://mushfiqsimple.wordpress.com/2010/10/30/php-framework-yii-yes-it-is/"&gt;itt&lt;/a&gt; olvashatjátok.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Ha valaki már kicsit járatos a &lt;/span&gt;Yii&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; felépítésében az biztosan tudja, hogy hol található (és mire való) az &lt;i&gt;assets&lt;/i&gt; mappa. Néhány kivételes esetben azonban szükség lehet rá, hogy ezt máshova tegyük. Ezt magyarázzal el &lt;/span&gt;Dana Luther&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; &lt;a href="http://danaluther.blogspot.com/2010/10/publishing-to-alternate-assets.html"&gt;ebben a blog post&lt;/a&gt;-ban.&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Ha valakinek (még mindig) gondot okozna, hogy melyik &lt;/span&gt;MVC&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;-re alapuló&amp;nbsp;&lt;/span&gt;PHP&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; keretrendszert válassza, annak hasznos lehet &lt;/span&gt;Jorges Albaladejo&lt;span class="Apple-style-span" style="font-weight: normal;"&gt; &lt;a href="http://jorgealbaladejo.com/2010/10/31/choosing-a-php-mvc-framework-yii-vs-kohana-vs-home-made-mvc/"&gt;tesztje&lt;/a&gt;, aki több más rendszert is megvizsgál és próbál segítséget nyújtani a &lt;/span&gt;PHP&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;s közösségnek.&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;SamDark&lt;/b&gt; mutatja be, hogyan lehet &lt;i&gt;&lt;a href="http://www.blogger.com/goog_664232188"&gt;cron&lt;/a&gt;&lt;/i&gt;&lt;a href="http://yiiframework.com/wiki/91"&gt; alkalmazásokat futtatni&lt;/a&gt; Yii-n keresztül.&lt;br /&gt;&lt;br /&gt;Ha valakinek sürgős segítségre van&amp;nbsp;szüksége valamilyen &lt;b&gt;Yii&lt;/b&gt;-vel kapcsolatos problémara, és nincs ideje (türelme?) a fórum látogatóinak válaszára várni, annak érdemes kipróbálnia a &lt;a href="http://yiiframework.com/site/irc/"&gt;#yii IRC&lt;/a&gt; csatornát, ahol naponta több mint &lt;i&gt;30-40&lt;/i&gt; lelkes Yii programozó próbál egymásnak segítséget nyújtani.&lt;br /&gt;&lt;br /&gt;Semmiképp nem szeretnénk pletykát indítani, de egyre többet hallani a &lt;b&gt;MySQL&lt;/b&gt; és &lt;b&gt;Oracle&lt;/b&gt;&amp;nbsp;háza táján történő bizonytalanságokról. Az adatbázis motor lecserélését segítheti elő a &lt;a href="http://mariadb.org/"&gt;MariaDB&lt;/a&gt;, amit egy az egyben arra találtak ki, hogy a &lt;b&gt;MySQL&lt;/b&gt;-t leváltsa. (állítólag néhai &lt;b&gt;MySQL&lt;/b&gt; programozók találták ki). Mindenképp érdemes rá odafigyelni.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A hét oldala:&lt;/b&gt; &lt;a href="http://bumperize.com/"&gt;bumperize.com&lt;/a&gt;, akik arra vetemednek, hogy a már jól megszokott szöveges alapó email-jeinket felcsinosítsák.&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;eredeti:&amp;nbsp;&lt;a href="http://yiiradiio.mehesz.net/episode-35"&gt;http://yiiradiio.mehesz.net/episode-35&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-4052939548139481249?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/4052939548139481249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/11/yii-radiio-35-adas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/4052939548139481249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/4052939548139481249'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/11/yii-radiio-35-adas.html' title='Yii Radiio 35. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-8688379318293781062</id><published>2010-11-09T01:00:00.000-08:00</published><updated>2010-11-09T01:00:02.430-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='képmódosítás'/><category scheme='http://www.blogger.com/atom/ns#' term='képmanipuláció'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='presets'/><category scheme='http://www.blogger.com/atom/ns#' term='imagecache'/><title type='text'>Hogyan fűszerezzük Yii proginkat a már jól bevált ImageCache-sel</title><content type='html'>Ha valaki már régóta tevékenykedik a "&lt;i&gt;szakmában&lt;/i&gt;" az biztosan tudja, hogy egy oldalon megjelenő képeknek az átméretezését még azelött jó megtenni, mielött a kép a böngészőbe kerül. Például, mi történik akkor, ha a képünk 3000x2000 pixeles, és azt 300x200-as méretben szeretnénk megjeleníteni:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;img&lt;/span&gt; &lt;span class="Apple-style-span" style="color: #38761d;"&gt;src&lt;/span&gt;="valami.jpg" &lt;span class="Apple-style-span" style="color: #38761d;"&gt;width&lt;/span&gt;="&lt;span class="Apple-style-span" style="color: red;"&gt;300&lt;/span&gt;" &lt;span class="Apple-style-span" style="color: #38761d;"&gt;height&lt;/span&gt;="&lt;span class="Apple-style-span" style="color: red;"&gt;200&lt;/span&gt;" /&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;A fenti sorral többek között az a gond, hogy az ember azt gondolná (reméljük nem, de lehet), hogy a böngésző ilyenkor csak egy ekkorka képet tölt le. Sajnos ez nem igaz, tehát a felhasználóinkat (és a szerverünket) büntetjük azzal, hogy a böngésző egy hatalmas, alkalmanként több MB-os képet tölt le. A &lt;b&gt;Drupal&lt;/b&gt; &lt;b&gt;CMS&lt;/b&gt; rendszerben van egy úgy nevezett &lt;i&gt;ImageCache&lt;/i&gt; modul, ami pontosan erre kínál megoldást.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hwangar&lt;/b&gt;-nak köszönhetően ez a modul már elérhető a &lt;b&gt;Yii rendszerben&lt;/b&gt; is, így néhány "&lt;i&gt;képmegváltoztató&lt;/i&gt;" funkcióval lényegesen felgyorsíthatjuk oldalaink betöltését. Ez a cikk azt próbálja bemutatni, hogy hogyan is tehetjük meg mindezt.&lt;br /&gt;&lt;br /&gt;Az &lt;b&gt;ImageCache&lt;/b&gt; modul segítségével (&lt;i&gt;GD2 szükséges hozzá&lt;/i&gt;!) többek között átméretezhetjük, elforgathatjuk és vízjeggyel láthatjuk el képeinket. Maga a beállítás egyszerűen megtehető az alkalmazásunk konfigurációs file-jában. (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;protected/config/main.php&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=Pv8SuKCX"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Beállítás&lt;/b&gt;:&lt;br /&gt;&lt;br /&gt;Annyi féle &lt;i&gt;preset&lt;/i&gt;-et készíthetünk, amennyit csak akarunk. A fenti példában, a &lt;i&gt;640x480-&lt;/i&gt;nak&lt;i&gt;&amp;nbsp;&lt;/i&gt;nevezett &lt;i&gt;preset &lt;/i&gt;segítségével például először átméretezzük és vágjuk a képet (&lt;i&gt;scaleAndCrop&lt;/i&gt;) majd pedig&amp;nbsp;vízjegyet teszünk a képre (&lt;i&gt;watermark&lt;/i&gt;). Az elkészített képeket a modul a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;webroot/&amp;lt;akarmi&amp;gt;&lt;/span&gt;&amp;nbsp;könyvtárba helyezi el. Jelenleg a következő képmódosító funkciók támogatottak: újraméretezés (&lt;i&gt;resize&lt;/i&gt;), zsugorítás (&lt;i&gt;scale&lt;/i&gt;), zsugorítás és vágás (&lt;i&gt;scaleAndCrop&lt;/i&gt;), elforgatás (&lt;i&gt;rotate&lt;/i&gt;), vágás (&lt;i&gt;crop&lt;/i&gt;) és vízjegy (&lt;i&gt;watermark&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Használat:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Magát a képkészítő programot vagy a &lt;b&gt;Kontroller&lt;/b&gt;ben (&lt;i&gt;Controller&lt;/i&gt;) vagy a &lt;b&gt;Nézet&lt;/b&gt;ben (&lt;i&gt;View&lt;/i&gt;) szokás meghívni a következő módon:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&amp;lt;?php&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;$&lt;span class="Apple-style-span" style="color: #38761d;"&gt;thumb&lt;/span&gt; = Yii::app()-&amp;gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;image&lt;/span&gt;-&amp;gt;&lt;span class="Apple-style-span" style="color: #38761d;"&gt;createUrl&lt;/span&gt;( '&lt;span class="Apple-style-span" style="color: red;"&gt;640x480&lt;/span&gt;',YiiBase::getPathOfAlias('&lt;span class="Apple-style-span" style="color: red;"&gt;webroot.files&lt;/span&gt;').'&lt;span class="Apple-style-span" style="color: red;"&gt;/valami.jpg&lt;/span&gt;'); &lt;span class="Apple-style-span" style="color: #999999;"&gt;// An image file!!!&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;if&lt;/span&gt; ($thumb) &lt;span class="Apple-style-span" style="color: blue;"&gt;print&lt;/span&gt; $&lt;span class="Apple-style-span" style="color: #38761d;"&gt;thumb&lt;/span&gt;; &lt;span class="Apple-style-span" style="color: blue;"&gt;else print&lt;/span&gt; "&lt;span class="Apple-style-span" style="color: red;"&gt;bad&lt;/span&gt;";&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;Még annyit érdemes megjegyezni, hogy amikor először jelenítjük meg a képet a modul segítségével (tehat a &lt;i&gt;cache&lt;/i&gt; könyvtár üres!), akkor fut le maga a képszerkesztő program és készül el az új kép. A következőkben már ezt a képet töltjük be és jelenítjük meg, remélhetőleg gyorsabban.&lt;br /&gt;&lt;br /&gt;Az eredeti leírás és maga a modul itt található:&amp;nbsp;&lt;a href="http://www.yiiframework.com/extension/image-cache/"&gt;http://www.yiiframework.com/extension/image-cache/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(Egyébként ha valakinek van ötelete arra, hogy magyarul hogyan lehetne érzékeltetni a különbséget a &lt;i&gt;resize&lt;/i&gt; és a &lt;i&gt;scale&lt;/i&gt; között (lehetőleg egyszóval), azt szívesen venném ... köszi)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-8688379318293781062?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/8688379318293781062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/11/hogyan-fuszerezzuk-yii-proginkat-mar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/8688379318293781062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/8688379318293781062'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/11/hogyan-fuszerezzuk-yii-proginkat-mar.html' title='Hogyan fűszerezzük Yii proginkat a már jól bevált ImageCache-sel'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-4021864147486671443</id><published>2010-11-02T01:00:00.000-07:00</published><updated>2010-11-02T01:00:04.436-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='worthmonkey.com'/><category scheme='http://www.blogger.com/atom/ns#' term='MongoDB'/><category scheme='http://www.blogger.com/atom/ns#' term='Zen'/><category scheme='http://www.blogger.com/atom/ns#' term='LESS.js'/><category scheme='http://www.blogger.com/atom/ns#' term='MongoRecord'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeIgniter'/><category scheme='http://www.blogger.com/atom/ns#' term='Zend'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP keretrendszerek'/><category scheme='http://www.blogger.com/atom/ns#' term='yii lapozgató'/><category scheme='http://www.blogger.com/atom/ns#' term='Symfony'/><title type='text'>Yii Radiio 34. adás</title><content type='html'>Sikerült néhány újabb &lt;i&gt;template&lt;/i&gt;-t készítenünk és fel is tettük őket a &lt;a href="http://yiithemes.mehesz.net/"&gt;Yii Themes&lt;/a&gt; oldalra. Reméljük tetszik az új &lt;i&gt;lapozgató&lt;/i&gt; is.&lt;br /&gt;&lt;br /&gt;Na, de nézzük mi történt az elmúlt hetekben a &lt;b&gt;Yii&lt;/b&gt; körül:&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;BHushan&amp;nbsp;&lt;/strong&gt;részletezi több &lt;a href="http://bhushankumarram.wordpress.com/2010/09/26/"&gt;PHP keretrenszer előnyeit és hátrányait&lt;/a&gt;, köztük persze a &lt;b&gt;Yii&lt;/b&gt;-t is.&lt;/li&gt;&lt;li&gt;Hasonló kategóriába tartozik az &lt;b&gt;include-once.org&lt;/b&gt; által közzétett &lt;a href="http://matrix.include-once.org/framework/table"&gt;PHPs keretrendszer összehasonlító program&lt;/a&gt;, aminek segítségével könnyen fej-fej mellé tehetjük az összes jelenleg elérhető keretrendszert.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;-ről már esett szó párszor a &lt;i&gt;Yii Radiio&lt;/i&gt; adásaiban, röviden egy &lt;i&gt;Kulcs-Érték&lt;/i&gt; (Key-Value) alapokra épülő adatbázismotorról van szó. Ehhez próbál segítséget nyújtani a &lt;b&gt;Tyohan&lt;/b&gt;&amp;nbsp;által elkészített modell osztály, &lt;a href="http://www.yiiframework.com/extension/mongorecord/" target="_blank"&gt;MongoRecord&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Ha valaki már többször járt a &lt;b&gt;Yii&lt;/b&gt; oldalon, talán ismerősnek tűnhet&lt;b&gt;&amp;nbsp;Larry Ullman&lt;/b&gt;&amp;nbsp;neve, aki a kezdetektől fogva támogatja a rendszert és népszerű sorozatát nagyon sokan elismerik. Végre sikerült frissítenie a leírásokat, a jelenlegi legújabb,&amp;nbsp;&lt;a href="http://www.larryullman.com/2010/10/05/learning-the-yii-framework-series-updated/"&gt;Yii 1.1.4&lt;/a&gt;-re.&lt;/li&gt;&lt;li&gt;Remélem nem vagyok egyedül, de velem többször előfodult már, hogy az agyamban felmerülő megoldást probáltam kód formájában begépelni, de az ujjaim lassabak voltak mint maga a gondolat. Mit lehetne még kitalálni, azon kívül, hogy megtanulunk baromi gyorsan gépelni? A &lt;a href="http://net.tutsplus.com/articles/general/9-ways-to-instantly-code-faster/"&gt;Tutsplus hasábjain probáltak 9 olyan dolgot összeszedni&lt;/a&gt;, ami a segítségünkre lehet. (pl: Zen kódolás, Osztott képernyő (Vim - hehe), LESS.js stb)&lt;/li&gt;&lt;li&gt;Talán szükségünk lehet arra, hogy az amúgy jól bevált Yii &lt;i&gt;lapozgató&lt;/i&gt; rendszert átalakítsuk. (vagy csak egyszerűen tudni akarjuk, hogyan is működik).&amp;nbsp;&lt;b&gt;Ramirez Cobos &lt;/b&gt;kalaúzol el bennünket a Yii rejtett világába és mutatja be, &lt;a href="http://www.ramirezcobos.com/2010/10/04/how-to-create-a-custom-pagination-widget-for-yii-framework/"&gt;hogyan tudjuk ezt megtenni&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Ha még csak most kezdünk ismerkedni a Yii rendszerrel, gyakran előfordul, hogy a Modell kapcsolatok megértése homályos lehet.&amp;nbsp;&lt;b&gt;Hungred.com&lt;/b&gt;&amp;nbsp;próbálja mindezt &lt;a href="http://hungred.com/how-to/yii-relational-active-record-tutorial/"&gt;elmagyarázni ezzel a post-tal&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://coilmedia.com/post/2010/trainer-buzz-gently-sets-sail-yii/" target="_blank"&gt;WordPress a Yii-vel&lt;/a&gt;! &lt;b&gt;Baptek&lt;/b&gt;&amp;nbsp;meséli el nekünk miért is kellett nekik egy ilyen megoldás és milyen egyszerűen oldotta meg ezt a feladatot.&lt;/li&gt;&lt;li&gt;&lt;b&gt;WillowDan2009&lt;/b&gt;&amp;nbsp;mutatja be, hogyan kell &lt;a href="http://www.youtube.com/watch?v=K8ybMVH5mfM"&gt;Windows alá a Yii 1.1.4-est feltelepíteni&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;A &lt;i&gt;Yii csapatának&lt;/i&gt; végre sierült befejeznie a már régóta esedékes új arculatot, új logóval és funkciókkal. A kedvenceink a&amp;nbsp;&lt;a href="http://www.yiiframework.com/user/halloffame/" target="_blank"&gt;Hall of Fame&lt;/a&gt;, és&amp;nbsp;&lt;a href="http://www.yiiframework.com/badges/" target="_blank"&gt;Badges&lt;/a&gt;&amp;nbsp;(kitüntetések) :)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;A hét oldala:&lt;/strong&gt;&amp;nbsp;Ha az interneten szeretnénk valamit eladni, néha jó tudni, mi mennyit ér.&amp;nbsp;&lt;a href="http://worthmonkey.com/" target="_blank"&gt;WothMonkey.com&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-4021864147486671443?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/4021864147486671443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/11/yii-radiio-34-adas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/4021864147486671443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/4021864147486671443'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/11/yii-radiio-34-adas.html' title='Yii Radiio 34. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-5600855112060998945</id><published>2010-10-26T01:00:00.000-07:00</published><updated>2010-10-26T05:27:30.843-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crud'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='kezdetek'/><title type='text'>Hogyan kezdjük?</title><content type='html'>A &lt;b&gt;Yii rendszert&lt;/b&gt; a kezdetektől fogva úgy tervezték, hogy &lt;b&gt;WEB&lt;/b&gt; alapú alkalmazások készítését megkönnyitse. Ebben a &lt;i&gt;post&lt;/i&gt;ban megmutatjuk, hogyan lehet a legegyszerűbb egy alap, adatbázissal összekapcsolt programot elkezdeni.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;0. lépés - Előkészítés&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A &lt;b&gt;Yii&lt;/b&gt; rendszer letöltése és installálása után, egyszerűen futtassuk le azt a konzol parancsot, ami elkészíti a WEB-es alkalmazásunk vázát. A program már ekkor is működőképes, olyan finomságokkal fűszerezve mint &lt;i&gt;felhasználó beléptetés&lt;/i&gt; vagy &lt;i&gt;kapcsolat felvételi űrlap&lt;/i&gt;. Ezekre az alapokra már szépen építhetünk bonyolultabb funkciókat a programunk számára.&lt;br /&gt;&lt;br /&gt;&lt;a _blank"="" href="http://www.yiiframework.com/images/tour/app.png%20target=" onclick="window.open(this.href, 'popupwindow', 'width=420, height=350, resizable=no, scrollbars=yes, menubar=no, toolbar=no, status=no'); return false;"&gt;&lt;img alt="Blogger Logo Grey" border="0" src="http://www.yiiframework.com/images/tour/app-thumb.png" title="Blogger Logo Grey " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;1. lépés - Az adatbázis létrehozása&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Amig &lt;b&gt;Yii&lt;/b&gt; jelentősen lecsökkenti ismétlődő forráskód írását, az izgalmas rész, a kreatív munka ránk marad. Ez gyakran kezdődik adatbázis és táblák tervezésével.&lt;br /&gt;&lt;br /&gt;&lt;a _blank"="" href="http://www.yiiframework.com/images/tour/sql.png%20target=" onclick="window.open(this.href, 'popupwindow', 'width=420, height=350, resizable=no, scrollbars=yes, menubar=no, toolbar=no, status=no'); return false;"&gt;&lt;img alt="Blogger Logo Grey" border="0" src="http://www.yiiframework.com/images/tour/sql.png" title="Blogger Logo Grey " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2a. lépés - Yii elkészíti a Modell Osztályokat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Most a &lt;b&gt;Yii&lt;/b&gt; rendszeren van a sor, hogy az előkészített adatbázis táblából használható &lt;b&gt;PHP&lt;/b&gt; kódot készítsen. Ezt könnyen megtehetjük a rendszerbe épített, böngésző alapú kód generálóval (gii), aminek segítségével pillanatok alatt működő modell osztályokat készíthetünk, anélkül, hogy egy sort is gépelnünk kéne. &lt;i&gt;Modell osztályokat&lt;/i&gt; használva az adatbázis táblák érhetők &lt;i&gt;objektum osztályként&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a _blank"="" href="http://www.yiiframework.com/images/tour/model.png%20target=" onclick="window.open(this.href, 'popupwindow', 'width=420, height=350, resizable=no, scrollbars=yes, menubar=no, toolbar=no, status=no'); return false;"&gt;&lt;img alt="Blogger Logo Grey" border="0" src="http://www.yiiframework.com/images/tour/model-thumb.png" title="Blogger Logo Grey " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2b. lépés - Yii elkészíti a CRUD kód alapokat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Az előzőekben említett kód generáló segítségével készíthetjük el a nagyon gyakran használatos &lt;b&gt;CRUD&lt;/b&gt; funkciókat a kiválasztott adatbázis táblához. (&lt;i&gt;Create&lt;/i&gt; azaz Létrehoz, &lt;i&gt;Read&lt;/i&gt; - Beolvas, &lt;i&gt;Update&lt;/i&gt; - Frissít, &lt;i&gt;Delete&lt;/i&gt; - Töröl ).&lt;br /&gt;&lt;br /&gt;Az elkészített forráskód természetesen személyre szabható, a jól ismert &lt;b&gt;MVC&lt;/b&gt; (&lt;i&gt;Model&lt;/i&gt; - Modell, &lt;i&gt;View&lt;/i&gt; - Nézet, &lt;i&gt;Controller&lt;/i&gt; - Vezérlő) szabályait betartva. Egyelőre eddig minden sort a &lt;b&gt;Yii&lt;/b&gt; rendszer készített, még billentyűzethez nem kellett nyúlnunk.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a _blank"="" href="http://www.yiiframework.com/images/tour/crud.png%20target=" onclick="window.open(this.href, 'popupwindow', 'width=420, height=350, resizable=no, scrollbars=yes, menubar=no, toolbar=no, status=no'); return false;"&gt;&lt;img alt="Blogger Logo Grey" border="0" src="http://www.yiiframework.com/images/tour/crud-thumb.png" title="Blogger Logo Grey " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3. lépés - Az elkészített kód testreszabása, finomítása&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Az utolsó lépés, a &lt;b&gt;Yii&lt;/b&gt; által elkészített forrás kód testreszabása. Például, hogy ne jelenítsük meg a jelszó oszlopot a listában, egyszerűen töröljük a &lt;i&gt;jelszó&lt;/i&gt; mezőt az alábbi adminisztrációs nézet file-ban:&lt;br /&gt;&lt;br /&gt;&lt;script src="http://pastebin.com/embed_js.php?i=uNRMA2f6"&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;a _blank"="" href="http://www.yiiframework.com/images/tour/admin.png%20target=" onclick="window.open(this.href, 'popupwindow', 'width=420, height=350, resizable=no, scrollbars=yes, menubar=no, toolbar=no, status=no'); return false;"&gt;&lt;img alt="Blogger Logo Grey" border="0" src="http://www.yiiframework.com/images/tour/admin-thumb.png" title="Blogger Logo Grey " /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;Hogyan tovább?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A fenti leírás persze csak egy nagyon kicsi bepillantást enged a &lt;b&gt;Yii&lt;/b&gt; csodálatos világába. A következő logikus lépés lenne, hogy &lt;a href="http://www.yiiframework.com/download/"&gt;letöltsük a Yii keretrendszert&lt;/a&gt;, probáljunk ki egy vagy két &lt;a href="http://www.yiiframework.com/tutorials/"&gt;példa programot&lt;/a&gt;, és csatlakozzunk a többiekhez a &lt;a href="http://www.yiiframework.com/forum/index.php?/forum/33-hungarian/"&gt;fórumon&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Két kis magyar példa:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yiihun.blogspot.com/2010/09/yiiki-avagy-wiki-ala-yii_11.html"&gt;Yiiki avagy WIKI a'la Yii&lt;/a&gt; - egy nagyon egyszerű, &lt;b&gt;Yii&lt;/b&gt; alapokat bemutató alkalmazás, vagy&lt;br /&gt;&lt;a href="http://yiihun.blogspot.com/2010/09/kornyezetbarat-egysegteszteles.html"&gt;Környezetbarát Egységtesztelés Meztelencsigákkal&lt;/a&gt; - egy kicsit komolyabb példaprogram.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sok sikert!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-5600855112060998945?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/5600855112060998945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/10/hogyan-kezdjuk.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5600855112060998945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/5600855112060998945'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/10/hogyan-kezdjuk.html' title='Hogyan kezdjük?'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-2924642820378812149</id><published>2010-10-19T01:00:00.000-07:00</published><updated>2010-10-19T01:00:02.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='egységteszt'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='yii könyv'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='phpunit'/><title type='text'>Yii Radiio 33. adás</title><content type='html'>Végre itt van a már rég óta beharangozott interjú a &lt;a href="http://yiihun.blogspot.com/2010/09/konyvajanlo-agile-web-application.html"&gt;Yii könyv&lt;/a&gt; szerzőjével, &lt;b&gt;Jeff Winesett&lt;/b&gt;el. (maga az anyag angolul van, itt csak nagyjából összefoglaltam, miről beszélgettünk.)&lt;br /&gt;&lt;br /&gt;Ez egy elég &lt;a href="http://yiiradiio.mehesz.net/episode-33"&gt;érdekes adás (#33)&lt;/a&gt;, ugyanis mind terjedelmében, mind tartalmában eltér a megszokott formától, de nem kell aggodni, nem marad így ;)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Összefoglaló:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Többek között arról beszélgetünk, hogy &lt;b&gt;Jeff&lt;/b&gt; és csapata (&lt;a href="http://controlgroup.com/"&gt;Control Group Inc.&lt;/a&gt;) miért választotta a &lt;b&gt;Yii&lt;/b&gt; rendszert, hiszen nagyon sok hasonló &lt;b&gt;PHPs&lt;/b&gt; progamozási megoldás (keretrendszer) található manapság az interneten. Jövendőbeli könyvíróknak talán hasznos lehet, hogy hogyan sikerült megbírkózni a gyorsan megjelenő verziókkal, hiszen egy programozási könyvet azért (is) nehéz megírni, mert maga a rendszer (is) gyakran változhat és bizony vátozik is. (A Yii elég fiatalnak számít a "&lt;i&gt;nagyágyúk&lt;/i&gt;" mellett).&lt;br /&gt;&lt;br /&gt;Említésre kerül továbbá &lt;a href="http://www.packtpub.com/article/agile-yii-php-trackstar-application"&gt;TrackStar&lt;/a&gt;, azaz alkamazás amit a könyv alapján készítünk, a &lt;a href="http://yiihun.blogspot.com/2010/09/kornyezetbarat-egysegteszteles.html"&gt;Teszt Alapú Fejlesztés&lt;/a&gt; fontossága, és néhány szó a különböző forrás kezelő megoldásokról (&lt;a href="http://subversion.apache.org/"&gt;SVN&lt;/a&gt;, &lt;a href="http://git-scm.com/"&gt;GIT&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Meglepetés:&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;br /&gt;Jelenlegi szponzorunk (&lt;b&gt;Packt Publishing&lt;/b&gt;) felhatalmazott bennünket, hogy elajándékozzunk &lt;b&gt;3 db&lt;/b&gt; elektromos Yii könyvet &lt;b&gt;INGYÉ&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Ha még nincs meg (vagy jó lenne az eredeti ...) csak annyit kell megtennetek, hogy küldtök egy email-t a &lt;b&gt;yiiradiio [kukac] mehesz.net&lt;/b&gt; -re, amiben néhány mondatban leírjátok, miért is lenne jó nektek ez a könyv. &amp;nbsp;A jelentkezési határidő Október 31!&lt;br /&gt;&lt;br /&gt;(Sajnos nem mi döntjük el, hogy kik lesznek a nyertesek, ezért fontos, hogy az emil tartalma &lt;b&gt;angolul legyen&lt;/b&gt;!!!)&lt;br /&gt;&lt;br /&gt;Köszi és sok sikert!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-2924642820378812149?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/2924642820378812149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/10/yii-radiio-33-adas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2924642820378812149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2924642820378812149'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/10/yii-radiio-33-adas.html' title='Yii Radiio 33. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-7701035713579021493</id><published>2010-10-13T11:15:00.000-07:00</published><updated>2010-10-13T11:15:10.413-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>Twitter Madár</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="color: #cc0000; font-size: large;"&gt;&lt;strong&gt;!!! Kövessetek !!!&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: right;"&gt;&lt;a href="http://arth2o.com/images/uploads/userfiles/cikkek/1270397452_twitter.png" imageanchor="1" style="clear: right; cssfloat: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" ex="true" height="200" src="http://arth2o.com/images/uploads/userfiles/cikkek/1270397452_twitter.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Elindítottuk&amp;nbsp;a &lt;strong&gt;YiiHun Twitter&lt;/strong&gt; madarát az alábbi címen:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://twitter.com/yiihun"&gt;http://twitter.com/yiihun&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;Ezen olyan, a &lt;strong&gt;Yii keretrendszerrel&lt;/strong&gt; kapcsolatos, kisebb híreket fogunk közölni, amik nem érik el egy blog bejegyzés méretét.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-7701035713579021493?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/7701035713579021493/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/10/twitter-madar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7701035713579021493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/7701035713579021493'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/10/twitter-madar.html' title='Twitter Madár'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-3692719892008856826</id><published>2010-10-05T01:00:00.000-07:00</published><updated>2010-10-05T01:00:04.302-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='yii könyv'/><category scheme='http://www.blogger.com/atom/ns#' term='netbeans'/><category scheme='http://www.blogger.com/atom/ns#' term='form varázsló'/><category scheme='http://www.blogger.com/atom/ns#' term='url rövidítő'/><category scheme='http://www.blogger.com/atom/ns#' term='selenium'/><category scheme='http://www.blogger.com/atom/ns#' term='postgresql'/><category scheme='http://www.blogger.com/atom/ns#' term='phpunit'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Yii Radiio - 32. adás</title><content type='html'>&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;/span&gt;&lt;br /&gt;Hello,&lt;br /&gt;&lt;br /&gt;Itt a &lt;a href="http://yiiradiio.mehesz.net/episode-32"&gt;Yii Radiio 32. adása&lt;/a&gt; ...&lt;br /&gt;&lt;br /&gt;Új szponzorunk ebben a hónapban a &lt;a href="http://packtpub.com/"&gt;Packt Publishing&lt;/a&gt;, akik rengeteg más &lt;i&gt;programozói&lt;/i&gt; és &lt;i&gt;designer&lt;/i&gt; könyv mellett a nemrég megjelent &lt;a href="http://yiihun.blogspot.com/2010/09/konyvajanlo-agile-web-application.html"&gt;Yii könyv&lt;/a&gt;-et is publikálták.&lt;br /&gt;&lt;br /&gt;A következő adásban egyébként egy új, eddig még ismeretlen területre merészkedünk, ugyanis interjú alanyunk lesz a &lt;b&gt;Yii könyv&lt;/b&gt; írója (&lt;i&gt;Jeffrey Winesett&lt;/i&gt;). Az adás végén pedig egy meglepetés vár a hallgatókra :)&lt;br /&gt;&lt;br /&gt;Na nézzük, mizu ezen a héten:&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Bater Makhabel&lt;/b&gt; elkészítette a &lt;b&gt;Yii&lt;/b&gt; UML leírását, biztos nagy segítséget fog nyújtani a programozóknak.&lt;br /&gt;&lt;a href="http://www.yiiframework.com/forum/index.php?/topic/11677-yii-architecture-with-uml-model-details/"&gt;http://www.yiiframework.com/forum/index.php?/topic/11677-yii-architecture-with-uml-model-details/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Willowdan&lt;/b&gt; meséli el nekünk, hogy miért választották a &lt;b&gt;Yii&lt;/b&gt;-t más PHP-s keretrendszerek helyett.&lt;br /&gt;&lt;a href="http://putvaluefirst.info/tech-news/yii-my-chosen-php-framework/"&gt;http://putvaluefirst.info/tech-news/yii-my-chosen-php-framework/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;PRLog.org&lt;/b&gt; említi a Yii könyvet, és hogy hogyan lehet vele felgyorsítani a programozás.&lt;br /&gt;&lt;a href="http://www.prlog.org/10935481-accelerate-web-application-development-using-packts-new-yii-php-framework-book.html"&gt;http://www.prlog.org/10935481-accelerate-web-application-development-using-packts-new-yii-php-framework-book.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Hogyan készítsünk könnyedén &lt;b&gt;Yii Form Varázslókat&lt;/b&gt;, ebbe tekint bele&amp;nbsp;&lt;strong&gt;Nautilebleu &lt;/strong&gt;írása&lt;strong&gt;.&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://nautilebleu.tumblr.com/post/1131788452/easy-form-wizards-with-yii"&gt;http://nautilebleu.tumblr.com/post/1131788452/easy-form-wizards-with-yii&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Hogyan hajtsunk végre 180 fokos fordulást a &lt;i&gt;Titanic&lt;/i&gt;-kal (még süllyedés előtt). Ez egy nagyon jó kis cikk sorozat arról, hogy egy cég hogyan próbál egy hatalmas &lt;i&gt;online&lt;/i&gt; alkalmazást új alapokra helyezni, &lt;b&gt;Yii&lt;/b&gt;-vel.&lt;br /&gt;&lt;a href="http://jacquesmattheij.com/Turning+around+the+Titanic,+part+1,+triple+the+signup+rate"&gt;http://jacquesmattheij.com/Turning+around+the+Titanic,+part+1,+triple+the+signup+rate&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;-&amp;nbsp;&lt;b&gt;PostgreSQL&lt;/b&gt;-el ritkán foglalkoznak a blogok, pedig sokan azt rebesgetik, hogy mivel az &lt;b&gt;Oracle&lt;/b&gt; tavaly(?) bekebelezte a &lt;b&gt;MySQL&lt;/b&gt;-t, &lt;b&gt;Postgres&lt;/b&gt; lesz az új nyílt forrású relációs adatbázisok királya. Addig is, itt egy jó kis leírás, hogyan is kell mindezt beállítani &lt;b&gt;Yii&lt;/b&gt;-vel.&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt; &lt;a href="http://blog.93-interactive.com/wordpress/2010/09/using-the-yii-php-framework-with-postgresql/"&gt;http://blog.93-interactive.com/wordpress/2010/09/using-the-yii-php-framework-with-postgresql/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;- Egyre népszerűbb a &lt;b&gt;NetBeans&lt;/b&gt; kód szerkesztő a &lt;b&gt;PHP&lt;/b&gt; programozók körében. &lt;b&gt;Marcov Twout&lt;/b&gt; bemutatja, hogyan lehet vele még elegénsabban dolgozni &amp;nbsp;&lt;b&gt;PHPUnit&lt;/b&gt; és &lt;b&gt;Selenium RC&lt;/b&gt;-vel keverve.&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt; &lt;a href="http://www.yiiframework.com/doc/cookbook/83/"&gt;http://www.yiiframework.com/doc/cookbook/83/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;- &lt;b&gt;A hét oldala&lt;/b&gt;: &lt;a href="http://ikl.me/"&gt;http://ikl.me&lt;/a&gt;, egy feltörekvő URL rövidítő és analizáló rendszer.&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: 19px; font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="font-size: x-large;"&gt;&lt;span class="Apple-style-span" style="font-size: 19px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: medium; font-weight: normal;"&gt;( még itt a magyaroknak annyit, hogy az adásban hallható &lt;i&gt;intro&lt;/i&gt; és &lt;i&gt;outro&lt;/i&gt; zenét a magyar&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;Larry Hangman&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: medium; font-weight: normal;"&gt; zenekartól kaptuk, akiknek nemrég jelent meg az első nagylemeze:&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.myspace.com/larryhangman"&gt;http://www.myspace.com/larryhangman&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: 19px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-size: medium; font-weight: normal;"&gt;&amp;nbsp;)&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-3692719892008856826?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/3692719892008856826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/10/yii-radiio-32-adas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/3692719892008856826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/3692719892008856826'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/10/yii-radiio-32-adas.html' title='Yii Radiio - 32. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-6333204963984441553</id><published>2010-09-28T10:37:00.000-07:00</published><updated>2010-09-28T10:37:05.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='yii könyv'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><title type='text'>Könyvajánló: Agile Web Application Development with Yii 1.1 and PHP5</title><content type='html'>A következő könyvajánló a &lt;b&gt;Weblabor&lt;/b&gt; hasábjain jelent meg pár nappal ezelőtt, &lt;b&gt;Orionstar&lt;/b&gt; klaviatúrájából:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma, Geneva, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma, Geneva, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Tahoma, Geneva, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://www.packtpub.com/yii-1-1-and-php5-for-agile-web-application-development/book" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;" target="_blank"&gt;&lt;img border="0" src="http://www.ebookserve.com/wp-content/uploads/2010/08/Agile-Web-Application-Development-with-Yii-1.1-and-PHP5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-size: 1em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-left: 0.5em;"&gt;&lt;a href="https://www.packtpub.com/yii-1-1-and-php5-for-agile-web-application-development/book" target="_blank"&gt;A könyv&lt;/a&gt; azon haladó PHP fejlesztők számára készült, akik otthonosan mozognak az objektumorientált programozás világában, és felgyorsítanák munkájukat egy keretrendszer használatával. A könyv e fejlesztőket vezeti be a Yii keretrendszer alapszintű használatába pár egyszerű és egy komplex példán keresztül, agilis fejlesztési módszertant alkalmazva. Habár a tudásanyag nagy része könnyedén elérhető a keretrendszer weblapján illetve fórumában kutakodva, ezt a keresést helyettesíti részben a könyv kibővítve az agilis szempontból történő fejlesztéssel.&lt;/div&gt;&lt;div style="font-size: 1em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-left: 0.5em;"&gt;A könyv egy rövid összefoglalóval indít, hogy miért a Yii keretrendszert válasszuk. Röviden bemutatja a Yii által alkalmazott tervezési mintát, az MVC-t. Ez tényleg csak egy rövid összefoglaló, aki nincs tisztában ezzel, annak először ajánlott utána járni, majd ezt követően jönnek az egyszerű példák. A későbbi fejezetek során szoftverfejlesztési életciklus követésre képes alkalmazás lépésenkénti fejlesztését mutatja be a szerző a főbb funkciók megvalósításon keresztül, a témakezelésen át az RSS hírlevél és cachelésig. Maga a példa rendkívül hasonló a keretredszer oldalán megtalálható blog példához.&lt;/div&gt;&lt;div style="font-size: 1em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-left: 0.5em;"&gt;Miért érdemes hát elolvasni a könyvet, ha szinte minden elérhető az interneten is? Azért, mert a kezdéshez szükséges több helyen felhalmozott tudást a szerző összefoglalja, és mindezt olyan módszertan segítségével teszi, amiből az olvasók profitálhatnak. Engem személy szerint arra ösztökélt, hogy jobban utánajárjak az agilis módszertannak, amit noha korábban elvetettem a vízesés modellre esküdve. Továbbá nagy hangsúlyt fektet a(z) (egység)tesztelés részletes bemutatására is, amiről hajlamosak vagyunk olykor elfeledkezni.&lt;/div&gt;&lt;div style="font-size: 1em; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-left: 0.5em;"&gt;Hogyan tovább, mi hiányzik? A könyv csak bevezető a Yii világába, ezért nem találhatók meg benne jQuery-vel, Ajaxszal, web service-okkal kapcsolatos példák, amik viszont a Yii igazi erejét adják, de az interneten sok példakód, tutorial elérhető melyek segítenek továbbfejleszteni tudásunk.&lt;/div&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;Az eredeti cikk itt található:&amp;nbsp;&lt;a href="http://weblabor.hu/konyvek/agile-yii-11-and-php5"&gt;http://weblabor.hu/konyvek/agile-yii-11-and-php5&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-6333204963984441553?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/6333204963984441553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/09/konyvajanlo-agile-web-application.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6333204963984441553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/6333204963984441553'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/09/konyvajanlo-agile-web-application.html' title='Könyvajánló: Agile Web Application Development with Yii 1.1 and PHP5'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-2583662207991742147</id><published>2010-09-21T01:00:00.000-07:00</published><updated>2010-09-21T01:00:00.143-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yii radiio'/><category scheme='http://www.blogger.com/atom/ns#' term='mvc'/><category scheme='http://www.blogger.com/atom/ns#' term='haml'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='nosql'/><category scheme='http://www.blogger.com/atom/ns#' term='sass'/><category scheme='http://www.blogger.com/atom/ns#' term='oauth'/><category scheme='http://www.blogger.com/atom/ns#' term='pomegranate'/><title type='text'>Yii Radiio - 31. adás</title><content type='html'>&lt;b&gt;MZ/x MZ/x&lt;/b&gt;,&lt;br /&gt;&lt;br /&gt;Itt a &lt;a href="http://yiiradiio.mehesz.net/"&gt;Yii Radiio&lt;/a&gt; 31. adása, nézzük mik a legújabb hírek a &lt;b&gt;Yii&lt;/b&gt; háza táján:&lt;br /&gt;&lt;br /&gt;- Hosszas fontolgatás után úgy döntöttünk, hogy a &lt;b&gt;Facebook&lt;/b&gt; '&lt;i&gt;csoport&lt;/i&gt;' helyett egy '&lt;i&gt;oldal&lt;/i&gt;'-t készítünk amivel talán egyszerűbben tudunk kapcsolatot teremteni az érdeklődőkkel. Csupán &lt;b&gt;LIKE&lt;/b&gt;-olni kell és kész is :) &lt;a href="http://facebook.com/yiiradiio"&gt;http://facebook.com/yiiradiio&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;Frank Kleine&lt;/b&gt;&amp;nbsp;még 2008-ban írt egy cikket az '&lt;i&gt;annotations&lt;/i&gt;' és a PHP kapcsolatáról, és most újraelemzi a helyzetet, és egy megoldásra is rámutat a Yii segítségével.&lt;br /&gt;&lt;a href="http://www.stubbles.org/archives/79-State-of-annotations-in-the-PHP-world,-revisited.html" target="_blank"&gt;http://www.stubbles.org/&lt;wbr&gt;&lt;/wbr&gt;archives/79-State-of-&lt;wbr&gt;&lt;/wbr&gt;annotations-in-the-PHP-world,-&lt;wbr&gt;&lt;/wbr&gt;revisited.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- A &lt;b&gt;HAML and SASS&lt;/b&gt; kiterjesztésnek jelent meg &amp;nbsp;egy újabb változata. Aki nem ismerné, a &lt;b&gt;Ruby&lt;/b&gt; környezetben már régóta használt HTML és CSS "&lt;i&gt;csonka kód&lt;/i&gt;" megoldásról van szó, aminek segítségével sokkal gyorsabban tudunk program kódot írni, hiszen nem kell annyit gépelnünk ...&lt;br /&gt;&lt;a href="http://www.yiiframework.com/extension/haml-and-sass/" target="_blank"&gt;http://www.yiiframework.com/&lt;wbr&gt;&lt;/wbr&gt;extension/haml-and-sass/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Végre a &lt;b&gt;Yii&lt;/b&gt;-hez is elért a már rengeteg helyen használt &lt;b&gt;OAuth&lt;/b&gt;. Köszönet &lt;b&gt;CGeorge&lt;/b&gt;-nak.&lt;br /&gt;&lt;a href="http://www.yiiframework.com/extension/eoauth/" target="_blank"&gt;http://www.yiiframework.com/&lt;wbr&gt;&lt;/wbr&gt;extension/eoauth/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Megjelent a &lt;b&gt;Yii 1.1.4&lt;/b&gt;-es változata, közel 60 hibajavítással és újításokkal. A teljes listáért ide klikkoljatok:&lt;br /&gt;&lt;a href="http://www.yiiframework.com/files/CHANGELOG-1.1.4.txt" target="_blank"&gt;http://www.yiiframework.com/&lt;wbr&gt;&lt;/wbr&gt;files/CHANGELOG-1.1.4.txt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Az &lt;b&gt;MVC&lt;/b&gt; (&lt;i&gt;Modell - Nézet - Vezérlő&lt;/i&gt;) elterjedésével egyre többen próbálják újraértelmezni a már jól bevált technológiát, de még mindig &lt;b&gt;MVC&lt;/b&gt;-nek álcázva. A "&lt;i&gt;Nézet az nem Template&lt;/i&gt;" -&lt;br /&gt;&lt;a href="http://r.je/views-are-not-templates.html" target="_blank"&gt;http://r.je/views-are-not-&lt;wbr&gt;&lt;/wbr&gt;templates.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;- Ha már nem lenne elég, itt egy újabb &lt;b&gt;NoSQL&lt;/b&gt; szerű adatbázis motor, de azt mondják jobb minden eddiginél. Majd meglátjuk: &lt;a href="http://highscalability.com/blog/2010/8/30/pomegranate-storing-billions-and-billions-of-tiny-little-fil.html"&gt;Pomegranate&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- &lt;b&gt;A hét oldala&lt;/b&gt;: &lt;a href="http://piclyf.com/"&gt;PicLyf&lt;/a&gt; képmegosztó szolgáltatás és közösségi oldal&amp;nbsp;a&amp;nbsp;&lt;b&gt;Twidl Inc.&lt;/b&gt;-től.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-2583662207991742147?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/2583662207991742147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/09/yii-radiio-31-adas.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2583662207991742147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2583662207991742147'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/09/yii-radiio-31-adas.html' title='Yii Radiio - 31. adás'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-2341593189854161157</id><published>2010-09-15T14:51:00.000-07:00</published><updated>2010-09-15T14:51:29.545-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><title type='text'>Temesvári Imre: Online informatikai tudásbázis Yii alapokon</title><content type='html'>Az interneten böngészgetve akadtam erre a remek kis szakdolgozatra, amit &lt;b&gt;Temesvári Imre&lt;/b&gt; publikált:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;"&lt;span class="Apple-style-span" style="color: #323232; font-family: Corbel, 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', 'DejaVu Sans', 'Bitstream Vera Sans', 'Liberation Sans', Verdana, sans-serif; font-size: 16px; line-height: 20px;"&gt;Szakdolgozatom célja és témája egy olyan informatikai tudásbázis elkészítése, amely az informatika minden területéről összegyűjti a szakszavakat, fogalmakat, kifejezéseket – abból a célból, hogy az érdeklődőnek pontos információt adhasson. Jellege tudásbázis – ami annyival több, mint egy adatbázis vagy informatikai szótár, hogy nem egy valaki, vagy egy zárt csoport fejleszti - bővíti, hanem mindenki, aki az oldalt felkeresi, és érdemben tud rajta javítani, hozzá tenni. A cél egy minél bővebb tudásbázis létrehozása, ahol az érdeklődő gyorsan megtalálhatja a magyarázatot az általa nem ismert szóra, fogalomra.&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #323232; font-family: Corbel, 'Lucida Grande', 'Lucida Sans Unicode', 'Lucida Sans', 'DejaVu Sans', 'Bitstream Vera Sans', 'Liberation Sans', Verdana, sans-serif; font-size: 16px; line-height: 20px;"&gt;A tudásbázis Yii alapokon fog működni, ami egy nem túl régi és még nem annyira elterjedt PHP keretrendszer. A keretrendszer jelentősen meggyorsíthatja a fejlesztés menetét, és az előre elkészített osztályok, kódok felhasználásával segíti a fejlesztő munkáját. Így a szakdolgozat másik célja a Yii bemutatása, megismertetése.&lt;/span&gt;"&lt;/blockquote&gt;&lt;a href="http://nagygusztav.hu/sites/default/files/Temesvari_Imre.pdf"&gt;A szakdolgozat (PDF)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(az eredeti cikk itt található: &lt;/span&gt;&lt;a href="http://nagygusztav.hu/temesvari-imre-online-informatikai-tudasbazis-yii-alapokon"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;http://nagygusztav.hu/temesvari-imre-online-informatikai-tudasbazis-yii-alapokon&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-2341593189854161157?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/2341593189854161157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/09/temesvari-imre-online-informatikai.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2341593189854161157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/2341593189854161157'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/09/temesvari-imre-online-informatikai.html' title='Temesvári Imre: Online informatikai tudásbázis Yii alapokon'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-372812595569740117</id><published>2010-09-11T20:49:00.000-07:00</published><updated>2010-09-11T21:13:17.388-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='egységteszt'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='unit test'/><category scheme='http://www.blogger.com/atom/ns#' term='phpunit'/><title type='text'>Környezetbarát Egységtesztelés Meztelencsigákkal</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: 13px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="max-width: 65em;"&gt;avagy, hogyan gyártsunk Egységtesztelős programot a&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;-vel.&lt;/div&gt;&lt;h2 style="font-size: large;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Mi_ez?"&gt;Mi ez?&lt;/a&gt;&lt;/h2&gt;&lt;div style="max-width: 65em;"&gt;Ha netán a címből nem lenne eléggé egyértelmű, a következőkben Egységteszetkről (Unit Test) lesz szó PHP-s környezetben. Ha a nyájas olvasó még nem olvasta a korábban megjelent&amp;nbsp;&lt;a href="http://yiihun.blogspot.com/2010/09/yiiki-avagy-wiki-ala-yii_11.html" rel="nofollow" style="color: #0000cc;"&gt;Yiiki al'a Yii&lt;/a&gt;&amp;nbsp;cikket, és semmilyen tapasztalata nincs a Yii keretrendszerrel, mindenképp érdemes rajta átfutni ugyanis itt nem fogunk belemenni az alapvető,&amp;nbsp;&lt;i&gt;-Na most akkor, hogy is kezdjem?&lt;/i&gt;&amp;nbsp;kérdésekbe.&lt;/div&gt;&lt;h2 style="font-size: large;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Mi_lesz_ez?"&gt;Mi lesz ez?&lt;/a&gt;&lt;/h2&gt;&lt;div style="max-width: 65em;"&gt;Egy nagyon egyszerű URL rövidítőt fogunk késziteni, mint pl a&amp;nbsp;&lt;a href="http://tinyurl.com/" rel="nofollow" style="color: #0000cc;"&gt;http://tinyurl.com&lt;/a&gt;&amp;nbsp;vagy a&amp;nbsp;&lt;a href="http://vurl.me/" rel="nofollow" style="color: #0000cc;"&gt;http://vurl.me&lt;/a&gt;. Ha valaki nem ismerné, a lényeg az, hogy marha hosszú URL-eket lekicsinyítünk, és ha valahol egy felhasználó az általunk lekicsinyített linkre (slug) kattint, azt továbbítjuk a megfelelő oldalra.&lt;/div&gt;&lt;h2 style="font-size: large;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Bevezetés"&gt;Bevezetés&lt;/a&gt;&lt;/h2&gt;&lt;h3 style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-color: rgb(51, 102, 204); border-top-style: solid; border-top-width: 0px; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.5ex; padding-left: 0px; padding-right: 0.5em; padding-top: 0.5ex;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Környezet:"&gt;Környezet:&lt;/a&gt;&lt;/h3&gt;&lt;ul style="max-width: 65em; padding-left: 40px;"&gt;&lt;li&gt;PHP 5.2.x&lt;/li&gt;&lt;li&gt;Apache (a PHP futtatásához)&lt;/li&gt;&lt;li&gt;SQLite (az egyszerűség kedvéért használjuk ezt, lehetne MySQL is)&lt;/li&gt;&lt;li&gt;Yii 1.1.3 (de elvileg működik az 1.1-es ág bármelyik csomagjával)&lt;/li&gt;&lt;li&gt;PHPUnit (tesztelést végrehajtó program:&amp;nbsp;&lt;a href="http://www.phpunit.de/" rel="nofollow" style="color: #0000cc;"&gt;http://www.phpunit.de&lt;/a&gt;&amp;nbsp;)&lt;/li&gt;&lt;/ul&gt;&lt;h3 style="background-attachment: initial; background-clip: initial; background-color: initial; background-image: none; background-origin: initial; background-position: initial initial; background-repeat: initial initial; border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-color: rgb(51, 102, 204); border-top-style: solid; border-top-width: 0px; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0.5ex; padding-left: 0px; padding-right: 0.5em; padding-top: 0.5ex;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Fogalmak:"&gt;Fogalmak:&lt;/a&gt;&lt;/h3&gt;&lt;div style="max-width: 65em;"&gt;&lt;strong&gt;Test Driven Development (TDD)&lt;/strong&gt;&amp;nbsp;- Tesztelésen alapuló fejlesztés.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Ezt talán úgy lehetne a legegyszerűbben bemutatni, hogy képzeljünk el egy adott problémát és próbáljuk meg visszafelé megoldani. Oké, lehet, hogy ez így elsőre hülyén hangzik, de talán ez az ábra segíthet.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;img src="http://mehesz.net/downloads/ttd.png" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" /&gt;&lt;/div&gt;&lt;ol style="max-width: 65em; padding-left: 40px;"&gt;&lt;li&gt;Írjunk tesztet&lt;/li&gt;&lt;li&gt;Ellenőrizzük, hogy a tesztünk hibázik (&lt;strong&gt;FAIL&lt;/strong&gt;)&lt;/li&gt;&lt;li&gt;Írjuk meg (a legegyszerűbben!) a kívánt kódot úgy, hogy a tesztünk sikeres legyen.&lt;/li&gt;&lt;li&gt;Ellenőrizzük, hogy a tesztünk sikeres e (&lt;strong&gt;PASS&lt;/strong&gt;)&lt;/li&gt;&lt;li&gt;Módosítsuk a kódunkat (úgy, hogy a teszt még mindig sikeres maradjon!)&lt;/li&gt;&lt;li&gt;Kezdjük előlről az egészet.&lt;/li&gt;&lt;/ol&gt;&lt;div style="max-width: 65em;"&gt;&lt;strong&gt;Unit Test&lt;/strong&gt;&amp;nbsp;- Egységteszt.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Az egységek, komponensek tesztelése, hogy megbizonyosodjunk a működésének helyességéről. Cél, hogy feltárja nincsenek-e tévműködések, feltáratlan hibák a belső algoritmusban, adatkezelésben. A komponensek más rendszer komponensektől függetlenül vannak tesztelve. (&lt;a href="http://www.dcs.vein.hu/" rel="nofollow" style="color: #0000cc;"&gt;http://www.dcs.vein.hu/&lt;/a&gt;)&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Ez így elsőre, másodikra de talán még harmadikra is érdekesen hangozhat, de reméljük a cikk végén minden világos lesz.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;(ja, itt ajánlanám&amp;nbsp;&lt;a href="http://weblabor.hu/cikkek/php-osztalyok-egysegtesztelese" rel="nofollow" style="color: #0000cc;"&gt;Erenon&lt;/a&gt;&amp;nbsp;írását.)&lt;/div&gt;&lt;h1 style="font-size: x-large; margin-top: 0px;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Adatbázis"&gt;Adatbázis&lt;/a&gt;&lt;/h1&gt;&lt;div style="max-width: 65em;"&gt;Mint korábban említettük, SQLite3-at fogunk használni, de gyakorlatilag bármilyen adatbázis motorral is műküdik a dolog.&lt;/div&gt;&lt;h2 style="font-size: large;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Táblák"&gt;Táblák&lt;/a&gt;&lt;/h2&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/data/rovidke.db&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;++++++++++++++++++++++++++&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; urls &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++++++++++++++++++++++++++&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; id INT &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;auto_increment&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; url TEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; slug VARCHAR&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;50&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; created INT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++++++++++++++++++++++++++&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;&lt;strong&gt;SQLite3&lt;/strong&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;CREATE TABLE urls &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;created INTEGER&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; id INTEGER PRIMARY KEY AUTOINCREMENT&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; slug varchar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;50&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; url TEXT&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Na, ennyi pepecselés után ugorjunk is bele a programozásba. Miután sikeresen létrehoztuk az alap alkalmazásunkat (pl:&amp;nbsp;&lt;i&gt;yiic webapp rovidke&lt;/i&gt;). Állítsuk is be egyből az adatbázis kapcsolatot.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/config/main.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'connectionString'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'sqlite:'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;dirname&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;__FILE__&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'/../data/rovidke.db'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Itt szeretném megjegyezni, hogy többször is belefutottam a következő hibaüzenetbe (SQLite esetén, Linux-szal, lehet, hogy ez MS környezetben nem gond)&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="typ" style="color: #660066;"&gt;CDbCommand&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; failed to execute the SQL statement&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; SQLSTATE&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;HY000&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;]:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;General&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; error&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;8&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; attempt to write a &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;readonly&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; database&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ez annyit jelent, hogy az adatbázis file-t a program nem tudta írásra megnyitni, tehát át kell állítanunk a jogokat (ha csak a saját gépemen programozok, és nem foglalkozok a biztonsággal, egyszerűen 777-et adok neki :) )&lt;/div&gt;&lt;h1 style="font-size: x-large; margin-top: 0px;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Itt_a_MVC"&gt;Itt a MVC&lt;/a&gt;&lt;/h1&gt;&lt;h2 style="font-size: large;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Modell"&gt;Modell&lt;/a&gt;&lt;/h2&gt;&lt;div style="max-width: 65em;"&gt;Első lépésként hozzuk is létre a&amp;nbsp;&lt;strong&gt;Url&lt;/strong&gt;&amp;nbsp;modellünket. Ha valaki nagyon bátor, az használhatja az új csodafegyvert:&amp;nbsp;&lt;a href="http://www.yiiframework.com/doc/guide/topics.gii" rel="nofollow" style="color: #0000cc;"&gt;Gii&lt;/a&gt;, amit a&amp;nbsp;&lt;i&gt;yiic&lt;/i&gt;&amp;nbsp;utódjának szán a Yii fejlsztői csapat. Tulajdonképpen egy grafikus, bongészőbarát kódgeneráló eszköz. (a cikkben a&amp;nbsp;&lt;i&gt;yiic&lt;/i&gt;-et fogjuk használni)&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;./&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;yiic shell&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Yii&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Interactive&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Tool&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; v1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;based on &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Yii&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; v1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1.3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Please&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; type &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'help'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; help&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Type&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'exit'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; to quit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; _&lt;/span&gt;&lt;/pre&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; model &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; urls&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate models&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate fixtures&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;urls&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate unit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UrlTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;The&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; following model classes are successfully generated&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;If&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; you have a &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'db'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; database connection&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; you can test these models now &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;with&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; $model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;find&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; print_r&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;$model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Akiknek jobb a szeme, azok nyilván észrevették a teszt csomagot, amit a&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;&amp;nbsp;alapból elkészít minden modellhez a&amp;nbsp;&lt;i&gt;protected/tests/unit&lt;/i&gt;&amp;nbsp;mappa alatt. Gyakorlás képpen Futtassuk is le "tesztjeinket" (&lt;i&gt;protected/tests/&lt;/i&gt;) ...&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;$phpunit unit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;There&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; was &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; error&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testCreate&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UrlTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CDbException&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;The&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; table &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"urls"&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;for&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; active record &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"Url"&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; cannot be found &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;in&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; the database&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Hoppá, hát az meg mi? Mi az, hogy nincs ilyen tábla az adatbázisban?&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Azt fontos megjegyezni, hogy tesztelés közben nem egy, csak és kizárólag, a teszthez írt funkciót futtatunk, hanem az éles alkalmazás kódját. Ami azt jelenti, hogy a funkció az mindig ugyanaz marad és mindig ugyanúgy fut le. Hova is akarok ezzel kilyukadni? A lényeg, hogy amikor a teszteket futtatjuk, a program egy előre legyártott adat-tömbből (&lt;i&gt;fixtures&lt;/i&gt;) veszi az adatokat, ezeket egy adatbázisba teszi, lefutattja a tesztet, és törli a DB táblákban tárolt bejegyzéseket. Tehát fontos, hogy&amp;nbsp;&lt;strong&gt;az éles adatbázis és a teszt adatbázis&lt;/strong&gt;&amp;nbsp;különböző legyen!&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Innen jött a hibaüzenet, ugyanis a teszt adatbázisunk még nem létezik. Csináljunk is egyet ...&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/data/rovidke_test.db&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;++++++++++++++++++++++++++&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; urls &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++++++++++++++++++++++++++&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; id INT &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;auto_increment&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; url TEXT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; slug VARCHAR&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;50&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; created INT &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++++++++++++++++++++++++++&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;&lt;strong&gt;SQLite3&lt;/strong&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;CREATE TABLE urls &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;created INTEGER&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; id INTEGER PRIMARY KEY AUTOINCREMENT&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; slug varchar&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;50&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; url TEXT&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;... és módosítsuk a&amp;nbsp;&lt;i&gt;teszt&lt;/i&gt;(!) konfigurációs file-t az alábbiak szerint&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/config/test.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'connectionString'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'sqlite:'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; dirname&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;__FILE__&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;).&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'/../rovidke_test.db'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;ha, most lefuttatjuk a tesztünket ...&amp;nbsp;&lt;i&gt;protected/tests/&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;$phpunit unit&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PHPUnit&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;3.3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;16&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;by&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Sebastian&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Bergmann&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Time&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;0&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; seconds&lt;br /&gt;&lt;br /&gt;OK &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; test&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;0&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; assertions&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;minden OK! Birkabőr (&lt;i&gt;Juhéjj&lt;/i&gt;)!&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Kedvenc szövegszerkesztőnkkel nyissuk meg a&amp;nbsp;&lt;i&gt;UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;&lt;/i&gt;&amp;nbsp;a&amp;nbsp;&lt;i&gt;protected/tests/unit/&lt;/i&gt;&amp;nbsp;könyvtárból (aki&amp;nbsp;&lt;a href="http://www.vim.org/" rel="nofollow" style="color: #0000cc;"&gt;VIM&lt;/a&gt;-et hasznal +1 piros pontot kap). Ez elvileg üres, illetve, az osztályt a&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;&amp;nbsp;már létrehozta, és talán akad is egy példa teszt. Ha van, ha nincs, a lényeg, hogy minden teszt funkciónak a&amp;nbsp;&lt;i&gt;test&lt;/i&gt;cimkével kell kezdődnie. Nem történik semmi baj, ha nem kezdjük ezzel a tesztünket, de nem fog lefutni. A gyakorlás kedvéért csináljunk is két tesztet ...&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/unit/UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;false&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testTrue2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;true&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ez talán elég világos, de ha nem, akkor röviden annyi történik, hogy elsőben megvizsgáljuk, hogy az&amp;nbsp;&lt;strong&gt;IGAZ&lt;/strong&gt;&amp;nbsp;az&amp;nbsp;&lt;strong&gt;HAMIS&lt;/strong&gt;&amp;nbsp;e, a másodikban pedig, hogy az&amp;nbsp;&lt;strong&gt;IGAZ&lt;/strong&gt;&amp;nbsp;az&amp;nbsp;&lt;strong&gt;IGAZ&lt;/strong&gt;&amp;nbsp;e. Futtasuk is le ...&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;$phpunit unit&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;PHPUnit&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;3.3&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;16&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;by&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Sebastian&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Bergmann&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;F&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Time&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;0&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; seconds&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;There&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; was &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; failure&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UrlTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Failed&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; asserting that &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;boolean&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;false&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;is&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;true&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;var&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;www&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;rovidke&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;tests&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;unit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UrlTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;18&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;FAILURES&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Tests&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Assertions&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Failures&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1.&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Jajj de remek, láthatjuk is, hogy egy darab&amp;nbsp;&lt;strong&gt;(F)&lt;/strong&gt;&amp;nbsp;betűt kaptunk, ami a tévhitekkel ellentétben, az jelenti, hogy&amp;nbsp;&lt;strong&gt;FAIL&lt;/strong&gt;&amp;nbsp;(ja, a pont&amp;nbsp;&lt;strong&gt;.&lt;/strong&gt;&amp;nbsp;meg azt, hogy a teszt PASS(ED), azaz sikeresen lefutott.) Ha jobban megvizsgáljuk az üzenetet, akkor még az is kiderül, hogy&amp;nbsp;&lt;i&gt;Failed asserting that &amp;lt;boolean:false&amp;gt; is true&lt;/i&gt;, ami a Google fordító szerint annyit jelent, hogy&amp;nbsp;&lt;i&gt;Elmulasztotta azt állítja, hogy hamis igaz&lt;/i&gt;. Remélem lejön a lényeg :)&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Rengeteg ilyen "&lt;i&gt;a teszt azt állítja, hogy&lt;/i&gt;" funkció létezik, ebben a példában mi csak néhányat fogunk bemutatni/használni. A teljes listáért&amp;nbsp;&lt;a href="http://www.phpunit.de/manual/current/en/api.html#api.assert" rel="nofollow" style="color: #0000cc;"&gt;ide klikkoljatok&lt;/a&gt;.&lt;/div&gt;&lt;h1 style="font-size: x-large; margin-top: 0px;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Fixtures_-_Minta_Adat"&gt;Fixtures - Minta Adat&lt;/a&gt;&lt;/h1&gt;&lt;div style="max-width: 65em;"&gt;Mint már korábban említettem, a "teszt csomag" egy úgynevezett adat-tömbből veszi a teszthez szükséges adatokat, most itt erről lesz szó (egy kicsit). Szerencsénkre&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;&amp;nbsp;már létrehozta az alap könyvtárrendszert és a file-okat, sőt még néhány példa tömbböt is készített a&lt;i&gt;protected/tests/fixtures/urls.php&lt;/i&gt;&amp;nbsp;file-ban. Pompás.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Módosítsuk is az értékeket, valahogy így:&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'sample1'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'created'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'1234567890'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'AA'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'http://weblabor.hu'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'sample2'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'created'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'1234567890'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'AB'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'http://google.com'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ugyan ezek az adat-tömbök elhanyagolhatóak, a gyakorlatban szinte mindig hasznaljuk őket.&lt;/div&gt;&lt;h1 style="font-size: x-large; margin-top: 0px;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Megint_Tesztelünk"&gt;Megint Tesztelünk&lt;/a&gt;&lt;/h1&gt;&lt;div style="max-width: 65em;"&gt;Nyissuk meg a&amp;nbsp;&lt;strong&gt;URL&lt;/strong&gt;&amp;nbsp;teszt file-unkat és írjunk gyorsan egy számláló tesztet, ami megszámolja az összes linket a táblában:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/unit/UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testCountAll&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $urls_count &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;sizeof&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;findAll&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;());&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertEquals&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $urls_count &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;A példa kedvéért itt az&amp;nbsp;&lt;i&gt;assertEquals()&lt;/i&gt;-t mutatom be, ami azt "&lt;i&gt;Feltételezi&lt;/i&gt;", hogy a két megadott érték megegyezik. Ezzel lehet játszadozni, ha valami nem stimmel a tesztünk úgyis elbukik. PL:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;$phpunit unit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Failed&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; asserting that &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;integer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;2&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; matches expected value &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;integer&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ugye milyen egyszerű? Az&amp;nbsp;&lt;i&gt;assertEquals()&lt;/i&gt;-ba nem csak szám értéket passzolhatunk ám, hanem akár szöveges változót is:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/unit/UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testActionView&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $url &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;findByAttributes&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'id'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $url &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;instanceof&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertEquals&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'http://altavizsla.hu'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;ez nyilván elbubik, de ...:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;$phpunit unit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;There&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; was &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;1&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; failure&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;expected &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;string&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;http&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;//weblabor.hu&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;difference &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; xxxxxxxxxxx&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;??&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;got &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;string&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;http&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;//altavizsla.hu&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Itt a&amp;nbsp;&lt;strong&gt;PHPUnit&lt;/strong&gt;&amp;nbsp;ügyesen megmutatja nekünk, hogy pontosan hol is tértek el a szöveges változók. jajj, de jó :)&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Na most nézzünk egy kicsit komolyabb tesztet. A&amp;nbsp;&lt;strong&gt;urls&lt;/strong&gt;&amp;nbsp;táblába csak olyan rekordot szertnénk elmenteni, aminek mind a&amp;nbsp;&lt;strong&gt;url&lt;/strong&gt;, mind a&amp;nbsp;&lt;strong&gt;slug&lt;/strong&gt;&amp;nbsp;értéke be van állítva, tehát nem lehet üres. Írjuk meg a tesztet:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/unit/UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testUrlRequired&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;isAttributeRequired&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ha most lefuttatnánk a tesztünket, akkor nyilvánvalóan elbukna. Szerencsénkre a&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;&amp;nbsp;modell osztálynak van egy ún.&amp;nbsp;&lt;i&gt;rules()&lt;/i&gt;&amp;nbsp;(szabályok) funkciója, amivel többek között azt is beállíthatjuk, hogy mely értékek nem lehetnek üresek. Ezt a&amp;nbsp;&lt;i&gt;required&lt;/i&gt;-del határozhatjuk meg.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/models/Url.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; rules&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'required'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;A tesztünk már majdnem sikeres ;) Hasonlóan az előző példához, most állítsuk be a&amp;nbsp;&lt;strong&gt;slug&lt;/strong&gt;-ot is ...&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/unit/UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testSlugRequired&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;isAttributeRequired&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;TESZT: FAIL!&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/models/Url.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url,slug'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'required'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Itt még azt is észrevehetjük, hogy milyen szépen lehet több értéket is megadni a&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;&amp;nbsp;&lt;i&gt;rules()&lt;/i&gt;-ban.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;TESZT: PASS!&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Most nézzünk egy olyan példát, ahol a tesztelésre szánt funkció még nem létezik. Például mi történik akkor, ha egy új URL-t (inkább slug-ot) szeretnénk készíteni. Ha most próbálnánk ki a programot, akkor kézzel kéne beállítanunk a lerövidített URL-t. Na ne má ... Tehát ha az adatbázisunk üres (nincs 1 darab URL sem) akkor az első slug legyen:&amp;nbsp;&lt;strong&gt;AA&lt;/strong&gt;. Na hogy is néz ez ki pontosan?&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/unit/UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testCreateUrl&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $url &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;setAttribute&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'http://altavizsla.hu'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;save&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'URL tarolas tesztelese'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertEquals&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;slug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'AA'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;A tesztünk az feltételezi, hogy egy új URL esetén az új URL&amp;nbsp;&lt;i&gt;slug&lt;/i&gt;-ja az&amp;nbsp;&lt;strong&gt;AA&lt;/strong&gt;&amp;nbsp;értékkel fog visszatérni. A teszt itt nyilván elbukik. (azt érdemes megjegyezni, hogy több&amp;nbsp;&lt;i&gt;feltételezést&lt;/i&gt;&amp;nbsp;is meg lehet adni 1 teszten belül).&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Itt jön segítségünkre, a&amp;nbsp;&lt;i&gt;beforeValidate()&lt;/i&gt;&amp;nbsp;beépített függvény, ami arra szolgál, hogy még a mezők ellenőrzése előtt(!) futtassunk le valamit ...&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/models/Url.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; beforeValidate&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;createSlug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; parent&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;beforeValidate&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; createSlug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'AA'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Azért nem tudtuk itt a&amp;nbsp;&lt;i&gt;beforeSave()&lt;/i&gt;-et használni, mert az ellenőrző szabályunk (rule) elbukna, ugyanis a&amp;nbsp;&lt;i&gt;slug&lt;/i&gt;&amp;nbsp;nem lehet üres. Most csak azt akarjuk elérni, hogy a tesztünk sikeresen lefusson, ugyanis a&amp;nbsp;&lt;i&gt;createSlug()&lt;/i&gt;&amp;nbsp;nem adhat mindig AA értéket, pl. ha több URL-t is szeretnénk tárolni az adatbázisunkban ;). Ha most lefuttatjuk a tesztünket akkor sikeresen lefut. Jajj, de jó. Na most módosítsuk a kódunkat úgy, hogy az tényleg azt csinálja amit akarunk ...&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; createSlug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;find&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'order'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug DESC'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;slug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;!&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'AA'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;else&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;$slug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $slug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Futtassuk a tesztet ...&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pln" style="color: black;"&gt;$phpunit unit&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Failed&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; asserting that two strings are equal&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;expected &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;string&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;AC&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;difference &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; x&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;got &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;string&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;AA&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ez meg hogy lehet, az előbb még minden jó volt ;) Persze a fentiekből egyből kiderül, hogy a&amp;nbsp;&lt;i&gt;teszt&lt;/i&gt;&amp;nbsp;az&amp;nbsp;&lt;strong&gt;AA&lt;/strong&gt;&amp;nbsp;értéket várta és&amp;nbsp;&lt;strong&gt;AC&lt;/strong&gt;-t kapott. Tehát módosítanunk kell a tesztünket. Itt jogosan merülhet fel a kérdés, hogy mi a ráknak ez a kerülőút? De ne feletjtsük el, tesztelünk.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/tests/unit/UrlTest&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlTest" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; testCreateUrl&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $url &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;();&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;setAttribute&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'http://altavizsla.hu'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertTrue&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;save&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'URL tarolas tesztelese'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;assertEquals&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;slug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'AC'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Még itt gyorsan, mielőtt elfelejtem, a&amp;nbsp;&lt;i&gt;createSlug()&lt;/i&gt;-ot rövidíthetjük így is.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/models/Url.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; createSlug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;find&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'order'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug DESC'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;slug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;return&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;++&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;$slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;:&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'AA'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;h2 style="font-size: large;"&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=6823977672774886966&amp;amp;postID=372812595569740117" name="Vezérlő_és_Nézet_Cucc_-_CRUD_-_Létrehoz,_Megjelenít,_Friss"&gt;Vezérlő és Nézet Cucc - CRUD - Létrehoz, Megjelenít, Frissít, Töröl&lt;/a&gt;&lt;/h2&gt;&lt;div style="max-width: 65em;"&gt;Az azért remélem feltűnt, hogy még egyszer sem ellenőriztük a programot a böngészőben. Mert nincs is rá szükség. Abban azonban biztosak lehetünk, hogy a&amp;nbsp;&lt;strong&gt;URL&lt;/strong&gt;&amp;nbsp;modellre vonatkozó funkcióink majdnem 100%-osak. Azért nem mondom, hogy&amp;nbsp;&lt;i&gt;majdnem&lt;/i&gt;, mert több mindent lehetne, sőt, kellene(!) még tesztelnünk. Pl. mi van akkor, ha frissítünk, vagy törlünk egy linket az adatbázisból stb. Ezeket a fentiek alapján, remélem, kis gondolkodás után meg lehet csinálni. De még van néhány egyéb teendőnk is mielőtt a programunkat a felhasználók karmai közé eresztenénk.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Készítsük el az alap felhasználói&amp;nbsp;&lt;i&gt;interfészt&lt;/i&gt;&amp;nbsp;(formok, nézetek és egyebek) a&amp;nbsp;&lt;i&gt;yiic&lt;/i&gt;&amp;nbsp;segítségével.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/yiic shell&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; crud &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UrlController&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;UrlTest&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; mkdir &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;var&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;www&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;rovidke&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;protected&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;views&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;url&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate create&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate update&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate index&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate view&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate admin&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate _form&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate _view&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;br /&gt;&amp;nbsp; &amp;nbsp;generate _search&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ha egy új felhasználó érkezik az oldalra, azt szeretnénk, hogy minden klikkolgatás nélkül készíthessen egy rövidített linket (monnyuk ez nem csak&lt;strong&gt;új&lt;/strong&gt;&amp;nbsp;felhasználókra vonatkozik). Módosítsuk az alap kontrollerünket:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/config/main.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'defaultController'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url/create'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Amikor a&amp;nbsp;&lt;i&gt;Yii&lt;/i&gt;&amp;nbsp;a hozzáférési szabályokat készíti, alapból a&amp;nbsp;&lt;i&gt;létrehozás&lt;/i&gt;&amp;nbsp;funkció (create) csak belépés után lehetséges. Ami jelen esetben nem elfogadható, hiszen mi azt szeretnénk, hogy a felhasználóink a lehető leggyorsabban létrehozhassanak rövidített linkeket. Módosítsuk tehát a&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/controllers/UrlController&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlController" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; accessRules&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'allow'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// allow all users to perform 'index' and 'view' actions&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'actions'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'index'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'view'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'create'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'users'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'*'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'allow'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// allow authenticated user to perform 'create' and 'update' actions&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'actions'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'update'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'users'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'@'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Ha most megnéznénk a kis programunkat, akkor mindenféle egyéb form mezőket látnánk, amit az okos (már tesztelt)&amp;nbsp;&lt;strong&gt;Modell&lt;/strong&gt;&amp;nbsp;funkcióink szépen kitöltenek a URL mentése előtt. (pl. dátum mező, a rövidített URL azaz&amp;nbsp;&lt;i&gt;slug&lt;/i&gt;&amp;nbsp;mező). Tulajdonképpen csak egyetlen mezőre van szükségünk, a URL-re:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/views/url/&lt;/i&gt;form.php&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;div class="row"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;?php echo $form-&amp;gt;labelEx($model,'created'); ?&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;?php echo $form-&amp;gt;textField($model,'created'); ?&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;?php echo $form-&amp;gt;error($model,'created'); ?&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;div class="row"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;?php echo $form-&amp;gt;labelEx($model,'slug'); ?&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;?php echo $form-&amp;gt;textField($model,'slug',array('size'=&amp;gt;50,'maxlength'=&amp;gt;50)); ?&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;?php echo $form-&amp;gt;error($model,'slug'); ?&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; */&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;div &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;class&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;"row"&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php echo $form&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;labelEx&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;$model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php echo $form&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;textField&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;$model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'size'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="lit" style="color: #006666;"&gt;50&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;));&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php echo $form&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;error&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;$model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;div&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Miután programunk elmenti az új&amp;nbsp;&lt;i&gt;Url&lt;/i&gt;-t,&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;&amp;nbsp;automatikusan betölti a megjelenítő kódot (&lt;i&gt;viewAction()&lt;/i&gt;). Mi azt szeretnénk, ha a felhasználónk valami ilyesmit látnának:&amp;nbsp;&lt;a href="http://rovidke.hu/QWD" rel="nofollow" style="color: #0000cc;"&gt;http://rovidke.hu/QWD&lt;/a&gt;, és erre klikkelve (vagy a böngészőbe másolva) jutnának el az igazi&amp;nbsp;&lt;i&gt;URL&lt;/i&gt;-hez.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Először módosítsuk a megjenítő nézetet:&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/views/url/view.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php &lt;br /&gt;&amp;nbsp; &amp;nbsp; echo &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CHtml&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;link&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $_SERVER&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;[&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'SERVER_NAME'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;]&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'/'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;slug&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;createUrl&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'/'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;.&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;php &lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/*&lt;br /&gt;$this-&amp;gt;widget('zii.widgets.CDetailView', array(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'data'=&amp;gt;$model,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'attributes'=&amp;gt;array(&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'created',&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'id',&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'slug',&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'updated',&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'url',&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ),&lt;br /&gt;)); &lt;br /&gt;*/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;?&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;No, és itt jön az alkalmazás egy másik érdekessége, az&amp;nbsp;&lt;i&gt;átirányítás&lt;/i&gt;&amp;nbsp;vagy&amp;nbsp;&lt;i&gt;redirect&lt;/i&gt;. Alapértelmezésben a rendszer a kapott URL alapján megpróbál egy Vezérlőt (Controller) keresni és átpasszolni neki a kapott változókat. Nekünk viszont az kéne, hogy ha valami ilyesmit kapunk (/QWD) akkor a program&amp;nbsp;&lt;i&gt;ne&lt;/i&gt;&amp;nbsp;keresse a QWD-t (nem találna!) hanem hívja meg a&amp;nbsp;&lt;strong&gt;Url&lt;/strong&gt;&amp;nbsp;vezérlőt és adja át&amp;nbsp;&lt;i&gt;QWD&lt;/i&gt;-t mint egy változó értéket. (ugyebár a&amp;nbsp;&lt;i&gt;slug&lt;/i&gt;azonosítója.) Ezt az alap konfigurációs file-ban tehetjük meg, a következő képpen (a szabályok sorrendje fontos):&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/config/main.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'urlManager'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'urlFormat'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'path'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'showScriptName'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;false&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'rules'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'/&amp;lt;slug:[A-Z]+&amp;gt;'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'url/redirect'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'&amp;lt;controller:\w+&amp;gt;/&amp;lt;id:\d+&amp;gt;'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'&amp;lt;controller&amp;gt;/view'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'&amp;lt;controller:\w+&amp;gt;/&amp;lt;action:\w+&amp;gt;/&amp;lt;id:\d+&amp;gt;'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'&amp;lt;controller&amp;gt;/&amp;lt;action&amp;gt;'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'&amp;lt;controller:\w+&amp;gt;/&amp;lt;action:\w+&amp;gt;'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'&amp;lt;controller&amp;gt;/&amp;lt;action&amp;gt;'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Persze mindez nem jöhetne létre ha nics&amp;nbsp;&lt;i&gt;apache&lt;/i&gt;&amp;nbsp;(.htaccess). Ha az alkalmazás ROOT könyvtárában valami oknál fogva nem lenne meg ez a file, akkor az alábbiak alapján kíszítsünk egyet.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;.htaccess&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="typ" style="color: #660066;"&gt;Options&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;+&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;FollowSymLinks&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;IndexIgnore&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;*&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;/*&lt;br /&gt;RewriteEngine on&lt;br /&gt;&lt;br /&gt;#Uncomment "RewriteBase /" when you upload this .htaccess to your web server, and comment it when on local web server&lt;br /&gt;&lt;br /&gt;#NOTE: &lt;br /&gt;&lt;br /&gt;#If your application is in a folder, for example "application". Then, changing the "application" folder name, will require you to reset the RewriteBase /[your app folder]&lt;br /&gt;&lt;br /&gt;#RewriteBase /[your app folder - optional]&lt;br /&gt;&lt;br /&gt;# if a directory or a file exists, use it directly&lt;br /&gt;RewriteCond %{REQUEST_FILENAME} -s [OR]&lt;br /&gt;RewriteCond %{REQUEST_FILENAME} -l [OR]&lt;br /&gt;RewriteCond %{REQUEST_FILENAME} -d&lt;br /&gt;&lt;br /&gt;# otherwise forward it to index.php &lt;br /&gt;RewriteRule ^.*$ - [NC,L]&lt;br /&gt;RewriteRule ^.*$ index.php [NC,L]&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;Na, most már tényleg csak egy dolog van hátra, megírni magát az átirányító funkciót&amp;nbsp;&lt;i&gt;actionRedirect()&lt;/i&gt;&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;protected/controllers/UrlController&lt;a href="http://code.google.com/p/hungariian/w/edit/UrlController" style="color: #0000cc;"&gt;?&lt;/a&gt;.php&lt;/i&gt;&lt;/div&gt;&lt;pre class="prettyprint" style="border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 3px; font-size: 12px; margin-left: 2em; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; accessRules&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'allow'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp;&lt;/span&gt;&lt;span class="com" style="color: #880000;"&gt;// allow all users to perform 'index' and 'view' actions&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'actions'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'index'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'view'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'create'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'redirect'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'users'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'*'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;),&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;public&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;function&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; actionRedirect&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Yii&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;app&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;request&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;getParam&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;null&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $url &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;findByAttributes&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;if&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $url &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;{&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $this&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;redirect&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Url&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;::&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;model&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;()-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;findByAttributes&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; array&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'slug'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; $slug &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;)-&amp;gt;&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;url &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;throw&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="kwd" style="color: #000088;"&gt;new&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;CHttpException&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;(&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'404'&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;,&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="str" style="color: #008800;"&gt;'hmmm ... slug not found!'&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;);&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;}&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;...&lt;/span&gt;&lt;/pre&gt;&lt;div style="max-width: 65em;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;Még nagyon sok mindent lehetne finomítani a programunkon, de szerintem kezdetnek ez is elég. Azt pedig nagyon remélem, hogy a&amp;nbsp;&lt;strong&gt;PHP&lt;/strong&gt;&amp;nbsp;közösség (végre) felébred és használni fogja a&amp;nbsp;&lt;i&gt;Teszt Alapú&lt;/i&gt;&amp;nbsp;(TDD) programozást.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;A&amp;nbsp;&lt;strong&gt;Yii&lt;/strong&gt;&amp;nbsp;legyen veletek.&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;img src="http://mehesz.net/downloads/shroomnail/shroomandail.png" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;" /&gt;&lt;/div&gt;&lt;div style="max-width: 65em;"&gt;&lt;i&gt;"Ismeret az nem cselekedet, csakis cselekedet a cselekedet"&lt;/i&gt;&amp;nbsp;- tdc10&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6823977672774886966-372812595569740117?l=yiihun.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://yiihun.blogspot.com/feeds/372812595569740117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://yiihun.blogspot.com/2010/09/kornyezetbarat-egysegteszteles.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/372812595569740117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6823977672774886966/posts/default/372812595569740117'/><link rel='alternate' type='text/html' href='http://yiihun.blogspot.com/2010/09/kornyezetbarat-egysegteszteles.html' title='Környezetbarát Egységtesztelés Meztelencsigákkal'/><author><name>imehesz</name><uri>http://www.blogger.com/profile/15316975230664109974</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6823977672774886966.post-8965945986493787138</id><published>2010-09-11T20:27:00.000-07:00</published><updated>2010-09-11T20:36:02.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='yii keretrenszer'/><category scheme='http://www.blogger.com/atom/ns#' term='yiiki'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Yiiki avagy WIKI a'la Yii</title><content type='html'>&lt;div id="wikiheader" style="margin-bottom:1em"&gt;&lt;div style="font-style:italic; margin-top: 3px"&gt;Egy alap WIKI készítese a Yii (PHP) keretrendszer segítségével.&lt;/div&gt;&lt;br /&gt;Ebben a rövidke leírásban azt szeretnénk bemutatni, hogy milyen egyszerű elkészíteni egy elegáns web-es alkalmazást a &lt;strong&gt;Yii&lt;/strong&gt; segítségével. Ha a későbbiekben igény lesz rá, természetesen belevághatunk kényesebb témákba is, mint például a biztonság, cache-elés, komolyabb AR (ActiveRecord&lt;a href="http://www.blogger.com/p/hungariian/w/edit/ActiveRecord"&gt;?&lt;/a&gt;) használat stb. A helyesírásért már itt szeretnék elnézést kérni ...&lt;/div&gt;&lt;h1&gt;&lt;a name="0._Bevezetés"&gt;0. Bevezetés&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Itt csak felsorolnék néhány alapvető (és igen fontos) fogalmat, amelyek ismerete szükséges : &lt;/p&gt;&lt;p&gt;- &lt;strong&gt;Objektum Orientált Programozás (PHP 5)&lt;/strong&gt;: A jelenleg stabil Yii 1.1-es verzió a PHP 5.1-en alapszik, tehát annak ismerete mindenképp szükséges. ( &lt;a href="http://hu.wikipedia.org/wiki/Objektumorient%C3%A1lt_programoz%C3%A1s" rel="nofollow"&gt;http://hu.wikipedia.org/wiki/Objektumorientált_programozás&lt;/a&gt; ) &lt;/p&gt;&lt;p&gt;- &lt;strong&gt;Adatbázis (SQL)&lt;/strong&gt;: A Yii, alapból sokféle adatbázis formátumot támogat. (Az itteni példában én a SQLite-ot választottam, mert nem igényel különösebben bonyolult szerver oldali beállítást) ( &lt;a href="http://hu.wikipedia.org/wiki/SQL" rel="nofollow"&gt;http://hu.wikipedia.org/wiki/SQL&lt;/a&gt; ) &lt;/p&gt;&lt;p&gt;- &lt;strong&gt;MVC (Model-View-Controller) avagy Modell-Nézet-Vezérlő&lt;/strong&gt;: A Yii az egy MVC-t szorosan követő keretrendszer. Dióhéjban annyit jelent, hogy az alkalmazás jól elkülöníthető 3 részre. Az M vagy modell, ami az adatbázis jellegű lekérdezéseket végzi, a C vagy vezérlő ami kapcsolatot teremt és feldolgoz felhasználók által bevitt információt és végül a V vagy nézet, ami pedig magát a megjelenítést végzi. Ilyen többek között a Ruby On Rails rendszer is.( &lt;a href="http://hu.wikipedia.org/wiki/MVC" rel="nofollow"&gt;http://hu.wikipedia.org/wiki/MVC&lt;/a&gt; ) &lt;/p&gt;&lt;p&gt;- &lt;strong&gt;Active Record&lt;/strong&gt; - ami tulajdonképpen "megszűnteti" a függőséget a különböző adatbázisok között és az adatbázis táblákat objektumokként kezeli. Ez a gyakorlatban azt jelenti, hogy mondjuk fejlesztői környezetben használhatunk SQLite-ot élesben pedig MySQL-t vagy MsSQL-t stb. ( angol: &lt;a href="http://en.wikipedia.org/wiki/Active_record_pattern" rel="nofollow"&gt;http://en.wikipedia.org/wiki/Active_record_pattern&lt;/a&gt; ) &lt;/p&gt;&lt;p&gt;Apache, Nginx és egyéb web szerverek beállításába nem szeretnénk itt belemenni. A programot a következő konfigurációval készítettük: &lt;/p&gt;&lt;p&gt;&lt;i&gt;- Ubuntu Linux (9.10)&lt;br /&gt;&lt;/i&gt;- Apache 2.x&lt;br /&gt;- SQLite 3&lt;br /&gt;- PHP 5.2.x&lt;br /&gt;- Yii 1.1.x&lt;/p&gt;&lt;p&gt;- Csomagoljuk ki a letöltött Yii-t a web szerverünk fő könyvtárába (pl. /var/www/yii ), a forráskód majd szintén a /var/www alá kerül (pl: /var/www/yiiki). &lt;/p&gt;&lt;p&gt;Az is fontos, hogy a Yii rendszer a parancssorból is futtatható legyen! (&lt;i&gt;PHP CLI&lt;/i&gt;) &lt;/p&gt;&lt;h1&gt;&lt;a name="1._Adatbázis_Felépítése"&gt;1. Adatbázis Felépítése&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;&lt;strong&gt;Adatbázis neve:&lt;/strong&gt; yiiki &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Táblák:&lt;/strong&gt; &lt;/p&gt;&lt;pre class="prettyprint"&gt;++++++++++++++++++++++++++&lt;br /&gt;+ pages                  +&lt;br /&gt;++++++++++++++++++++++++++&lt;br /&gt;+ id INT (auto_increment)+&lt;br /&gt;+ title VARCHAR(125)     +&lt;br /&gt;+ body TEXT              +&lt;br /&gt;+ revision INT           +&lt;br /&gt;+ created INT            +&lt;br /&gt;++++++++++++++++++++++++++&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;SQLite3:&lt;/strong&gt; CREATE TABLE pages (body TEXT, created integer, id INTEGER PRIMARY KEY, revision integer, title varchar(125)); &lt;/p&gt;&lt;h1&gt;&lt;a name="2._A_WEB-es_alkalmazás_létrehozása"&gt;2. A WEB-es alkalmazás létrehozása&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Az alap alkalmazás létrehozása rendkívül egyszerű, csak adjuk ki a kovetkező utasítást (a web szerver &lt;i&gt;root&lt;/i&gt; könyvtárában állva, (pl /var/www).  &lt;/p&gt;&lt;p&gt;&lt;tt&gt;./yii/framework/yiic webapp yiiki&lt;/tt&gt; &lt;/p&gt;&lt;pre class="prettyprint"&gt;imehesz@imehesz-laptop:/var/www$ ./yii/framework/yiic webapp yiiki&lt;br /&gt;Create a Web application under '/var/www/yiiki'? [Yes|No] yes&lt;br /&gt;    mkdir /var/www/yiiki&lt;br /&gt;    mkdir /var/www/yiiki/themes&lt;br /&gt;    mkdir /var/www/yiiki/themes/classic&lt;br /&gt;    mkdir /var/www/yiiki/themes/classic/views&lt;br /&gt;    mkdir /var/www/yiiki/themes/classic/views/layouts&lt;br /&gt;    mkdir /var/www/yiiki/themes/classic/views/system&lt;br /&gt; generate themes/classic/views/.htaccess&lt;br /&gt;    mkdir /var/www/yiiki/themes/classic/views/site&lt;br /&gt; generate index.php&lt;br /&gt;    mkdir /var/www/yiiki/css&lt;br /&gt; generate css/bg.gif&lt;br /&gt; generate css/form.css&lt;br /&gt; generate css/screen.css&lt;br /&gt; generate css/main.css&lt;br /&gt; generate css/ie.css&lt;br /&gt; generate css/print.css&lt;br /&gt;    mkdir /var/www/yiiki/assets&lt;br /&gt;    mkdir /var/www/yiiki/images&lt;br /&gt;    mkdir /var/www/yiiki/protected&lt;br /&gt;    mkdir /var/www/yiiki/protected/extensions&lt;br /&gt; generate protected/yiic.bat&lt;br /&gt;    mkdir /var/www/yiiki/protected/models&lt;br /&gt; generate protected/models/LoginForm.php&lt;br /&gt; generate protected/models/ContactForm.php&lt;br /&gt; generate protected/yiic.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/data&lt;br /&gt; generate protected/data/schema.sqlite.sql&lt;br /&gt; generate protected/data/schema.mysql.sql&lt;br /&gt; generate protected/data/testdrive.db&lt;br /&gt;    mkdir /var/www/yiiki/protected/controllers&lt;br /&gt; generate protected/controllers/SiteController.php&lt;br /&gt; generate protected/yiic&lt;br /&gt;    mkdir /var/www/yiiki/protected/config&lt;br /&gt; generate protected/config/main.php&lt;br /&gt; generate protected/config/test.php&lt;br /&gt; generate protected/config/console.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/commands&lt;br /&gt;    mkdir /var/www/yiiki/protected/commands/shell&lt;br /&gt;    mkdir /var/www/yiiki/protected/messages&lt;br /&gt; generate protected/.htaccess&lt;br /&gt;    mkdir /var/www/yiiki/protected/views&lt;br /&gt;    mkdir /var/www/yiiki/protected/views/layouts&lt;br /&gt; generate protected/views/layouts/main.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/views/site&lt;br /&gt; generate protected/views/site/login.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/views/site/pages&lt;br /&gt; generate protected/views/site/pages/about.php&lt;br /&gt; generate protected/views/site/index.php&lt;br /&gt; generate protected/views/site/contact.php&lt;br /&gt; generate protected/views/site/error.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/runtime&lt;br /&gt;    mkdir /var/www/yiiki/protected/tests&lt;br /&gt; generate protected/tests/WebTestCase.php&lt;br /&gt; generate protected/tests/phpunit.xml&lt;br /&gt; generate protected/tests/bootstrap.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/tests/report&lt;br /&gt;    mkdir /var/www/yiiki/protected/tests/functional&lt;br /&gt; generate protected/tests/functional/SiteTest.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/tests/fixtures&lt;br /&gt;    mkdir /var/www/yiiki/protected/tests/unit&lt;br /&gt;    mkdir /var/www/yiiki/protected/components&lt;br /&gt; generate protected/components/Controller.php&lt;br /&gt; generate protected/components/UserIdentity.php&lt;br /&gt; generate index-test.php&lt;br /&gt;&lt;br /&gt;Your application has been created successfully under /var/www/yiiki.&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Ha minden jól sikerült, akkor a &lt;i&gt;Your application has been created successfully under /var/www/yiiki&lt;/i&gt; - szerű üzenet jelenik meg, ami röviden annyit jelent, hogy az alap program sikeresen létrehozva a megadott mappa alatt. &lt;/p&gt;&lt;p&gt;Azt már itt érdemes megjegyezni, hogy a programunk már ebben a fázisban működőképes. Ha megtekintjük a URL-t egy böngészőben (pl &lt;a href="http://yiiki.peldaprogram.local/" rel="nofollow"&gt;http://yiiki.peldaprogram.local&lt;/a&gt;) akkor egy (remélhetőleg) üdvözlő képernyő fogad bennünket. &lt;/p&gt;&lt;h1&gt;&lt;a name="3._Az_alkalmazás_összekapcsolása_az_adatbázissal"&gt;3. Az alkalmazás összekapcsolása az adatbázissal&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;A Wiki-k többnyire nagyon egyszerű, monthatnánk butácska, programok, amik semmi mást nem csinálnak, csak oldalakat tárolnak és mutatnak meg. A problémát többféleképpen is meg lehetne oldani, még adatbázis használata nélkül is! De mi szeretnénk bemutatni, hogy mennyire egyszerű adatbázisokat kezelni Yii-vel. &lt;/p&gt;&lt;p&gt;A fő konfigurációs file a protected/config mappa alatt található és main.php a neve. Nyissuk is meg a kedvenc szövegszerkeztőnkkel. (mámrmint amelyiket programozásra használunk). Aki egyből a VIM-re gondolt, az kaphat egy piros pontot. Módosítsuk is az alábbiak szerint  &lt;/p&gt;&lt;p&gt;(&lt;strong&gt;Fontos&lt;/strong&gt;: az adatbázis file-t a &lt;i&gt;protected/data&lt;/i&gt; alá tettük) &lt;/p&gt;&lt;pre class="prettyprint"&gt;protected/config/main.php&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;'db'=&amp;gt;array(                                                                                                       &lt;br /&gt;            'connectionString' =&amp;gt; 'sqlite:protected/data/yiiki.sqlite',&lt;br /&gt;       ),&lt;br /&gt;...&lt;/pre&gt;&lt;p&gt;És ennyi ... &lt;/p&gt;&lt;h1&gt;&lt;a name="4._A_yiic_avagy_a_Yii_varázspálcája"&gt;4. A &lt;tt&gt;yiic&lt;/tt&gt; avagy a Yii varázspálcája&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Természetesen lehetne a fejlesztést a &lt;i&gt;yiic&lt;/i&gt; teljes hanyagolásával folytatni, de  használata mindenképpen megkönnyíti a programozást. A &lt;tt&gt;__ROOT__&lt;/tt&gt; könyvtárunkban egyszerűen adjuk ki a következő utasítást: &lt;/p&gt;&lt;p&gt;&lt;tt&gt;./protected/yiic shell&lt;/tt&gt; &lt;/p&gt;&lt;pre class="prettyprint"&gt;imehesz@imehesz-laptop:/var/www/yiiki$ ./protected/yiic shell&lt;br /&gt;Yii Interactive Tool v1.1 (based on Yii v1.1.0)&lt;br /&gt;Please type 'help' for help. Type 'exit' to quit.&lt;br /&gt;&amp;gt;&amp;gt; _&lt;/pre&gt;&lt;p&gt;Ha járatosak vagyunk valamelyik SQL parancssori programjával, akkor ez ismerős lehet. Segítséget a &lt;tt&gt;help [utasitas]&lt;/tt&gt;-sal lehet kérni. Vágjunk is bele. &lt;/p&gt;&lt;h2&gt;&lt;a name="4.1_A_Pages_(oldalak)_modell_létrehozása_a_yiic_segítségéve"&gt;4.1 A &lt;tt&gt;Pages&lt;/tt&gt; (oldalak) modell létrehozása a yiic segítségével&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Egyszerűen adjuk ki a következő parancsot (még mindig a &lt;tt&gt;shell&lt;/tt&gt;-ben vagyunk!) &lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;gt;&amp;gt; model Page pages&lt;br /&gt; generate models/Page.php&lt;br /&gt; generate fixtures/pages.php&lt;br /&gt; generate unit/PageTest.php&lt;br /&gt;&lt;br /&gt;The following model classes are successfully generated:&lt;br /&gt;  Page&lt;br /&gt;&lt;br /&gt;If you have a 'db' database connection, you can test these models now with:&lt;br /&gt;  $model=Page::model()-&amp;gt;find();&lt;br /&gt;  print_r($model);&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt; &lt;/pre&gt;&lt;p&gt;Nos, itt elég sok minden történt, szűrjük ki ami nekünk fontos lehet.  &lt;/p&gt;&lt;p&gt;&lt;tt&gt;model/Page.php&lt;/tt&gt; - ez nagyon fontos, ez lesz a modellünk, ami majd az adatbázisos lekérdezéseket végzi. &lt;/p&gt;&lt;pre class="prettyprint"&gt;fixtures/pages.php&lt;br /&gt;unit/PageTest.php&lt;/pre&gt;&lt;p&gt;- sajnos ez utóbbi kettővel nem fogunk foglalkozni (legalábbis ebben a cikkben nem), annyit érdemes megjegyezni, hogy a TDD-hez nyújt segítséget. (Test Driven Development - talán &lt;i&gt;Tesztelésen Alapuló Fejlesztés&lt;/i&gt;-nek lehetne nevezni - &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" rel="nofollow"&gt;http://en.wikipedia.org/wiki/Test-driven_development&lt;/a&gt; ) &lt;/p&gt;&lt;p&gt;A parancs lefutása után a program még arról is értesít minket, hogy ha be van állítva az adatbázis kapcsolatunk, ha akarjuk ki is próblhatjuk. Egyelőre tudjuk, hogy semmi nincs az adatbázisunkban, szóval nem sok értelme lenne a lekérdezésnek :) &lt;/p&gt;&lt;h1&gt;&lt;a name="5._Mi_is_az_a_CRUD?"&gt;5. Mi is az a CRUD?&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;Azzal, hogy elészítettük a &lt;i&gt;Page&lt;/i&gt; modellünket, még semmi, böngészőben látható eredményt nem sikerült produkálnunk. No és itt jön a híres &lt;strong&gt;CRUD&lt;/strong&gt; a képbe,  &lt;/p&gt;&lt;p&gt;Create - Létrehoz &lt;/p&gt;&lt;p&gt;Read - (Be)olvas &lt;/p&gt;&lt;p&gt;Update - Frissít &lt;/p&gt;&lt;p&gt;Delete - Töröl &lt;/p&gt;&lt;p&gt;Ezeket az utasításokat pedig az adatbázisunk (és Pages táblánk) egy-egy rekordjához fogjuk használni. &lt;/p&gt;&lt;h2&gt;&lt;a name="5.1_A_Vezérlő_és_Nézet_létrehozása_a_CRUD_paranccsal"&gt;5.1 A Vezérlő és Nézet létrehozása a CRUD paranccsal&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Még mindig a &lt;tt&gt;shell&lt;/tt&gt;-ben állva adjuk ki a következő parancsot: &lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;gt;&amp;gt; crud Page&lt;br /&gt; generate PageController.php&lt;br /&gt; generate PageTest.php&lt;br /&gt;    mkdir /var/www/yiiki/protected/views/page&lt;br /&gt; generate create.php&lt;br /&gt; generate update.php&lt;br /&gt; generate index.php&lt;br /&gt; generate view.php&lt;br /&gt; generate admin.php&lt;br /&gt; generate _form.php&lt;br /&gt; generate _view.php&lt;br /&gt;&lt;br /&gt;Crud 'page' has been successfully created. You may access it via:&lt;br /&gt;http://hostname/path/to/index.php?r=page&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt; &lt;/pre&gt;&lt;p&gt;Aha, itt már lényegesen több minden történt mint a &lt;i&gt;modell&lt;/i&gt; létrehozásánál. Láthatjuk, hogy maga a &lt;i&gt;Controller&lt;/i&gt; (vezérlő) is elkészült, egy újabb teszt file, a &lt;tt&gt;view/page&lt;/tt&gt; mappa is, ahol a rendszer fogja tárolni a szükséges nézet file-okat (create.php, update.php, &lt;i&gt;view.php stb). &lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Megj:&lt;/strong&gt; ( A vezérlő külön is elkészíthető a &lt;tt&gt;controller page&lt;/tt&gt; paranccsal. &lt;/p&gt;&lt;h1&gt;&lt;a name="6._Gyors_áttekintés"&gt;6. Gyors áttekintés&lt;/a&gt;&lt;/h1&gt;&lt;p&gt;A programunk jelenlegi állapotában mindenre kész. Tudunk oldalakat listázni, készíteni és törölni. Hogy megbizonyosodjunk róla, böngészőnkkel látogassuk meg a következő URL-t: &lt;/p&gt;&lt;p&gt;&lt;tt&gt;http://yiiki.lenny.local/index.php?r=page&lt;/tt&gt; &lt;/p&gt;&lt;p&gt;Na de mi nem elégszünk meg ennyivel, hiszen egy igazi Wiki-t szeretnénk készíteni. Jöhet a testreszabás ... &lt;/p&gt;&lt;h1&gt;&lt;a name="7._Alkalmazásunk_testreszabása"&gt;7. Alkalmazásunk testreszabása&lt;/a&gt;&lt;/h1&gt;&lt;h2&gt;&lt;a name="7.1_A_beviteli_form_módositasa"&gt;7.1 A beviteli form módositasa&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;Ha most probálnánk egy &lt;i&gt;Oldalt&lt;/i&gt; készíteni, akkor azonnal észlelnénk, hogy a beviteli form-on egy csomó olyan mező van, amit nem szeretnénk kézzel minden egyes alkalommal kitölteni, illetve elvárnánk a programunktól, hogy saját maga töltse ki. Ilyen például a &lt;i&gt;created&lt;/i&gt; vagy a &lt;i&gt;revision&lt;/i&gt; mező. &lt;/p&gt;&lt;p&gt;&lt;a href="http://yiiki.lenny.local/index.php?r=page/create" rel="nofollow"&gt;http://yiiki.lenny.local/index.php?r=page/create&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Módosítsuk is a form-unkat (&lt;tt&gt;protected/views/page/_form.php&lt;/tt&gt;) az alábbiak szerint. &lt;/p&gt;&lt;pre class="prettyprint"&gt;&amp;lt;div class="form"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php echo CHtml::beginForm(); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;p class="note"&amp;gt;Fields with &amp;lt;span class="required"&amp;gt;*&amp;lt;/span&amp;gt; are required.&amp;lt;/p&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php echo CHtml::errorSummary($model); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;div class="row"&amp;gt;&lt;br /&gt; &amp;lt;?php echo CHtml::activeLabelEx($model,'title'); ?&amp;gt;&lt;br /&gt; &amp;lt;?php echo CHtml::activeTextField($model,'title',array('size'=&amp;gt;60,'maxlength'=&amp;gt;125)); ?&amp;gt;&lt;br /&gt; &amp;lt;?php echo CHtml::error($model,'title'); ?&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="row"&amp;gt;&lt;br /&gt; &amp;lt;?php echo CHtml::activeLabelEx($model,'body'); ?&amp;gt;&lt;br /&gt; &amp;lt;?php echo CHtml::activeTextArea($model,'body',array('rows'=&amp;gt;6, 'cols'=&amp;gt;50)); ?&amp;gt;&lt;br /&gt; &amp;lt;?php echo CHtml::error($model,'body'); ?&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div class="row buttons"&amp;gt;&lt;br /&gt; &amp;lt;?php echo CHtml::submitButton($model-&amp;gt;isNewRecord ? 'Create' : 'Save'); ?&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php echo CHtml::endForm(); ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&amp;lt;!-- form --&amp;gt;&lt;/pre&gt;&lt;h2&gt;&lt;a name="7.2_A_Page_Modell_szabályainak_beállítása"&gt;7.2 A Page Modell szabályainak beállítása&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A &lt;i&gt;Page&lt;/i&gt; (Oldal) modellünkre is ráfér egy kis farigcsálás. A &lt;i&gt;yiic&lt;/i&gt; többnyire kitalálta, hogy milyen szabályokat hozzon létre a különböző mezőkhöz, a gondolatolvasástól azért még messze van. Mi ugyanis azt szeretnénk, ha az Oldalunk címébe csakis betűk, számok, vagy aláhúzás jel szerepelhessen. (Egy jó kis bővítés lenne, ha a programunk automatikusan felülírná a bevitt a címet, de az egyszerűség kedvéért itt egy szabályt hozunk létre) &lt;/p&gt;&lt;p&gt;protected/models/Page.php &lt;/p&gt;&lt;pre class="prettyprint"&gt; /**&lt;br /&gt; * @return array validation rules for model attributes.&lt;br /&gt; */&lt;br /&gt;public function rules()&lt;br /&gt;{&lt;br /&gt; // NOTE: you should only define rules for those attributes that&lt;br /&gt; // will receive user inputs.&lt;br /&gt; return array(&lt;br /&gt;  array('created, revision', 'numerical', 'integerOnly'=&amp;gt;true),&lt;br /&gt;  array('title', 'length', 'max'=&amp;gt;125),&lt;br /&gt;                      array('title', 'required', 'message'=&amp;gt;'Cím nem lehet üres!'),&lt;br /&gt;                      array('title', 'unique'),&lt;br /&gt;                      array('title',&lt;br /&gt;                              'match',&lt;br /&gt;                              'pattern'=&amp;gt;'/^[A-Za-z0-9_]+$/',&lt;br /&gt;                              'message' =&amp;gt; 'Csak számokat, betűket és `_` jelet használhatsz! Hehe' ),&lt;br /&gt;                array('body', 'safe'),&lt;br /&gt; );&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;Az itt használt szabályok elég egyértelműek, de ha valaki jobban bele szeretne mélyülni itt olvashat róluk bővebben: &lt;a href="http://www.yiiframework.com/doc/cookbook/56/" rel="nofollow"&gt;http://www.yiiframework.com/doc/cookbook/56/&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Itt még azt is megfigyelhetjük, hogy hogyan kell a programunkat magyarul tanítani ;) &lt;/p&gt;&lt;h2&gt;&lt;a name="7.3_A_beforeSave()_és_save()_modell_függvények_használata/fe"&gt;7.3 A &lt;i&gt;beforeSave()&lt;/i&gt; és &lt;i&gt;save()&lt;/i&gt; modell függvények használata/felülírása&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;A modelljeink, amik a programunkban az adatbázis lekérdezéseket kezelik, mindenféle függyv
