<?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>Athlan • Piotr Pelczar • blog programisty &#187; mysql limit</title>
	<atom:link href="http://athlan.pl/tag/mysql-limit/feed/" rel="self" type="application/rss+xml" />
	<link>http://athlan.pl</link>
	<description>Napisać kod zrozumiały dla komputera potrafi byle głupek. Dobrzy programiści tworzą kod zrozumiały dla człowieka...</description>
	<lastBuildDate>Tue, 14 Feb 2012 14:33:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Paginacja (stronicowanie) w PHP</title>
		<link>http://athlan.pl/paginacja-php-stronicowanie/</link>
		<comments>http://athlan.pl/paginacja-php-stronicowanie/#comments</comments>
		<pubDate>Sun, 04 Jan 2009 18:03:37 +0000</pubDate>
		<dc:creator>Athlan</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Planeta]]></category>
		<category><![CDATA[Publikacje]]></category>
		<category><![CDATA[Solutions]]></category>
		<category><![CDATA[mysql limit]]></category>
		<category><![CDATA[pager]]></category>
		<category><![CDATA[paginacja]]></category>
		<category><![CDATA[stronicowanie]]></category>
		<category><![CDATA[strony]]></category>

		<guid isPermaLink="false">http://athlan.pl/?p=177</guid>
		<description><![CDATA[Zaczynając swoją przygodę z PHP nie miałem pojęcia jak wykonać paginację newsów, która załamywałaby łańcuchy liczb w momencie, w których chce. Na dzień dzisiejszy postanowiłem napisać swój nowy pager, gdyż ten, który dotychczas używałem przez ostatnie 2 lata nie odpowiadał mi pod trzema względami: nagromadzenie metod, tj. setLimit(), getLimit(), zamiast pojedynczego limit(), brak możliwości ustawienia [...]]]></description>
			<content:encoded><![CDATA[<p>Zaczynając swoją przygodę z PHP nie miałem pojęcia jak wykonać paginację newsów, która załamywałaby łańcuchy liczb w momencie, w których chce. Na dzień dzisiejszy postanowiłem napisać swój nowy pager, gdyż ten, który dotychczas używałem przez ostatnie 2 lata nie odpowiadał mi pod trzema względami:</p>
<ul>
<li>nagromadzenie metod, tj. setLimit(), getLimit(), zamiast pojedynczego limit(),</li>
<li>brak możliwości ustawienia załamywania się łańcucha (domyślnie były to 2 liczby):<br />
<code>1, 2 ... 6, 7, 8 ...  12, 13</code>.</li>
<li>brak możliwości definiowania limitu, ilości elementów oraz aktualnie przeglądanej strony w jednej metodzie, najchętniej w samym konstruktorze.</li>
</ul>
<p>Ostatnio potrzebowałem zwiększyć limit liczb &#8220;z przodu&#8221; i &#8220;tyłu&#8221; oraz &#8220;w środku&#8221;:<br />
<code>1, 2, 3 ... 5, 6, 7, 8, 9 ...  11, 12, 13</code></p>
<p>Dla tych, którzy ciągle szukają komponentu obsługującego paginację prezentuję <a href="http://athlan.pl/code/Vframe_Pagination">Vframe_Pagination</a>.</p>
<p>Implementacja od strony kontrolera (metoda krótka):</p>
<p><code>$oPager = new Vframe_Pagination($iItemsCount, $iLimit, $iCurrentPage);</code></p>
<p>Metoda długa:</p>
<p><code>$oPager = new Vframe_Pagination();<br />
$oPager-&gt;limit($iLimit);<br />
$oPager-&gt;items($iItemsCount);<br />
$oPager-&gt;page($iPage);</code></p>
<p>Metody limit, items oraz page zwracają liczby odpowiadające ich nazwą niezależnie od tego, czy została podana nowa wartość w argumencie, czy nie, co jest absolutnie wygodnym (dla mnie) rozwiązaniem.</p>
<p>Aby wyświetlić oczekiwane rekordy, wykorzystujemy pagera:</p>
<p><code>$aData = $oModel-&gt;GetList($iUser, $oPager-&gt;start(), $oPager-&gt;limit());</code></p>
<p>Lub bezpośrednio w zapytaniu do bazy dancyh:</p>
<p><code>$sSql = "SELECT news_id FROM news LIMIT " . $oPager-&gt;start() . ", " . $oPager-&gt;limit();</code></p>
<p>Od strony widoku, prezentacja pagincaji prezentuje się w bardzo prosty sposób:</p>
<p>&lt;?php echo $oPager-&gt;Render(true); ?&gt;</p>
<p>Metoda render przyjmuje kolejno:</p>
<ol>
<li><em>$mMode</em> (mixed: bool, null, string), jeżeli true, paginacja jest zwracana w formacie HTML. Jeżeli null, numerki stron podane w formie array&#8217;a zamiast linków HTML. Jeżeli string, zostaje zwracana wartość po renderowaniu pagera, np. element startujący przedział mnożony po limicie: $oPager-&gt;Render(&#8216;start&#8217;);. Ten sam efekt powoduje metoda $oPager-&gt;start();</li>
<li><em>$iDrawCutLimit</em> (int) ilość numerków na początku i końcu łańcucha paginacji.</li>
<li><em>$iDrawCutLimitCenter</em> (int) ilość numerków &#8220;w środku&#8221; obok aktualnie przeglądanej strony.</li>
<li><em>$bNavigation</em> (bool) linki &#8220;poprzednia&#8221; i &#8220;następna&#8221; strona znajdujące się na początku i końcu łańcucha.</li>
</ol>
<p>Możemy sami ostylować linki generowane przez pager. Wystarczy że w widoku dodamy swój apperance:</p>
<p><code>$this-&gt;oPager-&gt;PatternPage('&lt;a href="?[$]"&gt;[$]&lt;/a&gt;');<br />
$this-&gt;oPager-&gt;PatternPageCurrent('&lt;strong&gt;[$]&lt;/strong&gt;');<br />
$this-&gt;oPager-&gt;PatternPageNavigation('&lt;a href="?[$]" rel="nofollow"&gt;[$$]&lt;/a&gt;', array('&amp;laquo; poprzednia', 'następna &amp;raquo;'));<br />
$this-&gt;oPager-&gt;PatternSeparator('&lt;span&gt;...&lt;/span&gt;');</code></p>
<p>Końcowy efekt, możemy nie wyświetlać pagera, gdy jest tylko jedna strona elementów:</p>
<p><code>&lt;?php if($this-&gt;oPager-&gt;Render('pages') &gt; 1) {<br />
// wyswietl pager...<br />
} ?&gt;</code></p>
]]></content:encoded>
			<wfw:commentRss>http://athlan.pl/paginacja-php-stronicowanie/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
