<?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>gebloggt.ch &#187; PHP</title>
	<atom:link href="http://gebloggt.ch/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://gebloggt.ch</link>
	<description>Linux, Opensource, Politik und mein Leben</description>
	<lastBuildDate>Sun, 17 Jul 2011 09:44:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>CakePHP: OAuth</title>
		<link>http://gebloggt.ch/2010/12/12/cakephp-oauth/</link>
		<comments>http://gebloggt.ch/2010/12/12/cakephp-oauth/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 17:53:31 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=749</guid>
		<description><![CDATA[Nur als Gedankenstütze: folgende Erweiterung unterstützt OAuth mit CakePHP: http://www.neilcrookes.com/2010/04/12/cakephp-oauth-extension-to-httpsocket/ Unter http://code.42dh.com/oauth/ gibt es noch weitere Informationen. Jedoch nicht so simpel und einfach, wie erst genannter Link.]]></description>
			<content:encoded><![CDATA[<p>Nur als Gedankenstütze: folgende Erweiterung unterstützt OAuth mit CakePHP:</p>
<p><a href="http://www.neilcrookes.com/2010/04/12/cakephp-oauth-extension-to-httpsocket/">http://www.neilcrookes.com/2010/04/12/cakephp-oauth-extension-to-httpsocket/</a></p>
<p>Unter</p>
<p><a href="http://code.42dh.com/oauth/">http://code.42dh.com/oauth/</a></p>
<p>gibt es noch weitere Informationen. Jedoch nicht so simpel und einfach, wie erst genannter Link.</p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2010/12/12/cakephp-oauth/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP: includes</title>
		<link>http://gebloggt.ch/2010/12/12/php-includes/</link>
		<comments>http://gebloggt.ch/2010/12/12/php-includes/#comments</comments>
		<pubDate>Sun, 12 Dec 2010 15:25:36 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=744</guid>
		<description><![CDATA[Mit PHP stellt sich von Zeit zu Zeit die Frage, warum includes nicht funktionieren. Einige Möglichkeiten zur Problemlösung: Mit folgendem Script den aktuellen Kontext ausgeben, in dem man sich befindet: &#60;?php dirname($_SERVER["SCRIPT_FILENAME"]) ?&#62; Das gibt das Verzeichnis des ausführenden Scripts. Das ist einzig relevent, nicht die Datei, welche den Include macht. Bei Fehlermeldungen bezüglich fehlender [...]]]></description>
			<content:encoded><![CDATA[<p>Mit PHP stellt sich von Zeit zu Zeit die Frage, warum includes nicht funktionieren. Einige Möglichkeiten zur Problemlösung:</p>
<p>Mit folgendem Script den aktuellen Kontext ausgeben, in dem man sich befindet:</p>
<div dir="ltr"><code>&lt;?php<br />
dirname($_SERVER["SCRIPT_FILENAME"])<br />
?&gt;</code></div>
<div dir="ltr">Das gibt das Verzeichnis des ausführenden Scripts. Das ist einzig relevent, nicht die Datei, welche den Include macht.</div>
<div dir="ltr"></div>
<div dir="ltr">Bei Fehlermeldungen bezüglich fehlender Berechtigung (permission denied) ist folgendes zu beachten:</div>
<div dir="ltr">- Die Datei, die eingebunden werden soll, muss das R-Flag (Berechtigung Lesen) besitzen</div>
<div dir="ltr">- Alle über der einzubindenden Datei liegende Verzeichnisse müssen das X-Flag (Berechtigung Ausführen) besitzen</div>
<div dir="ltr">Damit sollten die Fragen geklärt sein <img src='http://gebloggt.ch/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </div>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2010/12/12/php-includes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passwort als Hash: Salt beachten</title>
		<link>http://gebloggt.ch/2010/04/04/passwort-als-hash-salt-beachten/</link>
		<comments>http://gebloggt.ch/2010/04/04/passwort-als-hash-salt-beachten/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 23:03:16 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[cakephp]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=719</guid>
		<description><![CDATA[Problem: beim Erstellen der Datenbank-Tabellen soll gleich ein Benutzer mit einem (komplizierten) Standard-Passwort erstellt werden. Der mit der mySQL-Funktion SHA1() erzeugte Hash ist jedoch ein anderer, als CakePHP beim Login generiert (und damit die Berechtigung überprüft). Lösung: standardmässig wird noch ein sog. Salt-Wert mit dem Passwort verwendet. Dieser ist im Konfigurationsfile core.php definiert. Um nun [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Problem:</strong> beim Erstellen der Datenbank-Tabellen soll gleich ein Benutzer mit einem (komplizierten) Standard-Passwort erstellt werden. Der mit der mySQL-Funktion SHA1() erzeugte Hash ist jedoch ein anderer, als CakePHP beim Login generiert (und damit die Berechtigung überprüft).</p>
<p><strong>Lösung:</strong> standardmässig wird noch ein sog. Salt-Wert mit dem Passwort verwendet. Dieser ist im Konfigurationsfile core.php definiert. Um nun den Hash des Passworts zu erzeugen ist folgender PHP-Aufruf nötig:</p>
<blockquote><p>sha1($salt.&#8217;password&#8217;)</p></blockquote>
<p>wobei $salt dem Salt-Wert entspricht <img src='http://gebloggt.ch/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2010/04/04/passwort-als-hash-salt-beachten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP: RSS import</title>
		<link>http://gebloggt.ch/2010/01/29/cakephp-rss-import/</link>
		<comments>http://gebloggt.ch/2010/01/29/cakephp-rss-import/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 09:03:25 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=717</guid>
		<description><![CDATA[Nur kurz zum Festhalten: RSS-Import mit cakePHP ist einfach machbar mit Hilfe von SimplePie. Hier die nötigen Links dazu: http://bakery.cakephp.org/articles/view/simplepie-cakephp-component http://sandbox.pseudocoder.com/demo/simplepie http://simplepie.org/wiki/reference/start]]></description>
			<content:encoded><![CDATA[<p>Nur kurz zum Festhalten: RSS-Import mit cakePHP ist einfach machbar mit Hilfe von <a href="http://simplepie.org/">SimplePie</a>. Hier die nötigen Links dazu:</p>
<p><a href="http://bakery.cakephp.org/articles/view/simplepie-cakephp-component">http://bakery.cakephp.org/articles/view/simplepie-cakephp-component</a><br />
<a href="http://sandbox.pseudocoder.com/demo/simplepie">http://sandbox.pseudocoder.com/demo/simplepie</a><br />
<a href="http://simplepie.org/wiki/reference/start">http://simplepie.org/wiki/reference/start</a></p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2010/01/29/cakephp-rss-import/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Opfer der Wirtschaftskrise: Zookoda</title>
		<link>http://gebloggt.ch/2009/05/13/opfer-der-wirtschaftskrise-zookoda/</link>
		<comments>http://gebloggt.ch/2009/05/13/opfer-der-wirtschaftskrise-zookoda/#comments</comments>
		<pubDate>Wed, 13 May 2009 21:42:04 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[IT allgemein]]></category>
		<category><![CDATA[LaTeX]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[Think about]]></category>
		<category><![CDATA[TYPO3]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=473</guid>
		<description><![CDATA[Untenstehender Screen hat mich beim Besuch von Zookoda begrüsst. Ich habe den Dienst zwar nie verwendet, per Zufall aber wieder einmal darauf gestossen. Ich denke, die wirtschaftliche Realität wird noch einige Unternehmen an den Rand der Existenz bringen. Wenn keine richtige Strategie vorhanden ist, wie Geld verdient wird, kann ein kostenloser Service auf Dauer m.E. [...]]]></description>
			<content:encoded><![CDATA[<p>Untenstehender Screen hat mich beim Besuch von Zookoda begrüsst. Ich habe den Dienst zwar nie verwendet, per Zufall aber wieder einmal darauf gestossen. Ich denke, die wirtschaftliche Realität wird noch einige Unternehmen an den Rand der Existenz bringen. Wenn keine richtige Strategie vorhanden ist, wie Geld verdient wird, kann ein kostenloser Service auf Dauer m.E. nicht betrieben werden. Werbung dürfte nur bei wirklich grossen oder speziellen Diensten ausreichend  sein. Bei Twitter frage ich mich schon länger, wie bzw. wie lange das (noch) gut gehen kann.</p>
<p><a href="http://gebloggt.ch/wp-content/uploads/2009/05/zookoda.jpg"></a><a href="http://gebloggt.ch/wp-content/uploads/2009/05/zookoda.jpg"><img class="alignnone size-full wp-image-477" src="http://gebloggt.ch/wp-content/uploads/2009/05/zookoda.jpg" alt="zookoda" width="400" height="559" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2009/05/13/opfer-der-wirtschaftskrise-zookoda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP Notice on line 0: Mailbox is empty</title>
		<link>http://gebloggt.ch/2009/04/08/php-error-mailbox-is-empty/</link>
		<comments>http://gebloggt.ch/2009/04/08/php-error-mailbox-is-empty/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 20:15:57 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=450</guid>
		<description><![CDATA[Kürzlich hat mich folgende PHP-Meldung verunsichert: Notice: Unknown: Mailbox is empty (errflg=1) in Unknown on line 0 Die Meldung erscheint am Ende des Scripts, nachdem die Verbindung zur Mailbox getrennt wurde. Die Zeilennummer ist nicht wirklich aussagekräftig. Ursache: beim Trennen der Verbindung mit der Mailbox werden noch alle nicht ausgegebenen Fehler (?) verarbeitet und ausgegeben. [...]]]></description>
			<content:encoded><![CDATA[<p>Kürzlich hat mich folgende PHP-Meldung verunsichert:</p>
<blockquote><p><strong>Notice</strong>: Unknown: Mailbox is empty (errflg=1) in <strong>Unknown</strong> on line <strong>0</strong></p></blockquote>
<p>Die Meldung erscheint am Ende des Scripts, nachdem die Verbindung zur Mailbox getrennt wurde. Die Zeilennummer ist nicht wirklich aussagekräftig. Ursache: beim Trennen der Verbindung mit der Mailbox werden noch alle nicht ausgegebenen Fehler (?) verarbeitet und ausgegeben. Wenn man davor den Befehl imap_errors() aufruft, wird diese notice nicht ausgegeben.</p>
<p>Warum kann ich mir nicht schlüssig  erklären, es wird auch auf <a href="http://ch.php.net/manual/de/function.imap-errors.php">http://ch.php.net/manual/de/function.imap-errors.php</a> (siehe Kommentar) nicht exakt beschrieben. Vielleicht hat jemand eine bessere Erklärung?</p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2009/04/08/php-error-mailbox-is-empty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress: seltsame Sicherheitsschlüssel</title>
		<link>http://gebloggt.ch/2008/12/19/wordpress-sicherheitsschluessel/</link>
		<comments>http://gebloggt.ch/2008/12/19/wordpress-sicherheitsschluessel/#comments</comments>
		<pubDate>Fri, 19 Dec 2008 06:38:26 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[Blogging]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=414</guid>
		<description><![CDATA[WordPress ist schon sehr suspekt. Ich habe mich ja noch nie näher mit dem Code befasst. Aber wenn in der config vier Sicherheitsschlüssel definiert werden müssen, kann doch etwas nicht stimmen. Wie gesagt, ich kenne den Sinn dieser Schlüssel nicht und habe mich auch nicht damit befasst. Aber ich kann mir nicht erklären, was das [...]]]></description>
			<content:encoded><![CDATA[<p>WordPress ist schon sehr suspekt. Ich habe mich ja noch nie näher mit dem Code befasst. Aber wenn in der config <strong>vier</strong> Sicherheitsschlüssel definiert werden müssen, kann doch etwas nicht stimmen. Wie gesagt, ich kenne den Sinn dieser Schlüssel nicht und habe mich auch nicht damit befasst. Aber ich kann mir nicht erklären, was das soll.</p>
<p>Nun bin ich <a href="http://www.texto.de/texto/wordpress-27-wp-config-php-sicherheit/">hier</a> auf eine Meldung gestossen, dass in einer deutschen WordPress-Version eine dieser Schlüssel fehle. Die Konsequenz könne ein gehacktes Blog sein. Von der Anwenderfreundlichkeit bezüglich dieses Schüsselhandlings sage ich jetzt nichts. Diese Schlüssel habe ich auf allen Blogs natürlich gleich überprüft und die Schlüssel gesetzt. Trotzdem frage ich mich, was an dieser Software falsch sein muss, dass die Sicherheit an einer solch lausigen Konstante hängt. Vielleicht kann mir das mal jemand, kurz und knapp in zwei Sätzen erklären? Ich nehme mir vor, dieser Sache bei Gelegenheit einmal nachzugehen. Denn es beunruhigt schon irgendwie.</p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2008/12/19/wordpress-sicherheitsschluessel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>T3: tw_rssfeeds reloaded</title>
		<link>http://gebloggt.ch/2008/06/19/t3-tw_rssfeeds-reloaded/</link>
		<comments>http://gebloggt.ch/2008/06/19/t3-tw_rssfeeds-reloaded/#comments</comments>
		<pubDate>Thu, 19 Jun 2008 21:52:16 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[TYPO3]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=388</guid>
		<description><![CDATA[Bereits früher habe ich Verbesserungen für diese TYPO3-Extension erläutert (http://gebloggt.ch/?p=368). Nun wurde die Extension völlig &#8220;nutzlos&#8221;, da mit ausgeschaltetem allow_url_fopen von PHP nichts mehr funktionierte. Ich zitere das problematische Stück code aus der Datei pi1/class.tx_twrssfeeds_pi1.php: function xml_file($file) { if (!($fp = @fopen($file, &#8220;r&#8221;))) $this-&#62;error(&#8220;Kann XML-Datei &#60;b&#62;&#8221;.$file.&#8221;&#60;/b&#62; nicht öffnen&#8221;); while ($data = fread($fp, 4096)) { if [...]]]></description>
			<content:encoded><![CDATA[<p>Bereits früher habe ich Verbesserungen für diese <a href="http://www.typo3.org">TYPO3</a>-Extension erläutert (<a href="http://gebloggt.ch/?p=368">http://gebloggt.ch/?p=368</a>). Nun wurde die Extension völlig &#8220;nutzlos&#8221;, da mit ausgeschaltetem <span style="font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;font-size: x-small"><span style="font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;font-size: x-small">allow_url_fopen</span></span> von PHP nichts mehr funktionierte.</p>
<p>Ich zitere das problematische Stück code aus der Datei pi1/class.tx_twrssfeeds_pi1.php:</p>
<blockquote><p>function xml_file($file) {<br />
if (!($fp = @fopen($file, &#8220;r&#8221;)))<br />
$this-&gt;error(&#8220;Kann XML-Datei &lt;b&gt;&#8221;.$file.&#8221;&lt;/b&gt; nicht öffnen&#8221;);</p>
<p>while ($data = fread($fp, 4096)) {<br />
if (!(xml_parse($this-&gt;parser, $data)))<br />
$this-&gt;error(&#8220;XML-Output: &#8220;.xml_error_string(xml_get_error_code($this-&gt;parser)));<br />
}</p>
<p>xml_parser_free($this-&gt;parser);<br />
}</p></blockquote>
<p>Natürlich geht das mit der erwähnten PHP-Option nicht. Verbessert (ich weiss, wieder etwas workaround-mässig):</p>
<blockquote><p>function xml_file($file) {<br />
require_once(&#8220;HTTPRequest.php&#8221;);<br />
$httpReq = new HTTPRequest($file);<br />
$data = $httpReq-&gt;DownloadToString();</p>
<p>if (!(xml_parse($this-&gt;parser, $data))) {<br />
$this-&gt;error(&#8220;XML-Output: &#8220;.xml_error_string(xml_get_error_code($this-&gt;parser)));<br />
}</p>
<p>xml_parser_free($this-&gt;parser);</p>
<p>}</p></blockquote>
<p>Die Klasse HTTPRequest.php ist etwas ähnliches wie die entsprechende PEAR-Klasse, jedoch etwas einfacher zu benutzen. Und man kann damit den Inhalt externer URLs abrufen, ohne dass <span style="font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;font-size: x-small"><span style="font-family: Verdana,Geneva,Arial,Helvetica,sans-serif;font-size: x-small">allow_url_fopen auf true gesetzt sein muss. Quelle der Klasse: <a href="http://www.php-resource.de/forum/showthread/t-65376.html">http://www.php-resource.de/forum/showthread/t-65376.html</a></span></span></p>
<p>Ich hab die Klasse auch schon bei anderen Applikationen gebraucht, um externe Files mit PHP zu öffnen. Hat bisher sehr gut funktioniert. Für eine schöne Lösung müsste man dies ev. in die Extension einbauen, da so eine externe Datei nicht so elegant ist.</p>
<p>Ausserdem hat der im Beitrag zitierte Code noch einen kleinen Bug. Die Variable response (in der Funktion DownlaodToString() wurde nicht deklariert und initialisiert. Das</p>
<blockquote><p>$response.= fread(&#8230;)</p></blockquote>
<p>erzeugt dadurch einen Notice von PHP.</p>
<p>Also kurz:</p>
<ol>
<li>pi1/class.tx_twrssfeeds_pi1.php anpassen, hochladen</li>
<li>HTTPRequest.php erstellen und ins selbe Verzeichnis hochladen (ggf. $response noch deklarieren).</li>
</ol>
<p>Damit sollte die Extension wieder funktionieren. Bei mir läuft die Sache prima.</p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2008/06/19/t3-tw_rssfeeds-reloaded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pagination mit CodeIgniter</title>
		<link>http://gebloggt.ch/2008/02/20/pagination-mit-codeigniter/</link>
		<comments>http://gebloggt.ch/2008/02/20/pagination-mit-codeigniter/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 08:58:55 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=374</guid>
		<description><![CDATA[Seit einiger Zeit verwende ich das PHP-Framework CodeIgniter zur Erstellung einer Web-Applikation. CodeIgniter bringt für das sog. Pagination (zeigt sowas ähnliches wie « First &#60; 1 2 3 4 5 &#62; Last » zum Darstellen grosser Listen auf mehrern Seiten) eine coole Library mit. Kurzes Tutorial zur Verwendung der Pagination-Library mit zusätzlichen Argumenten (sort order, [...]]]></description>
			<content:encoded><![CDATA[<p>Seit einiger Zeit verwende ich das PHP-Framework <a href="http://www.codeigniter.com">CodeIgniter</a> zur Erstellung einer Web-Applikation. CodeIgniter bringt für das sog. Pagination (zeigt sowas ähnliches wie</p>
<blockquote>
<p style="margin-bottom: 0in">« First  &lt; 1 2 3 4 5 &gt;  Last »</p>
</blockquote>
<p>zum Darstellen grosser Listen auf mehrern Seiten) eine coole Library mit.</p>
<p>Kurzes Tutorial zur Verwendung der Pagination-Library mit zusätzlichen Argumenten (sort order, sort direction):</p>
<p>1. Erstellen der Links:</p>
<blockquote><p>$this-&gt;load-&gt;library(&#8216;pagination&#8217;);<br />
$config['base_url'] = base_url().&#8217;/controller/index/&#8217;.$data['sortCol'].&#8217;/&#8217;.$data['sortDir'].&#8217;/';<br />
$config['uri_segment'] = 5;<br />
$config['total_rows'] = $this-&gt;model-&gt;getNofRecords($id);<br />
$config['per_page'] = $this-&gt;config-&gt;item(&#8216;itemsPerPage&#8217;);<br />
$this-&gt;pagination-&gt;initialize($config);<br />
$data['links'] = $this-&gt;pagination-&gt;create_links();</p></blockquote>
<p>Damit wird in $data ['links']  die Links für das Navigieren gespeichert. In base_url wird die URL angegeben, an die anschliessend das Pagination-Argument (=start index) angehängt wird. Nach der Variable sortCol und sortDir wird eine Zahl angehängt, welche den Startindex darstellt. uri_segment muss in diesem Fall 5 sein, da dieser Startindex das 5. Segment sein wird (controller ist 1.). total_rows wird aus der Datenbank gelesen (insgesamte Anzahl Datensätze), per_page wird aus der Konfiguration gelesen.</p>
<p>2. Konstruktor des Controllers</p>
<p>Der Konstruktor des Controllers nimmt 3 Argumente auf: sortCol, sortDir und startIndex. Alle drei haben Default-Werte, müssen also nicht zwingend mitgegeben werden. Insebesondere das letzte Argument (startIndex) sollte einen Default-Wert haben, da auf der 1. Seite die Pagination-Library keinen Wert mitgibt:</p>
<blockquote><p>function index($sortCol=&#8217;vehicle.carNumber&#8217;,$sortDir=&#8217;ASC&#8217;, $startInd=0){&#8230;</p></blockquote>
<p>Die Parameter werden in internen Variablen gespeichert bis zur Verwendung.</p>
<p>3. Verwendung:</p>
<p>Dem Model werden die obigen  drei Parameter mitgegeben. Der Aufruf sieht folgendermassen aus:</p>
<blockquote><p>$data['data'] = $this-&gt;model-&gt;getList($id, $this-&gt;sortColumn, $this-&gt;sortDirection, $this-&gt;startIndex);</p></blockquote>
<p>4. Das Model</p>
<p>Im Model wird die Query mit dem Limit-Operator angereichert:</p>
<blockquote><p>$this-&gt;db-&gt;select(&#8216;field&#8217;)-&gt;from(&#8216;table&#8217;)-&gt;Where(&#8216;user_id&#8217;, $user_id)-&gt;order_by($sortColumn, $sortDirection)-&gt;limit($this-&gt;config-&gt;item(&#8216;itemsPerPage&#8217;), $startIndex);</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2008/02/20/pagination-mit-codeigniter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>PHP Frameworks</title>
		<link>http://gebloggt.ch/2008/02/08/php-frameworks/</link>
		<comments>http://gebloggt.ch/2008/02/08/php-frameworks/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 22:40:04 +0000</pubDate>
		<dc:creator>adminop</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://gebloggt.ch/?p=371</guid>
		<description><![CDATA[Kürzlich wurde ein neues PHP-Framework vorgestellt, auf dem TYPO3 5.0 basieren wird. Es hat den Namen flow3. Persönlich habe ich meinen Entscheid bereits vor einigen Wochen getroffen. Die Wahl ist auf CodeIgniter gefallen. Die durchgehend vorhandene MVC-Architektur gefällt mir sehr. Meine erste grössere Webapplikation damit ist in Arbeit. Einige Tipps und Anfangs-Hürden werde ich in [...]]]></description>
			<content:encoded><![CDATA[<p>Kürzlich wurde ein neues PHP-Framework vorgestellt, auf dem TYPO3 5.0 basieren wird. Es hat den Namen <a href="http://flow3.typo3.org">flow3</a>.</p>
<p>Persönlich habe ich meinen Entscheid bereits vor einigen Wochen getroffen. Die Wahl ist auf <a href="http://codeigniter.com/">CodeIgniter</a> gefallen. Die durchgehend vorhandene <a href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a>-Architektur gefällt mir sehr. Meine erste grössere Webapplikation damit ist in Arbeit. Einige Tipps und Anfangs-Hürden werde ich in einem späteren Post beschreiben.</p>
<p>Hinter <a href="http://en.wikipedia.org/wiki/Codeigniter">CodeIgniter</a> steht die Firma  <a href="http://ellislab.com/">EllisLab Inc.</a>. Doch die Software ist OpenSource und wird auch weiterentwickelt. Erst gerade (Ende Januar) wurde die neue Version 1.6 des Frameworks veröffentlicht. Von CodeIgniter gibt es jedoch auch einen <a href="http://en.wikipedia.org/wiki/Fork_%28software_development%29">Fork</a>. Das Framework heisst <a href="http://kohanaphp.com">kohanaPHP</a> und ist noch ziemlich ähnlich wie CodeIgniter. Grosse Unterschiede sehe ich auf den ersten Blick nicht. Zurzeit ist CodeIgniter noch besser dokumentiert. Als Grund für die Abspaltung wird übrigens die Schirmherrschaft von EllisLab angegeben. <a href="http://en.wikipedia.org/wiki/KohanaPHP">kohanaPHP</a> soll ein &#8220;echtes&#8221;, von der Community entwickeltes Framework werden. Ich finde: Konkurrenz hat noch nie geschadet. Und diese Entwicklung zeigt gerade das Potential und Anhängerschaft, die hinter diesen beiden Frameworks stehen.</p>
<p>Ich werde die Entwicklung der PHP-Frameworks interessiert weiterverfolgen. Und ich kann mir auch jederzeit vorstellen, für neue Projekte andere Frameworks einzusetzen, wenn es die Anforderungen verlangen. Für die &#8220;grossen&#8221; (<a href="http://www.symfony-project.org/">symfony</a> und <a href="http://www.cakephp.org/">cakePHP</a>) habe ich zurzeit noch keinen Bedarf, da CodeIgniter meine Bedürfnisse gut abdeckt.</p>
<p>Wer übrigens eine Übersicht von PHP-Frameworks sucht, dem sei folgender Link empfohlen: <a href="http://www.masterbootrecord.de/blog/Auf-der-Suche-nach-dem-perfekten-PHP-Application-Framework/Auf-der-Suche-nach-dem-perfekten-PHP-Application-Framework_2005-11-21_169.html">http://www.masterbootrecord.de/blog/&#8230;</a> Wenn man CodeIgniter noch hinzunimmt, ist die Auflistung beinahe komplett <img src='http://gebloggt.ch/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://gebloggt.ch/2008/02/08/php-frameworks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

