<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>zoltanhosszu.com &#124; blog</title>
	<atom:link href="http://blog.zoltanhosszu.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zoltanhosszu.com</link>
	<description>Zoltan Hosszu&#039;s blog about xHTML, CSS, JavaScript, PHP</description>
	<lastBuildDate>Wed, 07 Apr 2010 20:07:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Ingyenes ikon lelőhelyek</title>
		<link>http://blog.zoltanhosszu.com/2010/04/ingyenes-ikon-lelohelyek/</link>
		<comments>http://blog.zoltanhosszu.com/2010/04/ingyenes-ikon-lelohelyek/#comments</comments>
		<pubDate>Wed, 07 Apr 2010 20:00:03 +0000</pubDate>
		<dc:creator>Zoltan</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[free]]></category>
		<category><![CDATA[icon]]></category>
		<category><![CDATA[ikon]]></category>
		<category><![CDATA[pack]]></category>

		<guid isPermaLink="false">http://blog.zoltanhosszu.com/?p=141</guid>
		<description><![CDATA[Mostanában kicsit gondban voltam, amikor weblapokat készítettem: kezdtem megunni a meglévő ikonkészleteimet. Variálgattam őket, de mivel a gyűjteményem nagy részét a Smashing Magazin ingyenes ikonpakkjai alkották, kezdtek egyhangúvá válni a designok. Ez pedig az egyik legrosszabb dolog, ami egy designerrel történhet. Gondoltam körülnézek a neten, hátha találok valamit, amivel fel tudom dobni az összhatást, és [...]]]></description>
			<content:encoded><![CDATA[<p>Mostanában kicsit gondban voltam, amikor weblapokat készítettem: kezdtem megunni a meglévő ikonkészleteimet. Variálgattam őket, de mivel a gyűjteményem nagy részét a <a href="http://www.smashingmagazine.com/">Smashing Magazin</a> <a href="http://www.smashingmagazine.com/category/freebies/">ingyenes ikonpakkjai</a> alkották, kezdtek egyhangúvá válni a designok. Ez pedig az egyik legrosszabb dolog, ami egy designerrel történhet.</p>
<p>Gondoltam körülnézek a neten, hátha találok valamit, amivel fel tudom dobni az összhatást, és mondhatom, sikerrel jártam: több millió friss, igényes és főleg ingyenes ikont találtam. Hogy hol?<br />
<span id="more-141"></span></p>
<h3>FindIcons</h3>
<h3><a href="http://findicons.com/"><img class="size-medium wp-image-181 alignnone" style="float: right; margin: 5px 0px 5px 10px; border: 1px solid black;" title="icon_findicons" src="http://blog.zoltanhosszu.com/wp-content/uploads/icon_findicons-300x104.jpg" alt="" width="300" height="104" /></a></h3>
<p>A keresésem fő forrása a <a href="http://findicons.com/">FindIcons </a>nevű, ~200 000-es ikon- és ~2000-es ikonpakk-adatbázissal rendelkező gyűjtőhely. Nagyon szépen lehet filterezni a keresést, kulcsszó, méret, licensz és stílus szerint. Csak ajánlani tudom, hibátlan választás.</p>
<p style="text-align: center;">
<h3>IconFinder</h3>
<h3><a href="http://www.iconfinder.net/"><img class="aligncenter size-medium wp-image-161" style="float: left; margin: 5px 10px 5px 0px; border: 1px solid black;" title="icon_iconfinder" src="http://blog.zoltanhosszu.com/wp-content/uploads/icon_iconfinder-300x104.jpg" alt="" width="300" height="104" /></a></h3>
<p>Hasonlóan igényes, és még a nevében is könnyen összekeverhető a FindIcons-hoz az IconFinder, a maga ~160 000 ikon és kb 500 ikoncsomag bázisával. Szintén kereshető kulcsszó, méret és licensz szerint, ezen kívül van még egy <a href="http://www.iconfinder.net/free_icons">százezres óriáscsomag</a>, ami azért elég tetemes.</p>
<p style="text-align: center;">
<h3>We Love Icons</h3>
<h3><a href="http://weloveicons.com/"><img class="aligncenter size-medium wp-image-201" style="float: right; margin: 5px 0px 5px 10px; border: 1px solid black;" title="icon_weloveicons" src="http://blog.zoltanhosszu.com/wp-content/uploads/icon_weloveicons-300x117.jpg" alt="" width="300" height="117" /></a></h3>
<p>A <a href="http://weloveicons.com/">We Love Icons</a> oldal inkább egy gyűjtő, mint rendszerező hely, hiszen külső oldalakra (pl deviantArt) mutat. Jól átválogatott gyűjtemény, ahova tényleg csupa igényes csomag kerül ki, kb 450 csomag. Egyetlen hibájának talán azt lehet felróni, hogy a kereshetőség nem elég mély, ezért sokszor nem lehet tudni, hogy az adott ikoncsomag használható-e üzleti célra.</p>
<p style="text-align: center;">
<h3>WebAppers</h3>
<p>A <a href="http://www.webappers.com/">WebAppers</a> nem csak <a href="http://www.webappers.com/category/design/icons/">ikonok</a> gyűjtőhelye: mindenféle webfejlesztéshez hasznos dolgot rendszereznek  itt, kezdve a Flash videólejátszóknál, át a jQuery-s képgalériákon,  egészen a betűtípusokig. Ez bizony kötelező a Google Readerben!</p>
<h3>Icon Archive</h3>
<p>A fentieknél kisebb és kevésbé igényes oldallal rendelkező, de sokszor hasznos az <a href="http://www.iconarchive.com/">Icon Archive</a>, ahol nagyjából 30 000 ikon található.</p>
<p>Egyelőre ennyi elég lesz. <img src='http://blog.zoltanhosszu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zoltanhosszu.com/2010/04/ingyenes-ikon-lelohelyek/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: Az alapok és az effektek</title>
		<link>http://blog.zoltanhosszu.com/2010/01/jquery-az-alapok-es-az-effektek/</link>
		<comments>http://blog.zoltanhosszu.com/2010/01/jquery-az-alapok-es-az-effektek/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 19:22:02 +0000</pubDate>
		<dc:creator>Zoltan</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[alapok]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://blog.zoltanhosszu.com/?p=90</guid>
		<description><![CDATA[Mint már az előző postban említettem, egyre többet használom a jQuery-t a honlapok kódolásakor, ezért úgy döntöttem, hogy megpróbálom néhány írásban összefoglalni a nyelv alapjait. Ez az első ilyen cikk, ezért azoknak ajánlom olvasásra, akik még egyáltalán nem foglalkoztak ezzel a kiegészítővel, vagy akik nincsenek tisztában az effektek működésével. Írásomban összeszedem, hogy miként is működik [...]]]></description>
			<content:encoded><![CDATA[<p>Mint már <a href="http://blog.zoltanhosszu.com/2010/01/jquery-es-a-jquery-ui/">az előző postban</a> említettem, egyre többet használom a <strong>jQuery</strong>-t a honlapok kódolásakor, ezért úgy döntöttem, hogy megpróbálom néhány írásban összefoglalni a nyelv alapjait. Ez az első ilyen cikk, ezért azoknak ajánlom olvasásra, akik még egyáltalán nem foglalkoztak ezzel a kiegészítővel, vagy akik nincsenek tisztában az effektek működésével.</p>
<p>Írásomban összeszedem, hogy <strong>miként is működik egy jQuery program</strong> és hogy <strong>mik a legalapvetőbb effekt utasítások</strong>, amiket használni érdemes és kell. Akik egyáltalán nincsenek tisztában a <strong>HTML kóddal</strong> és az alapvető <strong>Javascript nyelvvel</strong>, azok először ezeknek nézzenek utána, mert ahhoz, hogy az ember megértsen egy komplexebb nyelvet, jobb ha ismeri annak az alapjait. Persze azért nem kell az Assembly-vel kezdeni! <img src='http://blog.zoltanhosszu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><span id="more-90"></span>A Javascripttől eltérően a jQuery parancsok elég összetettek tudnak lenni, főleg mivel ezt a library-t azért hozták létre, hogy meggyorsítsa, megkönnyítse a webprogramozást, és hogy minél kevesebb sor megírásával lehessen létrehozni minél felhasználóbarátabb oldalakat. Minden parancs így néz ki:</p>
<pre class="brush:js">$(DOM elem).valami();</pre>
<ul>
<li>A <strong>$ jel</strong> a &#8220;jQuery&#8221; rövidítése, ez jelzi a JS számára, hogy itt most egy jQuery objektumról lesz szó. Ha mondjuk használtál már Ruby on Rails-t akkor ismerős lehet ez a fajta jelölés. Lényegében ennyi, de érdemes még tudni, hogy a $ helyettesíthető a jquery kiírásával, tehát: jquery(DOM elem).valami();</li>
<li>A <strong>(DOM elem)</strong> az a HTML elem amire hivatkozol a jQuery parancsban. Ezen az elemen fog végrehajtódni a meghívott függvény</li>
<li>A <strong>.valami();</strong> a jQuery függvény, amely meghívásra kerül. Lehet ez a legegyszerűbb hide(), ami eltünteti a megnevezett elemet, vagy egy összetett AJAX hívás is.</li>
</ul>
<p>Tulajdonképpen ez volt a legelrettentőbb rész. <img src='http://blog.zoltanhosszu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Érdemes tudni, hogy <strong>egy DOM elemhez több függvény is rendelhető</strong>, tehát a <em>$(DOM elem).valami1().valami2();</em> is nagyon szépen fog működni; és ebben van az igazi potenciál. Most, hogy ezt megértettük nézzünk meg a legegyszerűbb függvényeket:<strong> az effekteket</strong>.</p>
<h3><strong>Effekt függvények</strong></h3>
<p>A beépített effekt függvények nagy része a következő felépítéssel működik:</p>
<pre class="brush:js">$(elem).effekt([speed, callback]);</pre>
<ul>
<li>A függvények paraméterei opcionálisak, de közülük a <strong>speed, azaz sebesség</strong> az amit legtöbbször használni kell. Meg lehet adni ezt &#8216;slow&#8217;, &#8216;normal&#8217; és &#8216;fast&#8217; értékeken túl milliszekundumban is (1000 ms = 1 másodperc). Ez lesz az az időtartam, ami alatt a függvény végrehajtódik; ez a lefutási idő.</li>
<li>A <strong>callback, vagyis visszahívás</strong> paraméterben megadható, hogy mi történjen miután lefutott a függvény. Például amint véget ér az adott parancs, visszakapjuk egy alert()-ben a számolás értékeit.</li>
</ul>
<h3><strong>Volt, nincs</strong> (show(), hide(), toggle())<strong><br />
</strong></h3>
<p>Szerencsére a jQuery függvényei többsége nevében hordozza a funkcióját is, ezért ha nem is ismered a függvényt, nagyon gyorsan rá lehet jönni a működésére. Így van ez a <strong>show()</strong> és a <strong>hide()</strong> parancsoknál is: míg előbbi megjelenít egy rejtett elemet, utóbbi eltünteti a célelemét. Mindkét függvény használható speed és callback paraméterrel és nélküle, de fontos megjegyezni, hogy a sebesség paraméter nélkül csak megjelenik/eltűnik a kiválasztott DOM elem; megadásakor azonban egy kis animációt kap.</p>
<p>A <strong>toggle()</strong> egy kicsiben eltér a show() és hide() függvényketől, ugyanis ez tulajdonképpen a kettő kombinációja. Paramétereinek megadhatjuk a már ismert speed és callback paramétereket, de egy kifejezést is (pl. <em>osztas++ % 2 == 0</em>, azaz ha az &#8220;osztas&#8221; változó kettővel történő maradékos osztásának eredménye 0), amely teljesülésekor végrehajtódik az utasítás.</p>
<p>Lássunk is egy rövid példát. HTML kód:</p>
<pre class="brush:php"><a id="show">Jelenítsd meg (show)</a>
<a id="hide">Tüntesd el (hide)</a>
<a id="toggle">Jelenítsd meg és tüntesd el (toggle)</a>
</pre>
<p>jQuery kód:</p>
<pre class="brush:js">$('a#show').click(function() {
  $('p.pelda_1').show();
});
$('a#hide').click(function() {
  $('p.pelda_1').hide();
});
$('a#toggle').click(function() {
  $('p.pelda_1').toggle('slow');
});
</pre>
<p>A kis programunk mindössze annyit csinál, hogy a megadott linkekre való kattintáshoz  (click() függvény [erről egy későbbi postban]) rendel show, hide és toggle effekteket. <a href="http://blog.zoltanhosszu.com/pelda/pelda_1.html" target="_blank"><strong>Itt nézheted meg</strong> </a>működés közben a demot. A show és hide nem kapott speed paramétert, míg a toggle-re tettem, csak azért, hogy lássátok, hogy milyen is az. <img src='http://blog.zoltanhosszu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3><strong>Csúszkálás </strong>(slideDown(), slideUp(), slideToggle())</h3>
<p>A slide függvények nagyon hasonlóan működnek a show, hide függvényekhez, lényegében annyiban különböznek, hogy míg az előbbiek a speed megadásával függőleges és vízszintes irányba animálták a függvényt, a slide függvények csak függőleges irányba teszik ezt. Nem ér meg külön példát, a <a href="http://docs.jquery.com/Effects/slideToggle#speedcallback" target="_blank">jQuery dokumentációban</a> van róluk bőven leírás, példával.</p>
<h3><strong>Eltűnés/feltűnés </strong>(fadeIn(), fadeOut(), fadeToggle())</h3>
<p>Eljutottunk egyik kedvencemhez: a <strong>fadeIn()</strong>, <strong>fadeOut()</strong>, <strong>fadeTo()</strong> ugyanis az a függvényhármas, amelyiket a legnagyobb előszeretettel használom. Szerintem baromi jól tud kinézni egy jó helyre rakott, szépen animálódó üzenet a usernek, főleg ha az ugyanilyen szépen be is csukódik utána. A fadeTo() a paraméterben kapott értékig csökkenti a függvény láthatóságát, míg a fadeIn() és fadeOut() a megadott sebességgel csökkenti az elem opacity CSS értékét, majd mikor ez elért a 0-hoz, rádob egy &#8220;display: none&#8221;-t, tehát eltűnteti teljesen, hogy ne foglalja a helyet. Na ez gondokat okozhat néha.</p>
<p>A fade effektek egyik fontos tulajdonsága, hogy míg az eddig megismert függvények folyamatosan &#8220;nyitják ki&#8221; a célobjektumot, ezzel lentebb tolva/fentebb húzva az alatta és körülötte lévő elemeket; a fade az animáció befejeztével és kezdetekor <strong>a DOM elem elfoglalja a megfelelő méretű helyét és így tűnik el(ő)</strong>. Ez azt jelenti, hogy ha egy oldal közepén lévő elemet animálsz meg fade-del, akkor az animációs idő egy időpillanatában ugrani fog egyet az oldal magassága/szélessége, erre pedig figyelni kell mert zavaró lehet!</p>
<p>A <a href="http://blog.zoltanhosszu.com/pelda/pelda_2.html" target="_blank"><strong>fade-hez készített </strong><strong>példában</strong></a> az eltüntetendő elem után raktam egy másikat, hogy lássátok miről beszéltem pontosan. Megoldásként vagy azt javaslom, hogy olyan elemeknél használjátok a függvényt, amik nincsenek körülvéve sok másik elemmel, vagy CSS-sel pozicionáljátok be az elemet egy felsőbb rétegre.</p>
<h3><strong>A központi effekt </strong>(animate() és stop())</h3>
<p>Az összes eddig felsorolt effekt függvény visszavezethető egy központi animációs függvényre, az <strong>animate()</strong>-re. Ez az amivel mi magunk is létrehozhatunk hasonló mozgásokat a DOM elemekre, csupán egy kis CSS tudás kell hozzá. Egyszerűen az animate() paraméterei között meg kell adnunk, hogy mely CSS tulajdonságokat változtassa meg a függvényünk; például a 400px széles és magas &lt;p&gt; csökkenjen 200&#215;200-ra, a láthatósága pedig legyen fele:</p>
<pre class="brush:js">$('a#animald').click(function() {
  $('p.pelda_3').animate({width: "200px", height: "200px", opacity: 0.5}, 1500);
});</pre>
<p><a href="http://blog.zoltanhosszu.com/pelda/pelda_3.html" target="_blank"><strong>Itt a kipróbálható példa</strong></a>. Az animate() az egyik legfontosabb effekt, hiszen ezzel nagyon komplex animációkat hozhatunk létre, de vannak korlátok; a háttérképet például csak vízszintesen lehet animálni, ami kicsit idegesítő tud lenni, szerencsére azonban <a href="http://plugins.jquery.com/project/backgroundPosition-Effect" target="_blank">van erre egy plugin</a>.</p>
<p>Feltűnhet, hogy a példában alkalmaztam a <strong>stop()</strong> függvényt az animate() előtt (a függvények összefűzhetőek, mint már említettem!); ez annyit csinál, hogy megállítja az éppen zajló animate()-et, így adva szabad utat a következő animáló függvénynek. A stop()-ról van egy egészen jó példa a <a href="http://docs.jquery.com/Effects/stop#clearQueuegotoEnd" target="_blank">jQuery dokumentációban</a>.</p>
<p>Mára ennyi. Következő alkalommal megnézünk egy-két fontos <strong>esemény-függvényt</strong> (pl. rákattintás, fókuszba kerülő elemek) és néhány <strong>selectort </strong>(ezekkel tudunk bizonyos elemekre hivatkozni és kezelni jobban a DOM elemeket). Addig is gyakoroljatok ezekkel! <img src='http://blog.zoltanhosszu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ha valami nem világos, nyugodtan kérdezzetek a hozzászólásoknál!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zoltanhosszu.com/2010/01/jquery-az-alapok-es-az-effektek/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>jQuery és a jQuery UI</title>
		<link>http://blog.zoltanhosszu.com/2010/01/jquery-es-a-jquery-ui/</link>
		<comments>http://blog.zoltanhosszu.com/2010/01/jquery-es-a-jquery-ui/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 20:06:53 +0000</pubDate>
		<dc:creator>Zoltan</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jquery ui]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://blog.zoltanhosszu.com/?p=63</guid>
		<description><![CDATA[A napokban jelent meg az új, 1.4-es verzió jQuery JavaScript fejlesztői környezetből, ezért úgy gondoltam ideje egy bejegyzésben megemlékeznem róla nagy vonalakban. Mi az a jQuery? Mire jó? Használjuk vagy ne használjuk? jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. [...]]]></description>
			<content:encoded><![CDATA[<p>A napokban jelent meg az új, 1.4-es verzió<a href="http://jquery.com/"> jQuery</a> JavaScript fejlesztői környezetből, ezért úgy gondoltam ideje egy bejegyzésben megemlékeznem róla nagy vonalakban. Mi az a jQuery? Mire jó? Használjuk vagy ne használjuk?</p>
<blockquote><p>jQuery is a fast and concise JavaScript Library that simplifies HTML document traversing, event handling, animating, and Ajax interactions for rapid web development. <strong>jQuery is designed to change the way that you write JavaScript.</strong></p>
<p>- jQuery.com</p></blockquote>
<p>Láttátok a <a href="http://www.zoltanhosszu.com/#portfolio">főoldalon a portfólióm</a> részt? Nagyjából egy óra alatt megvolt, a nulláról. Vagy a <a href="http://www.webidea.hu/" target="_blank">Webidea</a> legördülő menüit? Fél óra. Sorolhatnám az ehhez hasonló példákat, vagy írhatnék a végtelen felhasználási lehetőségről, de <a href="http://net.tutsplus.com/tutorials/javascript-ajax/jquery-animations-a-7-step-program/" target="_blank">ezzel</a> <a href="http://www.smashingmagazine.com/2009/08/23/50-useful-new-jquery-techniques/" target="_blank">sokan</a> <a href="http://net.tutsplus.com/tutorials/javascript-ajax/15-resources-to-get-you-started-with-jquery-from-scratch/" target="_blank">foglalkoztak</a> már, így inkább egy kicsit az általános működésről és a <a href="http://www.jqueryui.com/" target="_blank">jQuery User Interface</a>-ről, azaz a jQuery-hez fejlesztett grafikus segédkörnyezetről írnék.</p>
<p><span id="more-63"></span>A <strong>jQuery</strong> a(z egyik) <strong>leghasznosabb</strong> JavaScript fejlesztői környezet, amivel valaha dolgom volt. Ez a mondat bátran hagyhatja el számat, mert a cucc használata annyival megkönnyíti a webfejlesztési tevékenységem, mint például a Google a böngészést. Nagy szavak, de mindjárt meggyőzlek benneteket. Nagyjából egy éve használom, ez idő alatt rengeteg hasznos információt megtanultam róla: az alapvető működést, a programozást egyszerűsítő funkcióit; a &#8220;hogyan&#8221;-ra és a &#8220;hol&#8221;-ra jöttem rá. Nem állítom, hogy nincsenek még nekem is kisebb sötét foltok, de azért már elég jól eligazodom benne. Tekintsük át, hogy mit tud ez az 50 kbyte-os kis JS library.</p>
<p>Az első és talán legfontosabb tulajdonsága a <strong><a href="http://www.w3schools.com/HTMLDOM/default.asp" target="_blank">DOM</a> megváltozott kezelésében</strong> van. Amikor egy JavaScript alkalmazást írsz és sok HTML elemre kell hivatkozni és azokkal operálni, elég nehézkes és egy idő után átláthatatlan lesz a kód. Tegyük fel, hogy egy űrlapot kezelsz éppen és a benne lévő 3 &lt;label&gt; színét szeretnéd lecserélni, mert a felhasználó elfelejtette kitölteni a mezőket. Az űrlap:</p>
<pre class="brush:php"><label id="elsomezo" for="elsoinput">Első mező:</label>
<input name="elsoinput" />
<label id="masodikmezo" for="masodikinput">Második mező:</label>
<input name="elsoinput" />
<label id="harmadikmezo" for="harmadikinput">Harmadik mező:</label>
<input name="harmadikinput" /></pre>
<p>Ezt sima JS-ben így csinálod:</p>
<pre class="brush:js">document.getElementById("elsomezo").style.color = 'red';
document.getElementById("masodikmezo").style.color = 'red';
document.getElementById("harmadikmezo").style.color = 'red';</pre>
<p>Míg jQuery-ben:</p>
<pre class="brush:js">$('label#elsomezo, label#masodikmezo, label#harmadikmezo').css('color', 'red');</pre>
<p>Melyik tűnik egyszerűbb és elegánsabb megoldásnak? Innen már csak azt kell elképzelni, hogy ha egy három soros kódon ennyit tudtunk egyszerűsíteni, akkor mi lesz a 4-500 soros JS alkalmazásokkal!</p>
<p>A második, szintén fontos tulajdonság a <strong>beépített effektek</strong> létezése. Egy sor beírásával tűnheteted el, hozhatod elő, csukhatod be és nyithatod ki a HTML elemeket, összesen 9 beépített effekt áll rendelkezésre. Ezeken túl használható még az alap animáló függvény, amiben beállíthatod, hogy milyen módon mozogjon egy elem, például az alaphelyzetből egy elfehéredéssel csukódjon össze, miközben a betűmérete is folyamatosan csökken. Egy rövid demonstráló példa:<br />
<script type="text/javascript">// <![CDATA[
      $(document).ready(function() { $('a.pelda').click(function(){ $('blockquote.pelda').slideToggle(); }); });
// ]]&gt;</script><br />
<a style="cursor: pointer;" class="pelda">Kattints rám, hogy eltűntessem/előhozzam az alábbi bekezdést-t</a></p>
<blockquote class="pelda"><p>Csukj be, nyiss ki!</p></blockquote>
<p>A forrása pedig:</p>
<pre class="brush:js">$('a.pelda').click(function(){
$('blockquote.pelda').slideToggle();
});</pre>
<p>Ugye, hogy milyen egyszerű? Vajon mennyi idő lenne ezt megírni szimpla JavaScripttel?</p>
<p>A jQuery önmagában egy olyan számtalan extra tulajdonsággal rendelkező eszköz, amit minden webfejlesztőnek ismernie kéne, hogy sokkal sokszínűbb, interaktívabb és használhatóbb weboldalakat készíthessenek vele. Az 1.4-es verzió megjelenésével pedig újabb lehetőségeket adtak a kezünkbe: a <a href="http://api.jquery.com/category/version/1.4/" target="_blank">változtatások dokumentációja</a> 16 teljesen új függvényt és több tucat egyéb fejlesztést tartalmaz.</p>
<p>Térjünk rá a<strong> jQuery UI</strong>-re. Mint már említettem, ez a jQuery-hez fejlesztett grafikus környezet: itt jön képbe az interaktív weboldal, hiszen olyan extrákat tesz hozzá ez a kis plugin az alap programhoz, mint például a <a href="http://www.jqueryui.com/demos/draggable/" target="_blank">mozgatható</a>, az <a href="http://www.jqueryui.com/demos/resizable/" target="_blank">átméretezhető</a>, vagy a <a href="http://www.jqueryui.com/demos/sortable/" target="_blank">rendezhető sorrendű</a> HTML elemek. Ezen felül jó néhány kis widget (<a href="http://www.jqueryui.com/demos/datepicker/" target="_blank">dátum választó</a>, <a href="http://www.jqueryui.com/demos/dialog/" target="_blank">felugró ablak kezelő</a>, <a href="http://www.jqueryui.com/demos/slider/" target="_blank">csúszka</a> és egyebek) valamint számtalan felturbózott jQuery <a href="http://www.jqueryui.com/docs/Effects/Methods" target="_blank">effekt</a> áll rendelkezésére a fejlesztőnek.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-74" title="Alert vs jQuery UI" src="http://blog.zoltanhosszu.com/wp-content/uploads/alertvsui.jpg" alt="" width="550" height="204" /><br />
<small><em>Melyik a meggyőzőbb?</em></small></p>
<p>A jQuery UI hasznos kiegészítő társa a jQuery-nek, mindenképpen ajánlott egy komolyabb portál elkészítéséhez, de akár a saját weboldalon is hasznos lehet, főleg mivel a <a href="http://www.jqueryui.com/download" target="_blank">plugin letöltésénél</a> teljesen személyre szabható, hogy melyik funkciókat szeretnénk a UI-n belül használni, így nem kell a felesleges függvények letöltésével terhelni a szervert.</p>
<p>A kérdés tehát nem az, hogy a webfejlesztőknek használnia kéne-e a jQuery-t, hanem az, hogy feltegyék-e mellé a jQuery UI-t is. Az 1.4-es fejlesztői környezet már annyira sokrétű és fejlett, hogy aki nem is gondolkodott el a használatán, az pont olyan, mint aki szándékosan levágja a fél karját, csak hogy megnehezítse a saját dolgát. Aki jobban el akar mélyedni a jQuery-ben, annak ajánlom a <a href="http://docs.jquery.com/Main_Page" target="_blank">teljes dokumentációt</a> és a <a href="http://www.smashingmagazine.com/search-results/?q=jquery&amp;submit=&amp;client=pub-6779860845561969&amp;forid=1&amp;channel=3942503296&amp;ie=UTF-8&amp;oe=UTF-8&amp;safe=active&amp;flav=0000&amp;sig=ZKMPj-qL6g57hzX6&amp;cof=LH%3A50%3BLW%3A138%3BL%3Ahttp%3A%2F%2Fmedia.smashingmagazine.com%2Fcdn_smash%2Fwp-content%2Fthemes%2FSM-theme%2Fimg%2Flogo.gif%3BS%3Ahttp%3A%2F%2Fwww.smashingmagazine.com%3BFORID%3A11&amp;hl=en&amp;sitesearch=&amp;sitesearch=www.smashingmagazine.com" target="_blank">különböző</a> <a href="http://net.tutsplus.com/?s=jquery" target="_blank">tutorialokat</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zoltanhosszu.com/2010/01/jquery-es-a-jquery-ui/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Ajax-szerű fájlfeltöltés PHP-val</title>
		<link>http://blog.zoltanhosszu.com/2009/05/ajax-szeru-fajlfeltoltes-php-val/</link>
		<comments>http://blog.zoltanhosszu.com/2009/05/ajax-szeru-fajlfeltoltes-php-val/#comments</comments>
		<pubDate>Tue, 12 May 2009 20:02:19 +0000</pubDate>
		<dc:creator>Zoltan</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[fájl]]></category>
		<category><![CDATA[feltöltés]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[űrlap]]></category>

		<guid isPermaLink="false">http://blog.zoltanhosszu.com/?p=46</guid>
		<description><![CDATA[Ma elég huzamos ideig törtem a fejem és bújtam a fórumokat mire sikerült találnom egy olyan megoldást, amivel fel tudok tölteni egy fájlt anélkül, hogy frissülne az oldal. Hogy ez miért is kellett? A Kajdócsi Építész Stúdió adminisztrációs felületén dolgoztam és &#8211; bár később szántam-bántam, de &#8211; azt találtam ki, hogy amikor egy bizonyos bejegyzést [...]]]></description>
			<content:encoded><![CDATA[<p>Ma elég huzamos ideig törtem a fejem és bújtam a fórumokat mire sikerült találnom egy olyan megoldást, amivel fel tudok tölteni egy fájlt <strong>anélkül, hogy frissülne az oldal</strong>. Hogy ez miért is kellett? A Kajdócsi Építész Stúdió adminisztrációs felületén dolgoztam és &#8211; bár később szántam-bántam, de &#8211; azt találtam ki, hogy amikor egy bizonyos bejegyzést &#8211; esetünkben munkát &#8211; szerkeszt az ember, lehessen <em>&#8220;on-the-go&#8221;</em> fájlokat feltölteni. Nem akarjuk ugyanis egy külön elküldött form miatt az összes módosítást elveszteni, ugye?</p>
<p>Szóval nekiálltam, hogy akkor megtanulom a jQuery Ajax metódusait, de szerencsére ráakadtam egy <a href="http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html" target="_blank">nagyon hasznos kis kerülőre</a>. Ezt fogom most megosztani veletek.</p>
<p><span id="more-46"></span></p>
<p>Az első és legfontosabb dolog, hogy megértsük a <strong>&lt;form&gt;</strong> működését. A form &#8211; magyarul űrlap &#8211; egy olyan HTML tag, amivel egyszerű <strong>kitölthető mezőket</strong> tolhatunk a felhasználó arcába, ezzel rákényszerítve, hogy regisztrációkor megadja nekünk a haja színét és a kedvenc parfümének illatát. Ezek közé a mezők közé tartozik a fájl mező is. Az űrlap működése nagyon egyszerű, beillesztésekor megadjuk, hogy <strong>milyen módon</strong> (<em>method</em>), és <strong>hova</strong> (<em>action</em>) küldje az információkat, amiket a mezőkben megadtak a felhasználók.</p>
<p>A <strong>milyen módon</strong> rész <em>POST </em>vagy <em>GET </em>lehet, attól függően, hogy mennyire titkosan akarjuk küldeni az infokat. Elég másként lehet feldolgozni az adatokat, a <em>GET </em>ugyanis a címsorban küldi az adatokat (pl regisztracio.php?felhasznalo=jozsi&amp;jelszo=123456), míg a <em>POST </em>titkosan küldi tovább, de ezért ha használni akarunk egy-két adatot további oldalakhoz, akkor azokat tovább kell vinni valahogy (PHP-nál nagyjából úgy mint ahogy a <em>GET </em>metódus teszi).</p>
<p>Az<strong> űrlap</strong> <strong>hova része</strong> a feldolgozó fájl (esetünkben egy PHP lesz), ami kezeli a megkapott adatokat és tárolja vagy továbbküldi.</p>
<p>A formokban betöltött fájlokkal az a baki összesen, hogy azokat PHP-ban nem <em>$_POST</em> és nem is <em>$_GET</em>, hanem <strong><em>$_FILES</em></strong> előtaggal kell feldolgoznunk, hogy jussunk valahova. Ahhoz, hogy megkapjuk a kiválasztott fájlokat, az űrlapnak meg kell adnunk még egy attribútumot, ez pedig az <strong><em>enctype</em></strong>. Az <em>enctype </em>igazából az elküldött adatok titkosításának módja (nem ugyanaz mint a <em>POST</em>/<em>GET</em>), a fájlok feltöltéséhez szükséges értéke pedig <em>enctype=&#8221;multipart/form-data&#8221;</em>.</p>
<p>Nézzük is akkor hogy mire lesz szükségünk. Lesz egy form, ahol kiválasztjuk a fájlt; lesz egy PHP ami feldolgozza a fájlt; és egy JavaScript ami a vizualizációért felelős. Az űrlap nem lesz túl bonyolult, lássuk csak:</p>
<pre class="brush:php">  &lt;form action="upload.php" method="post" enctype="multipart/form-data" target="upload_target" &gt;
    Fájl: &lt;input name="myfile" type="file" /&gt;
    &lt;input type="submit" name="submitBtn" value="Upload" /&gt;
  &lt;/form&gt;</pre>
<p>Igazából néhány extra mezőre szükségünk lesz, hogy a JS is jól működjön:</p>
<pre class="brush:php">&lt;body&gt;
  &lt;p id="f1_upload_process"&gt;Feltöltés folyamatban...&lt;/p&gt;
  &lt;p id="result"&gt;&lt;/p&gt;
  &lt;form action="upload.php" method="post" enctype="multipart/form-data" target="upload_target" onsubmit="startUpload();" &gt;
    Fájl: &lt;input name="myfile" type="file" /&gt;
    &lt;input type="submit" name="submitBtn" value="Feltöltés" /&gt;
  &lt;/form&gt;
  &lt;iframe id="upload_target" name="upload_target" src="#" style="width:0px; height:0px; border:0px;"&gt;&lt;/iframe&gt;
&lt;/body&gt;</pre>
<p>Mint látjátok bekerült két &lt;p&gt; bekezdés és egy &lt;iframe&gt; belső frame, de ez utóbbi el van rejtve (width: 0px, height: 0px;). A keretre azért van szükségünk, mert ha megnézitek, az űrlapunk megkapta <em>target </em>attribútumnak az &lt;iframe&gt; nevét; magyarán <strong>oda fog betöltődni </strong>az<em> action=&#8221;upload.php&#8221;</em>. Ezzel le is lőttem a legnagyobb poént, amivel a fájlfeltöltés AJAX-szerűvé válik.  Egy finom kis CSS-t ráhúzunk az oldalra:</p>
<pre class="brush:css">#f1_upload_process{
  z-index: 100;
  position: absolute;
  visibility: hidden;
}</pre>
<p>Ezzel biztosítottuk, hogy a <em>#f1_upload_process</em> egyelőre láthatatlan legyen, mert majd a JavaScript teszi láthatóvá, a fájlfeltöltés elindításakor. Sok szó esett már a JavaScript részről, nézzük is meg, hogy mit tud. Egyelőre csak a <em>startUpload()</em> függvényt hívtuk meg az űrlap elküldésével. Ez a függvény igazából csak annyit tesz, hogy a már említett <em>#f1_upload_process</em> részt megmutatja nekünk és engedélyezi a form elküldését:</p>
<pre class="brush:js">function startUpload(){
  document.getElementById('f1_upload_process').style.visibility = 'visible';
  return true;
}</pre>
<p>A hangsúly nem is ezen a függvényen van, hanem a <em>stopUpload()-</em>on, ami a feltöltés eredményét fogja nekünk kiírni. Ezt a függvényt a PHP fájlból fogjuk meghívni majd.</p>
<pre class="brush:js">function stopUpload(success) {
  if (success == 1){
    document.getElementById('result').innerHTML = '&lt;span class="msg"&gt;Sikeres volt a fájlfeltöltés!&lt;/span&gt;&gt;';
  } else {
    document.getElementById('result').innerHTML = '&lt;span class="emsg"&gt;Hiba történt a feltöltés során!&lt;/span&gt;';
  }
  document.getElementById('f1_upload_process').style.visibility = 'hidden';
  return true;
}</pre>
<p>A függvényt egy success paraméterrel együtt hívhatjuk meg, ami az eredménynek megfelelő üzenetet dob ki a <em>&lt;p id=&#8221;result&#8221;&gt;</em> bekezdésünkbe. A vizualizációval meg is volnánk, nézzük meg, hogy mi is történik a háttérben. A PHP az űrlapból megkapott fájlt egyszerűen felmásolja a gyökérkönyvtárjába, majd 1 másodperces pihenő után (hogy a nagyon kicsi fájloknál is látszódjon, hogy történik valami <img src='http://blog.zoltanhosszu.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ) meghívja a <em>stopUpload()</em> JS függvényt.</p>
<pre class="brush:php">&lt;?php
  $destination_path = getcwd().DIRECTORY_SEPARATOR;
  $result = 0;
  $target_path = $destination_path . basename( $_FILES['myfile']['name']);
  if(move_uploaded_file($_FILES['myfile']['tmp_name'], $target_path)) {
    $result = 1;
  }
  sleep(1);

  echo('&lt;script language="javascript" type="text/javascript"&gt;
    window.top.window.stopUpload(' . $result . ');
  &lt;/script&gt; ');

?&gt;</pre>
<p>Ezzel tulajdonképpen meg is volnánk. A dolog működik szépen, én is használom, használjátok ti is egészséggel! Ha bármilyen kérdés vagy észrevétel van, jöhet fórumba!</p>
<p>Forrás: <a href="http://www.ajaxf1.com/tutorial/ajax-file-upload-tutorial.html" target="_blank">ajaxf1.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zoltanhosszu.com/2009/05/ajax-szeru-fajlfeltoltes-php-val/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CSS, egy szebb és jobb jövőért</title>
		<link>http://blog.zoltanhosszu.com/2009/05/css-egy-szebb-es-jobb-jovoert/</link>
		<comments>http://blog.zoltanhosszu.com/2009/05/css-egy-szebb-es-jobb-jovoert/#comments</comments>
		<pubDate>Wed, 06 May 2009 20:50:56 +0000</pubDate>
		<dc:creator>Zoltan</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[kezdő]]></category>
		<category><![CDATA[safari]]></category>

		<guid isPermaLink="false">http://blog.zoltanhosszu.com/?p=37</guid>
		<description><![CDATA[Hogy mi is az a CSS? A web(lapok) egyik legfontosabb összetevője. A CSS nélkül szerintem még mindig valahol a web őskorában járnánk és a Netscape Navigatoros weblapoknál még mindig nem nagyon lehetne szebbeket készíteni, esetleg csak hosszú-hosszú HTML kódsorok megírásával. A Cascading Style Sheet egy &#8220;hálóközileg&#8221; elfogadott webes nyelv, amit a böngésző fordít le, dolgoz [...]]]></description>
			<content:encoded><![CDATA[<p>Hogy mi is az a CSS? A web(lapok) egyik legfontosabb összetevője. A CSS nélkül szerintem még mindig valahol a web őskorában járnánk és a <a title="Egy Netscape-es weblap" href="http://notes.1ec5.org/archives/2008/03/31/netscape304g-netscape.png" target="_blank">Netscape Navigatoros weblapoknál</a> még mindig nem nagyon lehetne szebbeket készíteni, esetleg csak hosszú-hosszú HTML kódsorok megírásával. A <a title="CSS Hivatalos oldal" href="http://www.w3.org/Style/CSS/" target="_blank"><em>Cascading Style Sheet</em></a> egy &#8220;hálóközileg&#8221; elfogadott <strong>webes nyelv</strong>, amit a böngésző fordít le, dolgoz fel és a honlapok grafikus részleteinek megformázását teszi egyszerűbbé és könnyen módosíthatóvá. Például körülbelül 5 sor szöveggel megformázható elfogadhatóra egy bekezdés (&lt;p&gt;), hogy egyedi betűtípusa, betűmérete, színe és sorköze legyen. Hasznos, nem?</p>
<p>A nyelv maga jelenleg a kettes és hármas verzió között stagnál, a legtöbb böngésző (Firefox, Safari, Chrome) támogatja a hármas verzió nagyrészét (kb 80%), de a jó öreg IE persze megint csak le van maradva: bár az IE8 kezd ledolgozni a lemaradásából, még így is sok-sok munkaórát kell beleölni a sitebuildereknek, ha CSS3 kód részeket is írnak IE8-ra.</p>
<p>A továbbiakban megnézzük, hogy hogyan is működik és mikre is lehet használni a CSS-t.</p>
<p><span id="more-37"></span>Az első és legfontosabb tanácsom, hogy ne kezdjünk el CSS-t írni a weblapunkhoz mielőtt nem vagyunk tisztában nagyjából a HTML nyelvvel, a CSS ugyanis erre épül, ugyanakkor a HTML teszi azt <em>használhatóvá</em> és <em>használandóvá</em>. A HTML sajnos elég szegényes készletekkel rendelkezik a webdesignerek számára, az a néhány meglévő stíluselem pedig csak körülményesen használható és minden egyes alkalommal be kell írni, amikor a szövegben vastaggal írt részeket mondjuk piros színűre akarod színezni:</p>
<pre class="brush:php">&lt;font color="red"&gt;&lt;b&gt;ez a szöveg piros&lt;/b&gt;&lt;/font&gt;, ez nem piros</pre>
<p>Na most ezt el lehet képzelni egy nagyobb táblázat megformázásánál, amikor mondjuk <em>minden egyes</em> fejlécnél ezeket be kell írni és a kiemelt elemeknél is hasonló eszközöket kell alkalmazni&#8230; A legnagyobb problémája igazából az, hogy egy idő után <strong>átláthatatlanná teszi a forrást</strong>.</p>
<p>A CSS kód egyszerűen a &lt;style type=&#8221;text/css&#8221;&gt;&#8230;&lt;/style&gt; tagek közt a HTML fájlba illesztve aktivizálódik. Persze a komolyabb oldalakhoz már külön fájlokat használnak a fejlesztők (a ZoltanHosszu.com CSS fájljai: <a href="http://www.zoltanhosszu.com/zoltanhosszu.css" target="_blank">zoltanhosszu.css</a>, <a href="http://www.zoltanhosszu.com/zoltanhosszu_hu.css">zoltanhosszu_hu.css</a>), de egyelőre mi még megelégedhetünk a &lt;head&gt; részbe illesztett kóddal. A fentiekkel szemben a CSS verzió így néz ki:</p>
<pre class="brush:css">&lt;style type="text/css"&gt;
b {
   color: red;
}
&lt;/style&gt;</pre>
<p>A HTML hozzá pedig:</p>
<pre class="brush:php">&lt;b&gt;ez a szöveg piros&lt;/b&gt;, ez nem piros</pre>
<p>Ezt a rövid kódot a forrásfájlba illesztve az <strong>összes</strong> &lt;b&gt; taggel jelölt rész piros színűre változik. Bár ezen a rövid szövegrészen első ránézésre úgy tűnhet, hogy bonyolítom itt az életetek, higyjétek el, <strong>hosszútávon nagyon megéri</strong>!</p>
<p>A <strong>leghasznosabb dolog</strong> a CSS-ben talán az, hogy különböző HTML tageket, mint pl &lt;a&gt;, &lt;p&gt;, &lt;h1&gt;, mind-mind egységes stílussal láthatunk el; ha pedig módosítani szeretnénk valamit a honlapon, akkor csak egy dolgot kell megkeresni, átírni és voila, mindenhol megváltozott a linkek színe, a fejlécek betűtípusa és a bekezdések sorköze:</p>
<pre class="brush:css">&lt;style type="text/css"&gt;
a {
  color: #800;
  font-weight: bold;
}

p {
  line-height: 1.2em;
}

h1 {
  font-family: georgia, serif;
}
&lt;/style&gt;</pre>
<p>A nyelv maga nagyon könnyen és gyorsan tanulható, hiszen a legtöbb stíluselem elég jól magyarázza önmagát (pl line-height: sorköz; width: szélesség; color: betűszín, border: keret) és ha egyszer megértette az ember a működését, nagyon szép dolgokra képes.</p>
<p>Sajnos megvannak a maga hátulütői is a nyelvnek, használatával igazán meg lehet tapasztalni a böngészők közti különbségeket: még a Firefox 2 és a Firefox 3 között is kellemes kis eltérések vannak (annak ellenére, hogy elvileg mindkettő megfelel a web standars-nek), az Internet Explorert pedig hadd ne említsem.</p>
<p>Mindezek ellenére számomra a webfejlesztés egyik legkedvesebb eleme.</p>
<p>Remélem érhető volt a cikk, ha pedig bármilyen <strong>kérdésetek van</strong>, ne féljetek azt a hozzászólásoknál feltenni; <strong>de persze jöhetnek javaslatok is</strong>! A következő CSS-sel kapcsolatos cikkben megnézünk néhány felhasználást (pl hogy mik is azok a CSS osztályok és hogyan is kell őket használni), amivel nagyon leegyszerűsödik a HTML oldalak formázása.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zoltanhosszu.com/2009/05/css-egy-szebb-es-jobb-jovoert/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PHP lapozás</title>
		<link>http://blog.zoltanhosszu.com/2009/05/php-lapozas/</link>
		<comments>http://blog.zoltanhosszu.com/2009/05/php-lapozas/#comments</comments>
		<pubDate>Mon, 04 May 2009 16:00:34 +0000</pubDate>
		<dc:creator>Zoltan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[függvény]]></category>
		<category><![CDATA[function]]></category>
		<category><![CDATA[lapozás]]></category>
		<category><![CDATA[programozás]]></category>

		<guid isPermaLink="false">http://blog.zoltanhosszu.com/?p=8</guid>
		<description><![CDATA[Ebben a cikkben egy adatbázist fogunk lapozható formára bontani. Nagyon hasznos ez a funkció, főleg egy nagyobb MySQL adatbázisnál, amikor az embernek többszáz recordja van egy táblában és ezeket szeretné a felhasználóknak valami átlátható formában megjeleníteni. Igazság szerint az alább leírt lapokra bontás talán a legegyszerűbb megoldása ennek a funkciónak, de remélem, hasznos lesz számotokra. [...]]]></description>
			<content:encoded><![CDATA[<p>Ebben a cikkben egy adatbázist fogunk<strong> lapozható formára</strong> bontani. Nagyon hasznos ez a funkció, főleg egy nagyobb MySQL adatbázisnál, amikor az embernek többszáz recordja van egy táblában és ezeket szeretné a felhasználóknak valami <strong>átlátható formában</strong> megjeleníteni. Igazság szerint az alább leírt lapokra bontás talán a legegyszerűbb megoldása ennek a funkciónak, de remélem, hasznos lesz számotokra. Az alább összefoglalt függvényt az<a href="http://www.alberletplusz.hu/" target="_blank"> AlbérletPlusz.hu</a> oldalhoz készítettem, ahol jelenleg is ez a PHP szkript felelős az oldalakra bontásért. Kezdjünk is hozzá.</p>
<p>Először is vegyük gyorsan sorra, hogy mire van szüksége az embernek egy lapozhatóan megjelenő tartalomhoz:<strong> honnan kezdődjön a lekérdezés a MySQL táblából és meddig tartson</strong>. Igazából a legnehezebb dolog itt nem a táblából való lekérdezés, hiszen azt egy sima &#8220;<em>SELECT * FROM tabla LIMIT x, y</em>&#8221; paranccsal megoldhatjuk, ahol <strong>x az eltolás mértéke</strong> (tehát, hogy honnan kezdjük az adatok lekérdezését), <strong>y pedig a megjelenítendő elemek száma</strong> (hmm, milyen érdekes, pont ezekre van szükségünk egy jól működő lapozás funkcióhoz, micsoda szerencse); a bonyolult funkció a lapok számának dinamikus kiírása, mondjuk egy ilyesmi formában:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-32 kep" title="lapozas" src="http://blog.zoltanhosszu.com/wp-content/uploads/lapozas.jpg" alt="lapozas" width="336" height="32" /></p>
<p style="text-align: center;">
<p>Ezt fogjuk most megírni.</p>
<p><span id="more-8"></span></p>
<p>Létrehozunk egy <strong>új függvényt</strong> mondjuk lapozas néven, és paramétereknek megadjuk az <strong>eltolás mértékét és a megjelenítendő elemek számát</strong>. A paramétereknek megadunk egy alap értéket, hogy ha a meghíváskor nem kap a függvény értékeket, akkor is tudjon szépen dolgozni.</p>
<p>Szükségünk lesz néhány változóra is: <strong>előző oldal</strong>, <strong>aktuális oldal</strong>, <strong>következő oldal</strong>, <strong>az oldalak száma</strong>, az oldalakon <strong>megjelenítendő összes elem száma</strong>, valamint egy olyan változóra ami az aktuális oldalszámtól jobbra és balra kiszámítja, hogy hány oldalt mutassunk:<strong> egy intervallumhatárra</strong>. Ez utóbbi változót így leírva lehet kicsit nehéz megérteni, de ahogy haladunk látni fogjátok a funkcióját.</p>
<pre class="brush:php">function lapozas($offset = 0, $show = 12) { //Lapozás függvény - $offset az eltolás értéke, $show a megjelenítendő elemek száma

	global $osszes; //Itt megkapjuk az összes elem számát a táblából, ezt a lekérdezéskor kell kiszámolnunk.

	$elozo = $offset - $show; //Előző oldal kiszámítása
	$kovetkezo = $offset + $show; //Következő oldal kiszámítása
	$aktoldal = (int)($offset / $show) + 1; //Aktuális oldal
	$oldalszam = $osszes / $show; //Oldalak számának kiszámítása

	if ($oldalszam &gt; (int)($osszes / $show)) $oldalszam = (int)($osszes / $show) + 1; //Oldalszám kerekítése</pre>
<p>A változóknak kiszámoljuk a <strong>kezdeti értékeit</strong> és ezzel meg is van az egyik lényeges adat: a kezdeti értékek. Ezekre nagy szükségünk lesz a következő lépéseknél, hiszen elég sokat fogunk számolni velük. Létrehozunk egy rendezetlen listát (&lt;ul&gt;), az oldalszámokat pedig ebbe fogjuk pakolgatni, majd betesszük első elemnek az &#8220;előző oldal&#8221; kiírást és linket.</p>
<pre class="brush:php first-line:12">	if ($oldalszam &gt; 1) { //Ha van elég oldal, hogy megjelenítsük

		print('&lt;ul class="scroll"&gt;'); //Rendezetlen lista létrehozása, ebben tároljuk az oldalszámokat

		if ($elozo &gt;= 0) print('&lt;li&gt;&lt;a href="oldal.php?&amp;offset=' . $elozo .'"&gt;« elõzõ oldal&lt;/a&gt;&lt;/li&gt;'); //Előző oldal kiírása, ha nem az első oldalon vagyunk</pre>
<p>Innentől <strong>két részre bontottam</strong> a függvényt, először is azért, mert szerintem 10 oldal alatt nem érdemes a &#8230;-os részt belerakni, mert 10-12 link még bőven kifér és átlátható; 10 felett viszont már a $range értékkel is számolgatunk majd.</p>
<p>Szóval 10 oldal alatt egy sima for ciklussal bedobáljuk az oldalszámokat a megfelelő linkekkel a listába. Egy kis finomság: <strong>az aktuális oldalt vastaggal fogjuk írni.</strong></p>
<pre class="brush:php first-line:18">		if ($oldalszam &lt; 10) { //Oldalszámozás, ... nélkül

			for ($i = 0; $i &lt; $oldalszam; $i++) {
				$off = ($i * $show) + ($offset % $show); //Offset számítása
				$oldal = $i + 1; //Kiirandó oldalszám megadása

				if ($off == $offset) $oldal = "<strong>" . $oldal . "</strong>"; //Aktuális oldal vastagon írva

				print ('&lt;li&gt;&lt;a href="oldal.php?&amp;offset=' . $off . '"&gt;' . $oldal . '&lt;/a&gt;&lt;/li&gt;'); //Kiiratás
			}

		}</pre>
<p>Ezzel meg is volnánk, most jön az érdekes rész, a <strong>&#8230;-ozás ha sok oldal van</strong>. Itt már szükségünk lesz a <strong>$range</strong> értékre, ami a már fent említett intervallumhatár értéket fogja tárolni. Ezt én 2-re állítottam, mert szerintem elég egy ötös (2 balra + aktuális oldal + 2 jobbra) intervallumot látni, de ezt nyugodtan megváltoztathatjátok. Itt be fogunk hozni 2 új változót, egy <strong>$start</strong> és egy <strong>$end</strong> változót, amik az aktuális oldaltól számolják a $range értékkel csökkentett ill. növelt értékeket. Ez azért kell, hogy ha az utolsó előtti oldalon vagyunk, ne írjunk ki utolsó+1 oldalt, a második oldalon meg -1-t. <img src='http://blog.zoltanhosszu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Lássuk akkor a kódot részletekben.</p>
<pre class="brush:php first-line:29">		 else { //Oldalszámozás ...-tal

			$range = 2; //Intervallum két szélének távolsága aktuális oldaltól

			if ($aktoldal &gt;= ($range *2)) { //Ha messzebb vagyunk az első oldaltól mint $range * 2, kiírjuk az első oldal linkjét
				print ('&lt;li&gt;&lt;a href="oldal.php?offset=0"&gt;1&lt;/a&gt;&lt;/li&gt;');
			}

			if ($aktoldal &gt; ($range *2)) { //Ha már a második oldal száma nem látszik, kipontozzuk
				print('&lt;li&gt;...&lt;/li&gt;');
			}

			$start = $aktoldal - $range; //$start és $end kezdeti értékek
			$end = $aktoldal + $range;

			// /!\ Kritikus rész /!\ a $start és $end pontos kiszámítása			

			if ($start &lt; 1) { //Nem megyünk negatívaba, ha közel vagyunk az oldalak elejéhez
				$start = 1;
				$end = ($range * 2) + 1;
			} elseif ($end &gt; $oldalszam) { //Nem megyünk túl a maximális oldalakon, ha a végén vagyunk
				$start = ($oldalszam - ($range * 2) + 1);
				$end = $oldalszam;
			}</pre>
<p>Innentől igazából a nehezén túl is vagyunk, most egy sima for-ral ki kell iratnunk az oldalakat, majdnem úgy mint a kipontozós résznél, annyi eltéréssel, hogy most $start-tól $end-ig tesszük ezt meg.</p>
<pre class="brush:php first-line:54">			for ($i = $start; $i &lt;= $end; $i++) { //Oldalak kiírása $start-tól $end-ig

				$off = ($i - 1) * $show;
				$oldal = $i;

				if ($off == $offset) $oldal = "&lt;b&gt;" . $oldal . "&lt;/b&gt;";

				print ('&lt;li&gt;&lt;a href="oldal.php?offset=' . $off . '"&gt;' . $oldal . '&lt;/a&gt;&lt;/li&gt;'); //Kiiratás
			}</pre>
<p>Már majdnem készen is vagyunk, egy nagyon apró dolog van csak hátra, az utolsó ill. a következő oldal linkjének kiírása, majd a lista és a függvény lezárása.</p>
<pre class="brush:php first-line:64">			if ($aktoldal &lt; ($oldalszam - ($range * 2) + 1)) {
				print('&lt;li&gt;...&lt;/li&gt;');
			}
			if ($aktoldal &lt;= ($oldalszam - ($range * 2) + 1)) {
				$utolso = $osszes - ($osszes % $show);
				print ('&lt;li&gt;&lt;a href="oldal.php?offset=' . $utolso . '"&gt;' . $oldalszam . '&lt;/a&gt;&lt;/li&gt;'); //Utolsó oldal kiiratása
			}
		}

		if ($kovetkezo &lt;= $osszes ) print('&lt;li style="border: 0px"&gt;&lt;a href="' . $klink . '&amp;offset=' . $kovetkezo . '"&gt;következő oldal »&lt;/a&gt;&lt;/li&gt;');

		print ("&lt;/ul&gt;");
	}

}</pre>
<p>Ezzel <strong>kész is</strong>! Nézzük meg egyben gyorsan:</p>
<pre class="brush:php">function lapozas($offset = 0, $show = 12) { //Lapozás függvény - $offset az eltolás értéke, $show a megjelenítendő elemek száma

	global $osszes; //Itt megkapjuk az összes elem számát a táblából, ezt a lekérdezéskor kell kiszámolnunk.

	$elozo = $offset - $show; //Előző oldal kiszámítása
	$kovetkezo = $offset + $show; //Következő oldal kiszámítása
	$aktoldal = (int)($offset / $show) + 1; //Aktuális oldal
	$oldalszam = $osszes / $show; //Oldalak számának kiszámítása

	if ($oldalszam &gt; (int)($osszes / $show)) $oldalszam = (int)($osszes / $show) + 1; //Oldalszám kerekítése

	if ($oldalszam &gt; 1) { //Ha van elég oldal, hogy megjelenítsük

		print('&lt;ul class="scroll"&gt;'); //Rendezetlen lista létrehozása, ebben tároljuk az oldalszámokat

		if ($elozo &gt;= 0) print('&lt;li&gt;&lt;a href="oldal.php?&amp;offset=' . $elozo .'"&gt;« előző oldal&lt;/a&gt;&lt;/li&gt;'); //Előző oldal kiírása, ha nem az első oldalon vagyunk

		if ($oldalszam &lt; 10) { //Oldalszámozás, ... nélkül

			for ($i = 0; $i &lt; $oldalszam; $i++) {
				$off = ($i * $show) + ($offset % $show); //Offset számítása
				$oldal = $i + 1; //Kiirandó oldalszám megadása

				if ($off == $offset) $oldal = "&lt;b&gt;" . $oldal . "&lt;/b&gt;"; //Aktuális oldal vastagon írva

				print ('&lt;li&gt;&lt;a href="oldal.php?&amp;offset=' . $off . '"&gt;' . $oldal . '&lt;/a&gt;&lt;/li&gt;'); //Kiiratás
			}

		} else { //Oldalszámozás ...-tal

			$range = 2; //Intervallum két szélének távolsága aktuális oldaltól

			if ($aktoldal &gt;= ($range *2)) { //Ha messzebb vagyunk az első oldaltól mint $range * 2, kiírjuk az első oldal linkjét
				print ('&lt;li&gt;&lt;a href="oldal.php?offset=0"&gt;1&lt;/a&gt;&lt;/li&gt;');
			}

			if ($aktoldal &gt; ($range *2)) { //Ha már a második oldal száma nem látszik, kipontozzuk
				print('&lt;li&gt;...&lt;/li&gt;');
			}

			$start = $aktoldal - $range; //$start és $end kezdeti értékek
			$end = $aktoldal + $range;

			// /!\ Kritikus rész /!\ a $start és $end pontos kiszámítása			

			if ($start &lt; 1) { //Nem megyünk negatívaba, ha közel vagyunk az oldalak elejéhez
				$start = 1;
				$end = ($range * 2) + 1;
			} elseif ($end &gt; $oldalszam) { //Nem megyünk túl a maximális oldalakon, ha a végén vagyunk
				$start = ($oldalszam - ($range * 2) + 1);
				$end = $oldalszam;
			}

			for ($i = $start; $i &lt;= $end; $i++) { //Oldalak kiírása $start-tól $end-ig

				$off = ($i - 1) * $show;
				$oldal = $i;

				if ($off == $offset) $oldal = "&lt;b&gt;" . $oldal . "&lt;/b&gt;";

				print ('&lt;li&gt;&lt;a href="oldal.php?offset=' . $off . '"&gt;' . $oldal . '&lt;/a&gt;&lt;/li&gt;'); //Kiiratás
			}

			if ($aktoldal &lt; ($oldalszam - ($range * 2) + 1)) {
				print('&lt;li&gt;...&lt;/li&gt;');
			}
			if ($aktoldal &lt;= ($oldalszam - ($range * 2) + 1)) {
				$utolso = $osszes - ($osszes % $show);
				print ('&lt;li&gt;&lt;a href="' . $klink . '&amp;offset=' . $utolso . '"&gt;' . $oldalszam . '&lt;/a&gt;&lt;/li&gt;'); //Utolsó oldal kiiratása
			}
		}

		if ($kovetkezo &lt;= $osszes ) print('&lt;li style="border: 0px"&gt;&lt;a href="' . $klink . '&amp;offset=' . $kovetkezo . '"&gt;következő oldal »&lt;/a&gt;&lt;/li&gt;');

		print ("&lt;/ul&gt;");
	}

}</pre>
<p>Remélem megértettétek, hogyan is működik ez a függvény, ha nem, <strong>bátran kérdezzetek</strong> a hozzászólásoknál!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zoltanhosszu.com/2009/05/php-lapozas/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
	</channel>
</rss>
