<?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; PHP</title>
	<atom:link href="http://blog.zoltanhosszu.com/tags/php/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>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>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>
