<?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 &#187; javascript</title>
	<atom:link href="http://blog.zoltanhosszu.com/categories/javascript/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>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>
	</channel>
</rss>
