<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Ep2 Developers Community - Alle forums]]></title>
		<link>http://ep2.nl/</link>
		<description><![CDATA[Ep2 Developers Community - http://ep2.nl]]></description>
		<pubDate>Fri, 03 Sep 2010 23:32:01 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[tekstuele formule omzetten naar een echte formule]]></title>
			<link>http://ep2.nl/thread-7695.html</link>
			<pubDate>Thu, 02 Sep 2010 08:58:09 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7695.html</guid>
			<description><![CDATA[Hoi hoi,<br />
<br />
Mijn tweede post en meteen een vraag.<br />
<br />
In mijn programma moet ik formules testen met waardes die gebruikers intoetsen. Zowel de formules als de waardes liggen niet vast, dus worden op regels ingevoerd. Hele simpele formule:<br />
<br />
"1+2/2*3"<br />
<br />
Dit is dus een string, hoe vorm ik dat om zodat het een waarde oplevert.<br />
<br />
groetjes,<br />
<br />
Marco]]></description>
			<content:encoded><![CDATA[Hoi hoi,<br />
<br />
Mijn tweede post en meteen een vraag.<br />
<br />
In mijn programma moet ik formules testen met waardes die gebruikers intoetsen. Zowel de formules als de waardes liggen niet vast, dus worden op regels ingevoerd. Hele simpele formule:<br />
<br />
"1+2/2*3"<br />
<br />
Dit is dus een string, hoe vorm ik dat om zodat het een waarde oplevert.<br />
<br />
groetjes,<br />
<br />
Marco]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hoi]]></title>
			<link>http://ep2.nl/thread-7694.html</link>
			<pubDate>Thu, 02 Sep 2010 08:49:42 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7694.html</guid>
			<description><![CDATA[Hoi,<br />
<br />
Mijn naam is Marco de Boer en ben generiek programmeur, dat wil zeggen; ik kan in bijna alle mainstream talen werken, maar ben nergens een echte specialist in.<br />
Op dit moment aan het werk in Velsen Noord als Java/J2EE en C# programmeur.<br />
<br />
Begonnen, zoals velen, op de Commodore 64 in basic, overgestapt op de Apple Macintosh en Turbo Pascal (1.0 toen nog). Daarna Atari ST (C en basic, pascal) en Amiga &copy;<br />
<br />
Apple is nog steeds mijn platform(mijn eerste Apple trouwens ook) maar heb geen voorkeur voor een programmeertaal.]]></description>
			<content:encoded><![CDATA[Hoi,<br />
<br />
Mijn naam is Marco de Boer en ben generiek programmeur, dat wil zeggen; ik kan in bijna alle mainstream talen werken, maar ben nergens een echte specialist in.<br />
Op dit moment aan het werk in Velsen Noord als Java/J2EE en C# programmeur.<br />
<br />
Begonnen, zoals velen, op de Commodore 64 in basic, overgestapt op de Apple Macintosh en Turbo Pascal (1.0 toen nog). Daarna Atari ST (C en basic, pascal) en Amiga &copy;<br />
<br />
Apple is nog steeds mijn platform(mijn eerste Apple trouwens ook) maar heb geen voorkeur voor een programmeertaal.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[variabel aantal POST velden serializen]]></title>
			<link>http://ep2.nl/thread-7693.html</link>
			<pubDate>Tue, 31 Aug 2010 15:30:05 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7693.html</guid>
			<description><![CDATA[Hey, een website waar ik aan werk ontvangt ingevulde contactformulieren met elk verschillende POST-velden. Omdat de velden vaak verschillen kan ik niet voor elk veld een tabelkolom maken. Bijv:<br />
<br />
<blockquote><cite>Citaat:</cite>[formulier1&#93;<br />
Naam: Piet<br />
Leeftijd: 23<br />
Mening: Ik ben tevreden etc blaat<br />
<br />
[formulier2&#93;<br />
Type: qwerty Tshirt<br />
Kleur: groen<br />
Maat: XS<br />
Aantal: 2</blockquote>
<br />
De methode die ik eerst in geachten had is om alle POST waarden als HTML in een TEXTkolom op te slaan, en deze weer te geven wanneer gevraagd. Dit is wel sneller, maar zeker niet flexibel. Bovendien gaat de waarde van de data verloren omdat het wordt samengevoegd tot één tekstveld in de tabel.<br />
<br />
Vandaar dat ik van plan ben om de POST variabelen te serializen, zodat er meer gedaan kan worden met de variabele POSTwaarden. De admin kan dan aangeven allleen de emailadressen op te vragen, of alleen het naamveld+adresveld, etc. <br />
<br />
Ik heb hierbij een aantal vragen. Is serializing niet een heel intensieve opdracht voor de server? Als een admin 3 velden van een formulier met normaal 10 velden opvraagt, en er zijn 300 dbase entries, kost dat niet teveel resources om alle opgevraagde records ook nog eens te unserializen?<br />
<br />
En bovendien, welke velden zou ik serializen? Ik zit te denken tussen een splitsing tussen vaste velden (worden altijd gebruikt) en variabele velden (zijn form specifiek), bijvoorbeeld:<br />
<br />
<blockquote><cite>Citaat:</cite><span style="text-decoration: underline;">itemid</span>, referer, subject, time, formfields_serialized<br />
1, "http://bla.nl", "onderwerp hier", tijd, {naam:piet,leeftijd:23,mening:bla}</blockquote>
<br />
Wat vinden jullie? Is serializing goed te gebruiken? En is de splitsing tussen vaste en variabele velden een goeie verdeling?]]></description>
			<content:encoded><![CDATA[Hey, een website waar ik aan werk ontvangt ingevulde contactformulieren met elk verschillende POST-velden. Omdat de velden vaak verschillen kan ik niet voor elk veld een tabelkolom maken. Bijv:<br />
<br />
<blockquote><cite>Citaat:</cite>[formulier1]<br />
Naam: Piet<br />
Leeftijd: 23<br />
Mening: Ik ben tevreden etc blaat<br />
<br />
[formulier2]<br />
Type: qwerty Tshirt<br />
Kleur: groen<br />
Maat: XS<br />
Aantal: 2</blockquote>
<br />
De methode die ik eerst in geachten had is om alle POST waarden als HTML in een TEXTkolom op te slaan, en deze weer te geven wanneer gevraagd. Dit is wel sneller, maar zeker niet flexibel. Bovendien gaat de waarde van de data verloren omdat het wordt samengevoegd tot één tekstveld in de tabel.<br />
<br />
Vandaar dat ik van plan ben om de POST variabelen te serializen, zodat er meer gedaan kan worden met de variabele POSTwaarden. De admin kan dan aangeven allleen de emailadressen op te vragen, of alleen het naamveld+adresveld, etc. <br />
<br />
Ik heb hierbij een aantal vragen. Is serializing niet een heel intensieve opdracht voor de server? Als een admin 3 velden van een formulier met normaal 10 velden opvraagt, en er zijn 300 dbase entries, kost dat niet teveel resources om alle opgevraagde records ook nog eens te unserializen?<br />
<br />
En bovendien, welke velden zou ik serializen? Ik zit te denken tussen een splitsing tussen vaste velden (worden altijd gebruikt) en variabele velden (zijn form specifiek), bijvoorbeeld:<br />
<br />
<blockquote><cite>Citaat:</cite><span style="text-decoration: underline;">itemid</span>, referer, subject, time, formfields_serialized<br />
1, "http://bla.nl", "onderwerp hier", tijd, {naam:piet,leeftijd:23,mening:bla}</blockquote>
<br />
Wat vinden jullie? Is serializing goed te gebruiken? En is de splitsing tussen vaste en variabele velden een goeie verdeling?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Ledensysteem Zonder SQL en Mysql]]></title>
			<link>http://ep2.nl/thread-7692.html</link>
			<pubDate>Sat, 28 Aug 2010 20:54:15 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7692.html</guid>
			<description><![CDATA[Hallo..<br />
<br />
Ik heb een ledensysteem gemaakt. alleen nu wil ik als ik ingelogt ben de leden laten zien in het menu.<br />
+ dat ik een pagina kan beveligen zodat je na het inloggen pas de pagina kan zien.<br />
<br />
Ik heb gewerkt met <br />
&#36;gebruikersnaam array()<br />
&#36;gebruikersnaam[1&#93; = 'admin';<br />
<br />
Graag kunnen jullie mijn helpen hieronder code<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?<br />session_start</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//Je&nbsp;gebruikersnamen<br /></span><span style="color: #0000BB">&#36;gebruikersnaam&nbsp;</span><span style="color: #007700">=&nbsp;array();<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//Je&nbsp;wachtwoorden<br /></span><span style="color: #0000BB">&#36;wachtwoord&nbsp;</span><span style="color: #007700">=&nbsp;array();<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"Hierhetwachtwoord"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">//Wijzig&nbsp;hier&nbsp;verder&nbsp;niets&nbsp;als&nbsp;je&nbsp;er&nbsp;geen&nbsp;verstand&nbsp;van&nbsp;hebt<br /></span><span style="color: #007700">if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"actie"</span><span style="color: #007700">&#93;))&nbsp;{<br />&nbsp;</span><span style="color: #0000BB">&#36;_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"actie"</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />}&nbsp;<br />if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">&#93;))&nbsp;{<br />&nbsp;</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />}<br />function&nbsp;</span><span style="color: #0000BB">inArrayPlusKey</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">){<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">&#93;&nbsp;==&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />function&nbsp;</span><span style="color: #0000BB">check_online</span><span style="color: #007700">()&nbsp;{<br />&nbsp;if(</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">&#93;&nbsp;!=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />&nbsp;}<br />&nbsp;else&nbsp;{<br />&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;}<br />}<br /><br /></span><span style="color: #FF8000">//Html&nbsp;+&nbsp;Codes<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;html&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;head&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;title&gt;Xonex&nbsp;-&nbsp;Website&nbsp;Op&nbsp;Maat&lt;/title&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=iso-8859-1"&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;style&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'a{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'color:&nbsp;#000066;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'text-decoration:&nbsp;none;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'a:hover{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'color:&nbsp;#000066;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'text-decoration:&nbsp;underline;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'input,&nbsp;textarea,&nbsp;select{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-family:&nbsp;verdana;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-size:&nbsp;7pt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'border:&nbsp;1px&nbsp;solid&nbsp;#000000;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'body,&nbsp;td{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-family:&nbsp;verdana;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-size:&nbsp;7pt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;/style&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;/head&gt;'</span><span style="color: #007700">;&nbsp;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;body&gt;'</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">//&nbsp;Kijk&nbsp;of&nbsp;er&nbsp;ingelogd&nbsp;moet&nbsp;worden<br /></span><span style="color: #007700">if(isset(</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"login"</span><span style="color: #007700">&#93;)){<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"wachtwoord"</span><span style="color: #007700">&#93;&nbsp;==&nbsp;</span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">inArrayPlusKey</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"gebruikersnaam"</span><span style="color: #007700">&#93;,</span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">)&#93;){&nbsp;</span><span style="color: #FF8000">//&nbsp;Kijk&nbsp;of&nbsp;gebruikersnaam&nbsp;met&nbsp;wachtwoord&nbsp;overeen&nbsp;komen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"gebruikersnaam"</span><span style="color: #007700">&#93;;&nbsp;</span><span style="color: #FF8000">//zet&nbsp;de&nbsp;sessie&nbsp;klaar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'U&nbsp;Wordt&nbsp;Ingelogt..'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;br&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;a&nbsp;href="index.php"&gt;Ga&nbsp;verder&lt;/a&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'U&nbsp;Heeft&nbsp;Waarschijnlijk&nbsp;Een&nbsp;Verkeer&nbsp;Wachtwoord&nbsp;Ingevoert&nbsp;Of&nbsp;Een&nbsp;Verkeerde&nbsp;Gebruikersnaam'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//als&nbsp;je&nbsp;wel&nbsp;bent&nbsp;ingelogd<br />&nbsp;&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">check_online</span><span style="color: #007700">()&nbsp;==&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//Wijzig&nbsp;dit&nbsp;om&nbsp;te&nbsp;zien&nbsp;wat&nbsp;er&nbsp;moet&nbsp;verschijnen&nbsp;wat&nbsp;alleen&nbsp;de&nbsp;gebruikers&nbsp;mogen&nbsp;zien&nbsp;als&nbsp;ze&nbsp;zijn&nbsp;ingelogd.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;table&nbsp;border="1"&nbsp;width="100%"&nbsp;bordercolor="#000000"&nbsp;style="border-collapse:&nbsp;collapse"&nbsp;cellpadding="3"&gt;'</span><span style="color: #007700">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="100%"&nbsp;align="center"&gt;&lt;a&nbsp;href="leden.php"&gt;Leden&lt;/a&gt;&lt;br&gt;Profiel&lt;br&gt;Bestelling&lt;br&gt;Factuur&lt;br&gt;&lt;/td&gt;'</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;/table&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;table&nbsp;border="1"&nbsp;width="100%"&nbsp;bordercolor="#000000"&nbsp;style="border-collapse:&nbsp;collapse"&nbsp;cellpadding="3"&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="100%"&nbsp;align="center"&gt;&lt;a&nbsp;href="?actie=Uitloggen"&gt;Uitloggen&lt;/a&gt;&lt;/td&gt;'</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;/table&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"actie"</span><span style="color: #007700">&#93;&nbsp;==&nbsp;</span><span style="color: #DD0000">"Uitloggen"</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">session_destroy</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;br&gt;Je&nbsp;bent&nbsp;uitgelogd,&nbsp;&lt;a&nbsp;href="index.php"&gt;Klik&nbsp;hier&nbsp;om&nbsp;terug&nbsp;te&nbsp;gaan&lt;/a&gt;&lt;br&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//Anders&nbsp;een&nbsp;leuk&nbsp;inlog&nbsp;ding<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;table&nbsp;border="1"&nbsp;width="100%"&nbsp;bordercolor="#000000"&nbsp;style="border-collapse:&nbsp;collapse"&nbsp;cellpadding="3"&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&lt;form&nbsp;method="post"&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;Gebruikersnaam&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&lt;input&nbsp;type="text"&nbsp;name="gebruikersnaam"&gt;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;Wachtwoord&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&lt;input&nbsp;type="password"&nbsp;name="wachtwoord"&gt;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&amp;nbsp;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&lt;input&nbsp;type="submit"&nbsp;name="login"&nbsp;value="Login"&gt;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&lt;/form&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;/table&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></code></div></div></div>
]]></description>
			<content:encoded><![CDATA[Hallo..<br />
<br />
Ik heb een ledensysteem gemaakt. alleen nu wil ik als ik ingelogt ben de leden laten zien in het menu.<br />
+ dat ik een pagina kan beveligen zodat je na het inloggen pas de pagina kan zien.<br />
<br />
Ik heb gewerkt met <br />
&#36;gebruikersnaam array()<br />
&#36;gebruikersnaam[1] = 'admin';<br />
<br />
Graag kunnen jullie mijn helpen hieronder code<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?<br />session_start</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">error_reporting</span><span style="color: #007700">(</span><span style="color: #0000BB">E_ALL</span><span style="color: #007700">);<br /></span><span style="color: #FF8000">//Je&nbsp;gebruikersnamen<br /></span><span style="color: #0000BB">&#36;gebruikersnaam&nbsp;</span><span style="color: #007700">=&nbsp;array();<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//Je&nbsp;wachtwoorden<br /></span><span style="color: #0000BB">&#36;wachtwoord&nbsp;</span><span style="color: #007700">=&nbsp;array();<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">1</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"Hierhetwachtwoord"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">2</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">3</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">4</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">5</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">"xxxx"</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">//Wijzig&nbsp;hier&nbsp;verder&nbsp;niets&nbsp;als&nbsp;je&nbsp;er&nbsp;geen&nbsp;verstand&nbsp;van&nbsp;hebt<br /></span><span style="color: #007700">if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"actie"</span><span style="color: #007700">]))&nbsp;{<br />&nbsp;</span><span style="color: #0000BB">&#36;_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"actie"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />}&nbsp;<br />if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">]))&nbsp;{<br />&nbsp;</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">;<br />}<br />function&nbsp;</span><span style="color: #0000BB">inArrayPlusKey</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">){<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">in_array</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">,</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">)){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">=</span><span style="color: #0000BB">0</span><span style="color: #007700">;&nbsp;</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">&lt;</span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">);&nbsp;</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">++){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;array</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;i</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />function&nbsp;</span><span style="color: #0000BB">check_online</span><span style="color: #007700">()&nbsp;{<br />&nbsp;if(</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">]&nbsp;!=&nbsp;</span><span style="color: #DD0000">""</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">;<br />&nbsp;}<br />&nbsp;else&nbsp;{<br />&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />&nbsp;}<br />}<br /><br /></span><span style="color: #FF8000">//Html&nbsp;+&nbsp;Codes<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;html&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;head&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;title&gt;Xonex&nbsp;-&nbsp;Website&nbsp;Op&nbsp;Maat&lt;/title&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;meta&nbsp;http-equiv="Content-Type"&nbsp;content="text/html;&nbsp;charset=iso-8859-1"&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;style&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'a{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'color:&nbsp;#000066;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'text-decoration:&nbsp;none;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'a:hover{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'color:&nbsp;#000066;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'text-decoration:&nbsp;underline;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'input,&nbsp;textarea,&nbsp;select{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-family:&nbsp;verdana;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-size:&nbsp;7pt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'border:&nbsp;1px&nbsp;solid&nbsp;#000000;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'body,&nbsp;td{&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-family:&nbsp;verdana;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'font-size:&nbsp;7pt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'}&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;/style&gt;&nbsp;'</span><span style="color: #007700">;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;/head&gt;'</span><span style="color: #007700">;&nbsp;<br />echo&nbsp;</span><span style="color: #DD0000">'&lt;body&gt;'</span><span style="color: #007700">;<br /><br /><br /></span><span style="color: #FF8000">//&nbsp;Kijk&nbsp;of&nbsp;er&nbsp;ingelogd&nbsp;moet&nbsp;worden<br /></span><span style="color: #007700">if(isset(</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"login"</span><span style="color: #007700">])){<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"wachtwoord"</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #0000BB">&#36;wachtwoord</span><span style="color: #007700">[</span><span style="color: #0000BB">inArrayPlusKey</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"gebruikersnaam"</span><span style="color: #007700">],</span><span style="color: #0000BB">&#36;gebruikersnaam</span><span style="color: #007700">)]){&nbsp;</span><span style="color: #FF8000">//&nbsp;Kijk&nbsp;of&nbsp;gebruikersnaam&nbsp;met&nbsp;wachtwoord&nbsp;overeen&nbsp;komen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">"Admin"</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">&#36;_POST</span><span style="color: #007700">[</span><span style="color: #DD0000">"gebruikersnaam"</span><span style="color: #007700">];&nbsp;</span><span style="color: #FF8000">//zet&nbsp;de&nbsp;sessie&nbsp;klaar<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'U&nbsp;Wordt&nbsp;Ingelogt..'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;br&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;a&nbsp;href="index.php"&gt;Ga&nbsp;verder&lt;/a&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'U&nbsp;Heeft&nbsp;Waarschijnlijk&nbsp;Een&nbsp;Verkeer&nbsp;Wachtwoord&nbsp;Ingevoert&nbsp;Of&nbsp;Een&nbsp;Verkeerde&nbsp;Gebruikersnaam'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />else{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//als&nbsp;je&nbsp;wel&nbsp;bent&nbsp;ingelogd<br />&nbsp;&nbsp;</span><span style="color: #007700">if(</span><span style="color: #0000BB">check_online</span><span style="color: #007700">()&nbsp;==&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//Wijzig&nbsp;dit&nbsp;om&nbsp;te&nbsp;zien&nbsp;wat&nbsp;er&nbsp;moet&nbsp;verschijnen&nbsp;wat&nbsp;alleen&nbsp;de&nbsp;gebruikers&nbsp;mogen&nbsp;zien&nbsp;als&nbsp;ze&nbsp;zijn&nbsp;ingelogd.<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;table&nbsp;border="1"&nbsp;width="100%"&nbsp;bordercolor="#000000"&nbsp;style="border-collapse:&nbsp;collapse"&nbsp;cellpadding="3"&gt;'</span><span style="color: #007700">;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="100%"&nbsp;align="center"&gt;&lt;a&nbsp;href="leden.php"&gt;Leden&lt;/a&gt;&lt;br&gt;Profiel&lt;br&gt;Bestelling&lt;br&gt;Factuur&lt;br&gt;&lt;/td&gt;'</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;/table&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;table&nbsp;border="1"&nbsp;width="100%"&nbsp;bordercolor="#000000"&nbsp;style="border-collapse:&nbsp;collapse"&nbsp;cellpadding="3"&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="100%"&nbsp;align="center"&gt;&lt;a&nbsp;href="?actie=Uitloggen"&gt;Uitloggen&lt;/a&gt;&lt;/td&gt;'</span><span style="color: #007700">;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;/table&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;_GET</span><span style="color: #007700">[</span><span style="color: #DD0000">"actie"</span><span style="color: #007700">]&nbsp;==&nbsp;</span><span style="color: #DD0000">"Uitloggen"</span><span style="color: #007700">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">session_destroy</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;br&gt;Je&nbsp;bent&nbsp;uitgelogd,&nbsp;&lt;a&nbsp;href="index.php"&gt;Klik&nbsp;hier&nbsp;om&nbsp;terug&nbsp;te&nbsp;gaan&lt;/a&gt;&lt;br&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//Anders&nbsp;een&nbsp;leuk&nbsp;inlog&nbsp;ding<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;table&nbsp;border="1"&nbsp;width="100%"&nbsp;bordercolor="#000000"&nbsp;style="border-collapse:&nbsp;collapse"&nbsp;cellpadding="3"&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&lt;form&nbsp;method="post"&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;Gebruikersnaam&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&lt;input&nbsp;type="text"&nbsp;name="gebruikersnaam"&gt;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;Wachtwoord&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&lt;input&nbsp;type="password"&nbsp;name="wachtwoord"&gt;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&amp;nbsp;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;width="50%"&gt;&lt;input&nbsp;type="submit"&nbsp;name="login"&nbsp;value="Login"&gt;&lt;/td&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&nbsp;&lt;/tr&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&nbsp;&lt;/form&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'&lt;/table&gt;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br /></span><span style="color: #0000BB">?&gt;</span></code></div></div></div>
]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Externe harde schijf]]></title>
			<link>http://ep2.nl/thread-7691.html</link>
			<pubDate>Sat, 28 Aug 2010 18:22:36 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7691.html</guid>
			<description><![CDATA[Hey allemaal,<br />
<br />
Ik ben nu op zoek naar een nieuwe externe harde schijf, eentje zonder externe voeding. Uiteindelijk is mn keuze gevallen op de <a href="http://www.lacie.com/nl/products/product.htm?pid=11401" target="_blank">LaCie Rikiki</a> of <a href="http://www.lacie.com/nl/products/product.htm?pid=11378" target="_blank">LaCie Starck</a> gevallen. Eerstgenoemde is wel echt een stukje kleiner en lichter, maar bij de tweede heb je geen problemen met vergeten van usb-kabel ed, is ook wel erg makkelijk.<br />
Waar zouden jullie voor gaan? Ik ben momenteel in dilemma en weet niet echt wat ik moet kiezen... Andere schijf kan natuurlijk ook nog, maar zou niet weten welke dan, had deze alleen nog over gehouden.<br />
Hopelijk kunnen jullie me met mn dilemma helpen.]]></description>
			<content:encoded><![CDATA[Hey allemaal,<br />
<br />
Ik ben nu op zoek naar een nieuwe externe harde schijf, eentje zonder externe voeding. Uiteindelijk is mn keuze gevallen op de <a href="http://www.lacie.com/nl/products/product.htm?pid=11401" target="_blank">LaCie Rikiki</a> of <a href="http://www.lacie.com/nl/products/product.htm?pid=11378" target="_blank">LaCie Starck</a> gevallen. Eerstgenoemde is wel echt een stukje kleiner en lichter, maar bij de tweede heb je geen problemen met vergeten van usb-kabel ed, is ook wel erg makkelijk.<br />
Waar zouden jullie voor gaan? Ik ben momenteel in dilemma en weet niet echt wat ik moet kiezen... Andere schijf kan natuurlijk ook nog, maar zou niet weten welke dan, had deze alleen nog over gehouden.<br />
Hopelijk kunnen jullie me met mn dilemma helpen.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hard Disk formatteren]]></title>
			<link>http://ep2.nl/thread-7689.html</link>
			<pubDate>Sat, 28 Aug 2010 10:06:28 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7689.html</guid>
			<description><![CDATA[Ik probeerde gisteren mijn harddisk (KIOSK 1TB) te formatteren, maar helaas is dit niet gelukt.<br />
Zo heb ik geprobeerd het te formatteren: rechtermuisknop-&gt;formatteren<br />
Dit zijn de settings die ik gebruikte:<br />
Capaciteit:<br />
         -931 GB<br />
Bestandssysteem:<br />
         -NTFS<br />
Clustergrootte:<br />
         -Standaard toegewezen grootte<br />
Volumenaam:<br />
         -KIOSK 1TB<br />
snelformatteren: niet aangevinkt<br />
compressie inschakelen: niet aangevinkt<br />
<br />
Alles verliep vlot, maar na een uurtje of 4 krijg ik de error: <br />
"kan het formatteren niet beïndigen".<br />
Nu heb ik dus een harddisk die niks kan. Weet iemand hoe ik hem nu wel juist kan formatteren?]]></description>
			<content:encoded><![CDATA[Ik probeerde gisteren mijn harddisk (KIOSK 1TB) te formatteren, maar helaas is dit niet gelukt.<br />
Zo heb ik geprobeerd het te formatteren: rechtermuisknop-&gt;formatteren<br />
Dit zijn de settings die ik gebruikte:<br />
Capaciteit:<br />
         -931 GB<br />
Bestandssysteem:<br />
         -NTFS<br />
Clustergrootte:<br />
         -Standaard toegewezen grootte<br />
Volumenaam:<br />
         -KIOSK 1TB<br />
snelformatteren: niet aangevinkt<br />
compressie inschakelen: niet aangevinkt<br />
<br />
Alles verliep vlot, maar na een uurtje of 4 krijg ik de error: <br />
"kan het formatteren niet beïndigen".<br />
Nu heb ik dus een harddisk die niks kan. Weet iemand hoe ik hem nu wel juist kan formatteren?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nokia N900 meerdere agenda's synchroniseren]]></title>
			<link>http://ep2.nl/thread-7688.html</link>
			<pubDate>Fri, 27 Aug 2010 19:20:40 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7688.html</guid>
			<description><![CDATA[Hey allemaal,<br />
<br />
Ik heb dus de Nokia N900, waarbij ik nu al prima 1 kalender gesynchroniseerd heb met mn exchange server. Prima allemaal, maar nu heb ik nog een tweede agenda die ik ook wil synchroniseren. Heb net al wat gezocht, maar ik kon nog niks vinden wat me echt goed genoeg op weg helpt, behalve dan dat het standaard gezien niet mogelijk is...<br />
Iemand ideetje?<br />
<br />
Anjo]]></description>
			<content:encoded><![CDATA[Hey allemaal,<br />
<br />
Ik heb dus de Nokia N900, waarbij ik nu al prima 1 kalender gesynchroniseerd heb met mn exchange server. Prima allemaal, maar nu heb ik nog een tweede agenda die ik ook wil synchroniseren. Heb net al wat gezocht, maar ik kon nog niks vinden wat me echt goed genoeg op weg helpt, behalve dan dat het standaard gezien niet mogelijk is...<br />
Iemand ideetje?<br />
<br />
Anjo]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Jquery > verschillende elementen binnen een LI benaderen]]></title>
			<link>http://ep2.nl/thread-7687.html</link>
			<pubDate>Thu, 26 Aug 2010 13:48:23 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7687.html</guid>
			<description><![CDATA[Hey iedereen, ik heb de volgende opstelling:<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>&lt;ul id="previewform"&gt;<br />
<br />
&lt;li id="vraag1234"&gt;<br />
Veld 1: &lt;input type="text" class="veld1" /&gt;&lt;br /&gt;<br />
Veld 2: &lt;input type="text" class="veld2" /&gt;&lt;br /&gt;<br />
Veld 3: &lt;input type="text" class="veld3" /&gt;&lt;br /&gt;<br />
&lt;input type="submit" class="verzenden" /&gt;<br />
&lt;/li&gt;<br />
<br />
&lt;li id="vraag5678"&gt;<br />
Veld 1: &lt;input type="text" class="veld1" /&gt;&lt;br /&gt;<br />
Veld 2: &lt;input type="text" class="veld2" /&gt;&lt;br /&gt;<br />
Veld 3: &lt;input type="text" class="veld3" /&gt;&lt;br /&gt;<br />
&lt;input type="submit" class="verzenden" /&gt;<br />
&lt;/li&gt;<br />
<br />
&lt;/ul&gt;</code></div></div>
<br />
Elk LI-element bevat dus een form met daarin 3 tekstvelden en een submit-button. Nu wil ik dat ik een handler kan toevoegen die voor elke button geldt, maar waarbij elke button wel zijn 'eigen' text-elementen gebruikt bij het &#36;.POST functie:<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>&#36;(document).ready(function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;('.verzenden').live("click",function (event) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;.post("/?page=ajax_setvraag", { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'vraag1': .verzenden.PARENT_LI_ID.veld1.val()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'vraag2': .verzenden.PARENT_LI_ID.veld2.val()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'vraag3': .verzenden.PARENT_LI_ID.veld3.val()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('test' + data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
});</code></div></div>
<br />
Ik had het al eerder 'opgelost' door elk text-element als id "vraag1_1234" etc mee te geven, maar omdat het een ajax/php combinatie is loop ik nu tegen de problemen aan, en wil ik beide talen beter van elkaar scheiden.<br />
<br />
Hoop dat ik mn vraag een beetje duidelijk heb uit kunnen leggen <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" />]]></description>
			<content:encoded><![CDATA[Hey iedereen, ik heb de volgende opstelling:<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>&lt;ul id="previewform"&gt;<br />
<br />
&lt;li id="vraag1234"&gt;<br />
Veld 1: &lt;input type="text" class="veld1" /&gt;&lt;br /&gt;<br />
Veld 2: &lt;input type="text" class="veld2" /&gt;&lt;br /&gt;<br />
Veld 3: &lt;input type="text" class="veld3" /&gt;&lt;br /&gt;<br />
&lt;input type="submit" class="verzenden" /&gt;<br />
&lt;/li&gt;<br />
<br />
&lt;li id="vraag5678"&gt;<br />
Veld 1: &lt;input type="text" class="veld1" /&gt;&lt;br /&gt;<br />
Veld 2: &lt;input type="text" class="veld2" /&gt;&lt;br /&gt;<br />
Veld 3: &lt;input type="text" class="veld3" /&gt;&lt;br /&gt;<br />
&lt;input type="submit" class="verzenden" /&gt;<br />
&lt;/li&gt;<br />
<br />
&lt;/ul&gt;</code></div></div>
<br />
Elk LI-element bevat dus een form met daarin 3 tekstvelden en een submit-button. Nu wil ik dat ik een handler kan toevoegen die voor elke button geldt, maar waarbij elke button wel zijn 'eigen' text-elementen gebruikt bij het &#36;.POST functie:<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>&#36;(document).ready(function() {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&#36;('.verzenden').live("click",function (event) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;.post("/?page=ajax_setvraag", { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'vraag1': .verzenden.PARENT_LI_ID.veld1.val()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'vraag2': .verzenden.PARENT_LI_ID.veld2.val()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'vraag3': .verzenden.PARENT_LI_ID.veld3.val()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function(data){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('test' + data);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;});<br />
});</code></div></div>
<br />
Ik had het al eerder 'opgelost' door elk text-element als id "vraag1_1234" etc mee te geven, maar omdat het een ajax/php combinatie is loop ik nu tegen de problemen aan, en wil ik beide talen beter van elkaar scheiden.<br />
<br />
Hoop dat ik mn vraag een beetje duidelijk heb uit kunnen leggen <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[mysql: MATCH AGAINST niet betrouwbaar?]]></title>
			<link>http://ep2.nl/thread-7686.html</link>
			<pubDate>Wed, 25 Aug 2010 14:42:43 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7686.html</guid>
			<description><![CDATA[Hoi,<br />
<br />
zoals sommigen van jullie al gelezen hadden in mijn vorige topic ben ik dus geen database expert en stuit nu op het volgende.<br />
<br />
Ik heb weer de tabel articles_items en deze bevat een FULLTEXT INDEX op het veld `tags`. Nu worden die tags altijd met kommas of spaties van elkaar gescheiden opgeslagen (maakt niks uit, toch?)<br />
<br />
Als ik bijv in het veld tags het volgende invul:<br />
<br />
<span style="font-style: italic;">bloed geur schaafwond</span><br />
<br />
en zoek op <span style="font-style: italic;">schaafwond</span> word er niks gevonden maar zoek ik op <span style="font-style: italic;">bloed</span> dan vind die het artikel wel...<br />
Zelfde geld exact voor bijv. het veld author_name die ook een FULLTEXT INDEX heeft, voorste letters/woord werk(t)(en) perfect maar laatste deel van de auteur naam zoeken ho maar.<br />
<br />
Even een concreet voorbeeld waar het probleem mee ontdekt is dat de auteur naam was <span style="font-style: italic;"> R van de Most</span> en als er dan op <span style="font-style: italic;">Most</span> word gezocht krijg ik 0 results op de volgende query:<br />
<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id` AS y_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_articles_categories` AS y_id_articles_categories,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_security_boxes` AS y_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`title` AS y_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`author_name` AS y_author_name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`publish_date` AS y_publish_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`tags` AS y_tags,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`readCount` AS y_readCount,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_articles_types` AS y_id_articles_types,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`active` AS y_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`declined` AS y_declined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`content` AS y_content,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`date_creation` AS y_date_creation,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`date_last_edit` AS y_date_last_edit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`id_security_boxes` AS a_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`id_users_accounts` AS a_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`id_security_groups` AS a_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`create` AS a_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`read` AS a_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`update` AS a_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`delete` AS a_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`admin` AS a_admin,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`id` AS z_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`id_security_boxes` AS z_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`id_security_control` AS z_id_security_control,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`username` AS z_username,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`password` AS z_password,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`email` AS z_email,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`activated` AS z_activated,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`deleted` AS z_deleted,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`signup_date` AS z_signup_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`last_active` AS z_last_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`last_location` AS z_last_location,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`id` AS d_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`id_security_boxes` AS d_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`title` AS d_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`article_class` AS d_article_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`form_class` AS d_form_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`name` AS b_name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`id` AS b_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`lft` AS b_lft,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`rgt` AS b_rgt,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`id_security_boxes` AS b_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`rgt` AS b_rgt,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`lft` AS b_lft,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`id` AS b_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`id_security_boxes` AS c_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`id_users_accounts` AS c_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`id_security_groups` AS c_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`create` AS c_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`read` AS c_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`update` AS c_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`delete` AS c_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`admin` AS c_admin<br />
FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_items y <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `a` <br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;users_accounts z<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;z.id = y.id_users_accounts <br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_types d<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;d.id = y.id_articles_types <br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_categories b<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;b.id = y.id_articles_categories <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `c`<br />
WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp; (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MATCH(y.author_name) AGAINST ('*most*' IN BOOLEAN MODE)<br />
AND<br />
y.active = 1<br />
AND<br />
y.declined = 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`a`.`id_security_boxes` = `y`.`id_security_boxes`<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`read` IN (20,30) <br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;z.deleted = 0<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;z.activated = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`c`.`id_security_boxes` = `b`.`id_security_boxes`<br />
LIMIT<br />
&nbsp;&nbsp;&nbsp;&nbsp;0,20</code></div></div>
<br />
Maar als ik bijv <span style="font-style: italic;">Piet Weerbericht</span> invul als auteur en dan Weerbericht zoek dan vind die het weer wel..<br />
<br />
Zouden die <span style="font-style: italic;"><span style="text-decoration: underline;">R van de</span> Most</span> stopwoorden zijn en dat die daarom niets vind of...?<br />
<br />
Voel me een beetje stom dat ik wel zulke queries kan schrijven maar dat ik de achterliggende werking van MySql niet eens ken, zou dit soort vragen die ik stel graag zelf willen beantwoorden maar kom er met google niet echt uit, heeft iemand van jullie nog artikelen die betrekking hebben op dit onderwerp?<br />
<br />
Dank alvast!]]></description>
			<content:encoded><![CDATA[Hoi,<br />
<br />
zoals sommigen van jullie al gelezen hadden in mijn vorige topic ben ik dus geen database expert en stuit nu op het volgende.<br />
<br />
Ik heb weer de tabel articles_items en deze bevat een FULLTEXT INDEX op het veld `tags`. Nu worden die tags altijd met kommas of spaties van elkaar gescheiden opgeslagen (maakt niks uit, toch?)<br />
<br />
Als ik bijv in het veld tags het volgende invul:<br />
<br />
<span style="font-style: italic;">bloed geur schaafwond</span><br />
<br />
en zoek op <span style="font-style: italic;">schaafwond</span> word er niks gevonden maar zoek ik op <span style="font-style: italic;">bloed</span> dan vind die het artikel wel...<br />
Zelfde geld exact voor bijv. het veld author_name die ook een FULLTEXT INDEX heeft, voorste letters/woord werk(t)(en) perfect maar laatste deel van de auteur naam zoeken ho maar.<br />
<br />
Even een concreet voorbeeld waar het probleem mee ontdekt is dat de auteur naam was <span style="font-style: italic;"> R van de Most</span> en als er dan op <span style="font-style: italic;">Most</span> word gezocht krijg ik 0 results op de volgende query:<br />
<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id` AS y_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_articles_categories` AS y_id_articles_categories,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_security_boxes` AS y_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`title` AS y_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`author_name` AS y_author_name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`publish_date` AS y_publish_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`tags` AS y_tags,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`readCount` AS y_readCount,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_articles_types` AS y_id_articles_types,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`active` AS y_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`declined` AS y_declined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`content` AS y_content,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`date_creation` AS y_date_creation,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`date_last_edit` AS y_date_last_edit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`id_security_boxes` AS a_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`id_users_accounts` AS a_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`id_security_groups` AS a_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`create` AS a_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`read` AS a_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`update` AS a_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`delete` AS a_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`admin` AS a_admin,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`id` AS z_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`id_security_boxes` AS z_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`id_security_control` AS z_id_security_control,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`username` AS z_username,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`password` AS z_password,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`email` AS z_email,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`activated` AS z_activated,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`deleted` AS z_deleted,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`signup_date` AS z_signup_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`last_active` AS z_last_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`z`.`last_location` AS z_last_location,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`id` AS d_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`id_security_boxes` AS d_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`title` AS d_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`article_class` AS d_article_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`d`.`form_class` AS d_form_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`name` AS b_name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`id` AS b_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`lft` AS b_lft,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`rgt` AS b_rgt,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`id_security_boxes` AS b_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`rgt` AS b_rgt,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`lft` AS b_lft,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`b`.`id` AS b_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`id_security_boxes` AS c_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`id_users_accounts` AS c_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`id_security_groups` AS c_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`create` AS c_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`read` AS c_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`update` AS c_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`delete` AS c_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`c`.`admin` AS c_admin<br />
FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_items y <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `a` <br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;users_accounts z<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;z.id = y.id_users_accounts <br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_types d<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;d.id = y.id_articles_types <br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_categories b<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;b.id = y.id_articles_categories <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `c`<br />
WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp; (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MATCH(y.author_name) AGAINST ('*most*' IN BOOLEAN MODE)<br />
AND<br />
y.active = 1<br />
AND<br />
y.declined = 0)<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`a`.`id_security_boxes` = `y`.`id_security_boxes`<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;`a`.`read` IN (20,30) <br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;z.deleted = 0<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;z.activated = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`c`.`id_security_boxes` = `b`.`id_security_boxes`<br />
LIMIT<br />
&nbsp;&nbsp;&nbsp;&nbsp;0,20</code></div></div>
<br />
Maar als ik bijv <span style="font-style: italic;">Piet Weerbericht</span> invul als auteur en dan Weerbericht zoek dan vind die het weer wel..<br />
<br />
Zouden die <span style="font-style: italic;"><span style="text-decoration: underline;">R van de</span> Most</span> stopwoorden zijn en dat die daarom niets vind of...?<br />
<br />
Voel me een beetje stom dat ik wel zulke queries kan schrijven maar dat ik de achterliggende werking van MySql niet eens ken, zou dit soort vragen die ik stel graag zelf willen beantwoorden maar kom er met google niet echt uit, heeft iemand van jullie nog artikelen die betrekking hebben op dit onderwerp?<br />
<br />
Dank alvast!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[PS3&#93;MAG]]></title>
			<link>http://ep2.nl/thread-7685.html</link>
			<pubDate>Wed, 25 Aug 2010 07:37:02 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7685.html</guid>
			<description><![CDATA[Zitten hier mensen op EP2 die MAG: Massive Action Game op de PS3 spelen?<br />
Wat vinden jullie van het spel en welk lvl zijn jullie?]]></description>
			<content:encoded><![CDATA[Zitten hier mensen op EP2 die MAG: Massive Action Game op de PS3 spelen?<br />
Wat vinden jullie van het spel en welk lvl zijn jullie?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Selecteren uit meerdere tabellen]]></title>
			<link>http://ep2.nl/thread-7683.html</link>
			<pubDate>Mon, 23 Aug 2010 19:13:23 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7683.html</guid>
			<description><![CDATA[Hallo iedereen,<br />
<br />
Op dit moment heb ik 2 tabellen. Zie hieronder:<br />
<br />
tijden<br />
id | starttijd | eindtijd<br />
<br />
reservaties<br />
id | tijd_id | datum<br />
<br />
Nu kan er bij reservaties een rij inzitten met bv. id 1, tijd_id 2 en datum 25-08-10.<br />
<br />
Ik zou graag hebben dat als iemand de tijden voor 20-08-10 ophaalt, dat de rij van tijden met id 2 dan niet zal worden opgehaald aangezien die tijd 'gereserveerd' is dan.<br />
<br />
Hopelijk kan iemand mij helpen hiermee? Alvast erg bedankt!]]></description>
			<content:encoded><![CDATA[Hallo iedereen,<br />
<br />
Op dit moment heb ik 2 tabellen. Zie hieronder:<br />
<br />
tijden<br />
id | starttijd | eindtijd<br />
<br />
reservaties<br />
id | tijd_id | datum<br />
<br />
Nu kan er bij reservaties een rij inzitten met bv. id 1, tijd_id 2 en datum 25-08-10.<br />
<br />
Ik zou graag hebben dat als iemand de tijden voor 20-08-10 ophaalt, dat de rij van tijden met id 2 dan niet zal worden opgehaald aangezien die tijd 'gereserveerd' is dan.<br />
<br />
Hopelijk kan iemand mij helpen hiermee? Alvast erg bedankt!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[mysql: sloom met ORDER BY]]></title>
			<link>http://ep2.nl/thread-7682.html</link>
			<pubDate>Mon, 23 Aug 2010 15:38:55 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7682.html</guid>
			<description><![CDATA[Hoi,<br />
<br />
ik heb een probleem wat ik niet kan oplossen ivm mysql.<br />
<br />
Onderstaande query krijg ik niet snel tenzij ik de ORDER BY op de publish_date weghaal.<br />
<br />
Query:<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id` AS s_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id_articles_categories` AS s_id_articles_categories,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id_security_boxes` AS s_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`title` AS s_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`author_name` AS s_author_name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`publish_date` AS s_publish_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`tags` AS s_tags,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`readCount` AS s_readCount,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id_articles_types` AS s_id_articles_types,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`active` AS s_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`declined` AS s_declined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`content` AS s_content,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`date_creation` AS s_date_creation,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`date_last_edit` AS s_date_last_edit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`id_security_boxes` AS u_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`id_users_accounts` AS u_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`id_security_groups` AS u_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`create` AS u_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`read` AS u_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`update` AS u_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`delete` AS u_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`admin` AS u_admin,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`id` AS t_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`id_security_boxes` AS t_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`id_security_control` AS t_id_security_control,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`username` AS t_username,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`password` AS t_password,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`email` AS t_email,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`activated` AS t_activated,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`deleted` AS t_deleted,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`signup_date` AS t_signup_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`last_active` AS t_last_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`last_location` AS t_last_location,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`id` AS x_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`id_security_boxes` AS x_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`title` AS x_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`article_class` AS x_article_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`form_class` AS x_form_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_security_boxes` AS y_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_users_accounts` AS y_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_security_groups` AS y_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`create` AS y_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`read` AS y_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`update` AS y_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`delete` AS y_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`admin` AS y_admin<br />
FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_items s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `u`<br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;users_accounts t<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.id = s.id_users_accounts<br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_types x<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;x.id = s.id_articles_types <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `y`<br />
WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.active = 1<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.declined = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`u`.`id_security_boxes` = `s`.`id_security_boxes`<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.deleted = 0<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.activated = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`y`.`id_security_boxes` = `x`.`id_security_boxes`<br />
ORDER BY<br />
&nbsp;&nbsp;s.publish_date DESC<br />
LIMIT<br />
&nbsp;&nbsp;&nbsp;&nbsp;0,10</code></div></div>
<br />
Nu doet de query er 1.8229 seconden over, als ik de order by weghaal doet hij er 0.0384 seconden over, behoorlijk verschil dacht ik zo, bijna 1.5 seconde...<br />
<br />
Als ik een EXPLAIN ervoor zet krijg ik het volgende resultaat. (Zie bijlage).<br />
<br />
Op een of andere manier gebruikt hij niet steeds een index wat je wel wil natuurlijk..<br />
Hieronder is de structuur van mijn tabellen te zien die gebruikt worden.<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>-- <br />
-- Tabel structuur voor tabel `articles_items`<br />
-- <br />
<br />
CREATE TABLE `articles_items` (<br />
&nbsp;&nbsp;`id` int(10) NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_comments_containers` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_security_boxes` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_articles_categories` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`title` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,<br />
&nbsp;&nbsp;`author_name` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,<br />
&nbsp;&nbsp;`publish_date` date NOT NULL default '0000-00-00',<br />
&nbsp;&nbsp;`date_creation` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`date_last_edit` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`id_users_accounts` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`tags` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,<br />
&nbsp;&nbsp;`readCount` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`active` tinyint(1) NOT NULL default '0',<br />
&nbsp;&nbsp;`declined` tinyint(1) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_articles_types` int(10) unsigned NOT NULL default '1',<br />
&nbsp;&nbsp;`content` text NOT NULL,<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`),<br />
&nbsp;&nbsp;KEY `security` (`id_security_boxes`),<br />
&nbsp;&nbsp;KEY `comments` (`id_comments_containers`),<br />
&nbsp;&nbsp;KEY `category` (`id_articles_categories`),<br />
&nbsp;&nbsp;KEY `article_type` (`id_articles_types`),<br />
&nbsp;&nbsp;KEY `active` (`active`),<br />
&nbsp;&nbsp;KEY `declined` (`declined`),<br />
&nbsp;&nbsp;KEY `sorting` (`publish_date`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=utf8 AUTO_INCREMENT=504 ;<br />
<br />
-- --------------------------------------------------------<br />
<br />
-- <br />
-- Tabel structuur voor tabel `articles_types`<br />
-- <br />
<br />
CREATE TABLE `articles_types` (<br />
&nbsp;&nbsp;`id` int(11) NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_security_boxes` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`title` varchar(45) NOT NULL default '',<br />
&nbsp;&nbsp;`article_class` varchar(255) NOT NULL default '',<br />
&nbsp;&nbsp;`form_class` varchar(255) NOT NULL default '',<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;<br />
<br />
-- --------------------------------------------------------<br />
<br />
-- <br />
-- Tabel structuur voor tabel `security_acl`<br />
-- <br />
<br />
CREATE TABLE `security_acl` (<br />
&nbsp;&nbsp;`id` int(10) unsigned NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_security_groups` int(10) unsigned default NULL,<br />
&nbsp;&nbsp;`id_users_accounts` int(10) unsigned default NULL,<br />
&nbsp;&nbsp;`id_security_boxes` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`create` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`read` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`update` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`delete` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`admin` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`),<br />
&nbsp;&nbsp;KEY `Groups` (`id_security_groups`),<br />
&nbsp;&nbsp;KEY `Accounts` (`id_users_accounts`),<br />
&nbsp;&nbsp;KEY `SecurityBoxes` (`id_security_boxes`),<br />
&nbsp;&nbsp;KEY `crud` (`read`,`delete`,`update`,`create`,`admin`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=latin1 AUTO_INCREMENT=12282 ;<br />
<br />
-- --------------------------------------------------------<br />
<br />
-- <br />
-- Tabel structuur voor tabel `users_accounts`<br />
-- <br />
<br />
CREATE TABLE `users_accounts` (<br />
&nbsp;&nbsp;`id` int(11) NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_security_boxes` int(11) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_security_control` int(11) NOT NULL default '0',<br />
&nbsp;&nbsp;`username` varchar(45) character set latin1 NOT NULL default '',<br />
&nbsp;&nbsp;`email` varchar(255) character set latin1 NOT NULL default '',<br />
&nbsp;&nbsp;`activated` tinyint(1) default '0',<br />
&nbsp;&nbsp;`deleted` tinyint(1) default '0',<br />
&nbsp;&nbsp;`creationCompleted` tinyint(1) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`password` blob NOT NULL,<br />
&nbsp;&nbsp;`signup_date` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`system_account` tinyint(1) NOT NULL default '0',<br />
&nbsp;&nbsp;`last_active` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`last_location` blob NOT NULL,<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`),<br />
&nbsp;&nbsp;KEY `Security` (`id_security_boxes`,`id_security_control`),<br />
&nbsp;&nbsp;KEY `activated_deleted` (`activated`,`deleted`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=77 ;</code></div></div>
<br />
Ben geen database expert, wil er graag over leren en heb ook de volgende artikels gelezen.<br />
<br />
<a href="http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html" target="_blank">http://dev.mysql.com/doc/refman/5.0/en/o...ation.html</a><br />
<a href="http://www.phphulp.nl/php/tutorial/overig/mysql-indexes/545/hoe-indexen-werken/1416/" target="_blank">http://www.phphulp.nl/php/tutorial/overi...rken/1416/</a><br />
<br />
Maar ben of iets over het hoofd gezien of ik heb het nog niet helemaal goed begrepen, wellicht iemand anders hier wel.<br />
<br />
Ben benieuwd wat de oplossing nou word..<br />
<br />
Alvast super bedankt!]]></description>
			<content:encoded><![CDATA[Hoi,<br />
<br />
ik heb een probleem wat ik niet kan oplossen ivm mysql.<br />
<br />
Onderstaande query krijg ik niet snel tenzij ik de ORDER BY op de publish_date weghaal.<br />
<br />
Query:<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id` AS s_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id_articles_categories` AS s_id_articles_categories,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id_security_boxes` AS s_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`title` AS s_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`author_name` AS s_author_name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`publish_date` AS s_publish_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`tags` AS s_tags,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`readCount` AS s_readCount,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`id_articles_types` AS s_id_articles_types,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`active` AS s_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`declined` AS s_declined,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`content` AS s_content,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`date_creation` AS s_date_creation,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`s`.`date_last_edit` AS s_date_last_edit,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`id_security_boxes` AS u_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`id_users_accounts` AS u_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`id_security_groups` AS u_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`create` AS u_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`read` AS u_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`update` AS u_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`delete` AS u_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`u`.`admin` AS u_admin,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`id` AS t_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`id_security_boxes` AS t_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`id_security_control` AS t_id_security_control,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`username` AS t_username,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`password` AS t_password,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`email` AS t_email,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`activated` AS t_activated,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`deleted` AS t_deleted,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`signup_date` AS t_signup_date,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`last_active` AS t_last_active,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`t`.`last_location` AS t_last_location,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`id` AS x_id,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`id_security_boxes` AS x_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`title` AS x_title,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`article_class` AS x_article_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`x`.`form_class` AS x_form_class,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_security_boxes` AS y_id_security_boxes,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_users_accounts` AS y_id_users_accounts,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`id_security_groups` AS y_id_security_groups,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`create` AS y_create,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`read` AS y_read,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`update` AS y_update,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`delete` AS y_delete,<br />
&nbsp;&nbsp;&nbsp;&nbsp;`y`.`admin` AS y_admin<br />
FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_items s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `u`<br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;users_accounts t<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.id = s.id_users_accounts<br />
INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;articles_types x<br />
ON<br />
&nbsp;&nbsp;&nbsp;&nbsp;x.id = s.id_articles_types <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INNER JOIN<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_boxes` AS `id_security_boxes`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` AS `id_users_accounts`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_security_groups` AS `id_security_groups`,<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`create`) AS `create`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`read`) AS `read`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`update`) AS `update`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`delete`) AS `delete`,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MAX(`acl`.`admin`) AS `admin`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`security_acl` AS `acl`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`acl`.`id_users_accounts` = 2 OR `acl`.`id_security_groups` IN (9,4,3,1)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP BY&nbsp;&nbsp;`acl`.`id_security_boxes`<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;) AS `y`<br />
WHERE<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.active = 1<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;s.declined = 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`u`.`id_security_boxes` = `s`.`id_security_boxes`<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.deleted = 0<br />
AND<br />
&nbsp;&nbsp;&nbsp;&nbsp;t.activated = 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;AND<br />
`y`.`id_security_boxes` = `x`.`id_security_boxes`<br />
ORDER BY<br />
&nbsp;&nbsp;s.publish_date DESC<br />
LIMIT<br />
&nbsp;&nbsp;&nbsp;&nbsp;0,10</code></div></div>
<br />
Nu doet de query er 1.8229 seconden over, als ik de order by weghaal doet hij er 0.0384 seconden over, behoorlijk verschil dacht ik zo, bijna 1.5 seconde...<br />
<br />
Als ik een EXPLAIN ervoor zet krijg ik het volgende resultaat. (Zie bijlage).<br />
<br />
Op een of andere manier gebruikt hij niet steeds een index wat je wel wil natuurlijk..<br />
Hieronder is de structuur van mijn tabellen te zien die gebruikt worden.<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>-- <br />
-- Tabel structuur voor tabel `articles_items`<br />
-- <br />
<br />
CREATE TABLE `articles_items` (<br />
&nbsp;&nbsp;`id` int(10) NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_comments_containers` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_security_boxes` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_articles_categories` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`title` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,<br />
&nbsp;&nbsp;`author_name` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,<br />
&nbsp;&nbsp;`publish_date` date NOT NULL default '0000-00-00',<br />
&nbsp;&nbsp;`date_creation` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`date_last_edit` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`id_users_accounts` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`tags` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,<br />
&nbsp;&nbsp;`readCount` int(10) NOT NULL default '0',<br />
&nbsp;&nbsp;`active` tinyint(1) NOT NULL default '0',<br />
&nbsp;&nbsp;`declined` tinyint(1) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_articles_types` int(10) unsigned NOT NULL default '1',<br />
&nbsp;&nbsp;`content` text NOT NULL,<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`),<br />
&nbsp;&nbsp;KEY `security` (`id_security_boxes`),<br />
&nbsp;&nbsp;KEY `comments` (`id_comments_containers`),<br />
&nbsp;&nbsp;KEY `category` (`id_articles_categories`),<br />
&nbsp;&nbsp;KEY `article_type` (`id_articles_types`),<br />
&nbsp;&nbsp;KEY `active` (`active`),<br />
&nbsp;&nbsp;KEY `declined` (`declined`),<br />
&nbsp;&nbsp;KEY `sorting` (`publish_date`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=utf8 AUTO_INCREMENT=504 ;<br />
<br />
-- --------------------------------------------------------<br />
<br />
-- <br />
-- Tabel structuur voor tabel `articles_types`<br />
-- <br />
<br />
CREATE TABLE `articles_types` (<br />
&nbsp;&nbsp;`id` int(11) NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_security_boxes` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`title` varchar(45) NOT NULL default '',<br />
&nbsp;&nbsp;`article_class` varchar(255) NOT NULL default '',<br />
&nbsp;&nbsp;`form_class` varchar(255) NOT NULL default '',<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;<br />
<br />
-- --------------------------------------------------------<br />
<br />
-- <br />
-- Tabel structuur voor tabel `security_acl`<br />
-- <br />
<br />
CREATE TABLE `security_acl` (<br />
&nbsp;&nbsp;`id` int(10) unsigned NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_security_groups` int(10) unsigned default NULL,<br />
&nbsp;&nbsp;`id_users_accounts` int(10) unsigned default NULL,<br />
&nbsp;&nbsp;`id_security_boxes` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`create` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`read` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`update` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`delete` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`admin` int(10) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`),<br />
&nbsp;&nbsp;KEY `Groups` (`id_security_groups`),<br />
&nbsp;&nbsp;KEY `Accounts` (`id_users_accounts`),<br />
&nbsp;&nbsp;KEY `SecurityBoxes` (`id_security_boxes`),<br />
&nbsp;&nbsp;KEY `crud` (`read`,`delete`,`update`,`create`,`admin`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=latin1 AUTO_INCREMENT=12282 ;<br />
<br />
-- --------------------------------------------------------<br />
<br />
-- <br />
-- Tabel structuur voor tabel `users_accounts`<br />
-- <br />
<br />
CREATE TABLE `users_accounts` (<br />
&nbsp;&nbsp;`id` int(11) NOT NULL auto_increment,<br />
&nbsp;&nbsp;`id_security_boxes` int(11) NOT NULL default '0',<br />
&nbsp;&nbsp;`id_security_control` int(11) NOT NULL default '0',<br />
&nbsp;&nbsp;`username` varchar(45) character set latin1 NOT NULL default '',<br />
&nbsp;&nbsp;`email` varchar(255) character set latin1 NOT NULL default '',<br />
&nbsp;&nbsp;`activated` tinyint(1) default '0',<br />
&nbsp;&nbsp;`deleted` tinyint(1) default '0',<br />
&nbsp;&nbsp;`creationCompleted` tinyint(1) unsigned NOT NULL default '0',<br />
&nbsp;&nbsp;`password` blob NOT NULL,<br />
&nbsp;&nbsp;`signup_date` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`system_account` tinyint(1) NOT NULL default '0',<br />
&nbsp;&nbsp;`last_active` datetime NOT NULL default '0000-00-00 00:00:00',<br />
&nbsp;&nbsp;`last_location` blob NOT NULL,<br />
&nbsp;&nbsp;PRIMARY KEY&nbsp;&nbsp;(`id`),<br />
&nbsp;&nbsp;KEY `Security` (`id_security_boxes`,`id_security_control`),<br />
&nbsp;&nbsp;KEY `activated_deleted` (`activated`,`deleted`)<br />
) ENGINE=MyISAM&nbsp;&nbsp;DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=77 ;</code></div></div>
<br />
Ben geen database expert, wil er graag over leren en heb ook de volgende artikels gelezen.<br />
<br />
<a href="http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html" target="_blank">http://dev.mysql.com/doc/refman/5.0/en/o...ation.html</a><br />
<a href="http://www.phphulp.nl/php/tutorial/overig/mysql-indexes/545/hoe-indexen-werken/1416/" target="_blank">http://www.phphulp.nl/php/tutorial/overi...rken/1416/</a><br />
<br />
Maar ben of iets over het hoofd gezien of ik heb het nog niet helemaal goed begrepen, wellicht iemand anders hier wel.<br />
<br />
Ben benieuwd wat de oplossing nou word..<br />
<br />
Alvast super bedankt!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Computer kapot]]></title>
			<link>http://ep2.nl/thread-7681.html</link>
			<pubDate>Mon, 23 Aug 2010 09:08:57 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7681.html</guid>
			<description><![CDATA[Hallo allemaal,<br />
<br />
Afgelopen zaterdag zetten ik mijn vaste pc aan en er gebeurde niets.<br />
Op het moederbord brande gewoon het standaard lampje.<br />
Na het indrukken van de powerknop ging het lampje onder de knop niet drukken.<br />
Vorige keer was dit probleem de videokaart. Deze heb ik eruit gehaald.<br />
Dit heeft niets geholpen.<br />
<br />
Iemand enige idee wat er aan de hand kan zijn?<br />
Mijn hardware kennis is de afgelopen jaren ontzettend achteruit gegaan.<br />
<br />
Ik zou verwachten dat het moederbord niet het probleem zal zijn aangezien het lampje nog brand (zegt natuurlijk ook niet veel).<br />
Geheugen verwacht ik ook niet. Als het geheugen kapot is moet die toch nog gewoon booten?<br />
Aan de harde schijf ligt het ook niet. Stroom heb ik hier afgehaald.<br />
<br />
Alvast bedankt voor de suggesties]]></description>
			<content:encoded><![CDATA[Hallo allemaal,<br />
<br />
Afgelopen zaterdag zetten ik mijn vaste pc aan en er gebeurde niets.<br />
Op het moederbord brande gewoon het standaard lampje.<br />
Na het indrukken van de powerknop ging het lampje onder de knop niet drukken.<br />
Vorige keer was dit probleem de videokaart. Deze heb ik eruit gehaald.<br />
Dit heeft niets geholpen.<br />
<br />
Iemand enige idee wat er aan de hand kan zijn?<br />
Mijn hardware kennis is de afgelopen jaren ontzettend achteruit gegaan.<br />
<br />
Ik zou verwachten dat het moederbord niet het probleem zal zijn aangezien het lampje nog brand (zegt natuurlijk ook niet veel).<br />
Geheugen verwacht ik ook niet. Als het geheugen kapot is moet die toch nog gewoon booten?<br />
Aan de harde schijf ligt het ook niet. Stroom heb ik hier afgehaald.<br />
<br />
Alvast bedankt voor de suggesties]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Micro payment]]></title>
			<link>http://ep2.nl/thread-7680.html</link>
			<pubDate>Sun, 22 Aug 2010 18:37:17 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7680.html</guid>
			<description><![CDATA[Hallo,<br />
<br />
Ik weet niet of dit de juiste plaats is om deze vraag te stellen, dus bijvoorbaat sorry als het niet zo is.<br />
<br />
Ben een idee aan het uitwerken waarin mensen op mijn website punten kunnen verdienen door bepaalde acties uit te voeren. Ze kunnen meer punten verdienen door te bellen/sms-en naar een bepaald nummer. Uiteindelijk kunnen ze korting, voucher, cadeau-bon of iets dergelijks krijgen van mij.<br />
<br />
Mijn vraag is:<br />
Ik heb net zitten zoeken naar micro-payment websites, maar ik word er niet wijzer van. Bij het ene land hanteren ze 2.00 euro per sms en bij de andere hanteren ze 1.50 euro per sms. Dat vind ik dus oneerlijk tegenover mijn bezoekers, want ze krijgen uiteindelijk hetzelfde aantal punten.<br />
<br />
Is er iemand die ooit met micro-payments heeft gewerkt? Of iemand die me naar een goede provider kan wijzen? Waar moet ik op letten? En moet ik van tevoren al een KVK nummer hebben of gelden er hier andere regels voor?<br />
<br />
Bijvoorbaat dank. <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" />]]></description>
			<content:encoded><![CDATA[Hallo,<br />
<br />
Ik weet niet of dit de juiste plaats is om deze vraag te stellen, dus bijvoorbaat sorry als het niet zo is.<br />
<br />
Ben een idee aan het uitwerken waarin mensen op mijn website punten kunnen verdienen door bepaalde acties uit te voeren. Ze kunnen meer punten verdienen door te bellen/sms-en naar een bepaald nummer. Uiteindelijk kunnen ze korting, voucher, cadeau-bon of iets dergelijks krijgen van mij.<br />
<br />
Mijn vraag is:<br />
Ik heb net zitten zoeken naar micro-payment websites, maar ik word er niet wijzer van. Bij het ene land hanteren ze 2.00 euro per sms en bij de andere hanteren ze 1.50 euro per sms. Dat vind ik dus oneerlijk tegenover mijn bezoekers, want ze krijgen uiteindelijk hetzelfde aantal punten.<br />
<br />
Is er iemand die ooit met micro-payments heeft gewerkt? Of iemand die me naar een goede provider kan wijzen? Waar moet ik op letten? En moet ik van tevoren al een KVK nummer hebben of gelden er hier andere regels voor?<br />
<br />
Bijvoorbaat dank. <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Verwijderen dubbele sound device]]></title>
			<link>http://ep2.nl/thread-7679.html</link>
			<pubDate>Sat, 21 Aug 2010 15:34:39 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7679.html</guid>
			<description><![CDATA[Hoi,<br />
<br />
Ik heb problemen met mijn sound device, de oplossing zou zijn om 1 van de 2 de verwijderen. (uitschakelen van 1 van de 2 helpt niet). Echter heb ik geen flauw idee hoe.<br />
<br />
Als ik naar mijn hardware ga kan ik maar 1 device vinden en als in via mn configuratie scherm -&gt; geluid staat kan ik er geen verwijderen. Als ik de details bekijk van het Stuurprogramma wordt er verwezen naar de dezelfde besturingsfiles<br />
<br />
Details sound device1:<br />
<blockquote><cite>Citaat:</cite>Description: Speakers (High Definition Audio Device)<br />
Default Sound Playback: Yes<br />
Default Voice Playback: Yes<br />
Hardware ID: HDAUDIO\FUNC_01&amp;VEN_10EC&amp;DEV_0662&amp;SUBSYS_10438290&amp;REV_1001<br />
Manufacturer ID: 1<br />
Product ID: 65535<br />
Type: WDM<br />
Driver Name: HdAudio.sys<br />
Driver Version: 6.01.7100.0000 (English)<br />
Driver Attributes: Final Retail<br />
WHQL Logo'd: Yes<br />
Date and Size: 4/22/2009 04:50:11, 304128 bytes<br />
Other Files:<br />
Driver Provider: Microsoft<br />
HW Accel Level: Basic<br />
Cap Flags: 0xF1F<br />
Min/Max Sample Rate: 100, 200000<br />
Static/Strm HW Mix Bufs: 1, 0<br />
Static/Strm HW 3D Bufs: 0, 0<br />
HW Memory: 0<br />
Voice Management: No<br />
EAX&#153; 2.0 Listen/Src: No, No<br />
I3DL2&#153; Listen/Src: No, No<br />
Sensaura&#153; ZoomFX&#153;: No</blockquote>
<br />
Details sound device 2<br />
<blockquote><cite>Citaat:</cite>Description: Digital Audio (S/PDIF) (High Definition Audio Device)<br />
Default Sound Playback: No<br />
Default Voice Playback: No<br />
Hardware ID: HDAUDIO\FUNC_01&amp;VEN_10EC&amp;DEV_0662&amp;SUBSYS_10438290&amp;REV_1001<br />
Manufacturer ID: 1<br />
Product ID: 65535<br />
Type: WDM<br />
Driver Name: HdAudio.sys<br />
Driver Version: 6.01.7100.0000 (English)<br />
Driver Attributes: Final Retail<br />
WHQL Logo'd: Yes<br />
Date and Size: 4/22/2009 04:50:11, 304128 bytes<br />
Other Files:<br />
Driver Provider: Microsoft<br />
HW Accel Level: Basic<br />
Cap Flags: 0xF1F<br />
Min/Max Sample Rate: 100, 200000<br />
Static/Strm HW Mix Bufs: 1, 0<br />
Static/Strm HW 3D Bufs: 0, 0<br />
HW Memory: 0<br />
Voice Management: No<br />
EAX&#153; 2.0 Listen/Src: No, No<br />
I3DL2&#153; Listen/Src: No, No<br />
Sensaura&#153; ZoomFX&#153;: No</blockquote>
<br />
Als iemand suggesties heeft om de S/PDIF varaint te verwijderen......<br />
<br />
<br />
mvg Reijnemans]]></description>
			<content:encoded><![CDATA[Hoi,<br />
<br />
Ik heb problemen met mijn sound device, de oplossing zou zijn om 1 van de 2 de verwijderen. (uitschakelen van 1 van de 2 helpt niet). Echter heb ik geen flauw idee hoe.<br />
<br />
Als ik naar mijn hardware ga kan ik maar 1 device vinden en als in via mn configuratie scherm -&gt; geluid staat kan ik er geen verwijderen. Als ik de details bekijk van het Stuurprogramma wordt er verwezen naar de dezelfde besturingsfiles<br />
<br />
Details sound device1:<br />
<blockquote><cite>Citaat:</cite>Description: Speakers (High Definition Audio Device)<br />
Default Sound Playback: Yes<br />
Default Voice Playback: Yes<br />
Hardware ID: HDAUDIO\FUNC_01&amp;VEN_10EC&amp;DEV_0662&amp;SUBSYS_10438290&amp;REV_1001<br />
Manufacturer ID: 1<br />
Product ID: 65535<br />
Type: WDM<br />
Driver Name: HdAudio.sys<br />
Driver Version: 6.01.7100.0000 (English)<br />
Driver Attributes: Final Retail<br />
WHQL Logo'd: Yes<br />
Date and Size: 4/22/2009 04:50:11, 304128 bytes<br />
Other Files:<br />
Driver Provider: Microsoft<br />
HW Accel Level: Basic<br />
Cap Flags: 0xF1F<br />
Min/Max Sample Rate: 100, 200000<br />
Static/Strm HW Mix Bufs: 1, 0<br />
Static/Strm HW 3D Bufs: 0, 0<br />
HW Memory: 0<br />
Voice Management: No<br />
EAX&#153; 2.0 Listen/Src: No, No<br />
I3DL2&#153; Listen/Src: No, No<br />
Sensaura&#153; ZoomFX&#153;: No</blockquote>
<br />
Details sound device 2<br />
<blockquote><cite>Citaat:</cite>Description: Digital Audio (S/PDIF) (High Definition Audio Device)<br />
Default Sound Playback: No<br />
Default Voice Playback: No<br />
Hardware ID: HDAUDIO\FUNC_01&amp;VEN_10EC&amp;DEV_0662&amp;SUBSYS_10438290&amp;REV_1001<br />
Manufacturer ID: 1<br />
Product ID: 65535<br />
Type: WDM<br />
Driver Name: HdAudio.sys<br />
Driver Version: 6.01.7100.0000 (English)<br />
Driver Attributes: Final Retail<br />
WHQL Logo'd: Yes<br />
Date and Size: 4/22/2009 04:50:11, 304128 bytes<br />
Other Files:<br />
Driver Provider: Microsoft<br />
HW Accel Level: Basic<br />
Cap Flags: 0xF1F<br />
Min/Max Sample Rate: 100, 200000<br />
Static/Strm HW Mix Bufs: 1, 0<br />
Static/Strm HW 3D Bufs: 0, 0<br />
HW Memory: 0<br />
Voice Management: No<br />
EAX&#153; 2.0 Listen/Src: No, No<br />
I3DL2&#153; Listen/Src: No, No<br />
Sensaura&#153; ZoomFX&#153;: No</blockquote>
<br />
Als iemand suggesties heeft om de S/PDIF varaint te verwijderen......<br />
<br />
<br />
mvg Reijnemans]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[OOP Components structuur maken]]></title>
			<link>http://ep2.nl/thread-7678.html</link>
			<pubDate>Wed, 18 Aug 2010 12:45:10 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7678.html</guid>
			<description><![CDATA[Hoi,<br />
<br />
het is een tijdje geleden dat ik actief was hier maar ik wil graag weer eens een beetje kennis delen.<br />
Na deze tutorial zul je een goed inzicht hebben hoe je een stevig template systeem van componenten in elkaar kan zetten.<br />
<br />
Index:<br />
<ul>
<li>Intro</li>
<li>Mappen structuur</li>
<li>Constants</li>
<li>Interfaces defineren</li>
<li>Autoloader</li>
<li>Template class</li>
<li>Component class</li>
<li>Data class voor news</li>
<li>News component schrijven</li>
<li>Template invullen</li>
<li>Testen!</li>
<li>Eind</li>
<li>Extra<br />
</li></ul>
<br />
<span style="font-weight: bold;">Intro</span><br />
<br />
Eindelijk, nu word het leuk.<br />
Wat ik jullie ga leren heb ik ook weer geleerd van iemand anders en heb me eigen creativiteit er daarna op losgelaten en nu wil ik dit graag delen.<br />
De bedoeling is dat alles OOP word, nu zul je denken, ja php, oop? Klopt, php ondersteund inderdaad veel minder dan bijv. C# dat doet qua OOP maar we gaan het toch doen.<br />
Als je bekent bent met Flex dan is de term Component niet heel erg nieuw meer voor je maar hoe passen we dit dan toe in php?<br />
Voordat we daar aankomen moeten we een kleine basis hebben en dat is de Template class.<br />
Deze class die zal templates kunnen inladen en variablen kunnen toekennen en naar de output buffer kunnen schrijven.<br />
De output buffer is eigenlijk een duur woord voor alles wat naar de bezoeker ze browser word gestuurd.<br />
<br />
Mijn voorbeeld zal ervoor zorgen dat je een News component gaat hebben, daarna kan je er zelf op los gaan en uitbreiden en je eigen componenten gaan bouwen.<br />
<br />
Het is wel belangrijk om de denkwijze te hebben:<br />
<br />
Een component is een visueel object. Deze heeft geen logica maar alleen weergave logica. Hij kan bijv. bepalen of een link voor bewerken getoond word of niet maar hij zal nooit een database query bevatten.<br />
Daarvoor hebben we namelijk een data object daarom zal ik nu alvast verklappen dat we een class maken: NewsItem (data) en een class NewsMessage (component)<br />
Hoe dit dan in zijn werk gaat zal je verderop zien.<br />
De reden dat ik dit zo doe is omdat je dan een NewsItem object (puur data) ook aan andere visuele objecten (components) kan geven, zo hou je alle lagen (data -&gt; component -&gt; template) netjes gescheiden<br />
<br />
Nog 1 ding om te weten, alle benamingen zullen in het engels zijn, uitleg en commentaar in het nederlands.<br />
Commentaar in het nederlands omdat ik dit op een NL community post uiteraard :-)<br />
<br />
Toch nog 1 laatste ding, eigenlijk zal deze in dezelfde stijl gaan als me vorige tutorial (Ajax auto completer in JavaScript forum: <a href="http://ep2.nl/thread-2600.html" target="_blank">http://ep2.nl/thread-2600.html</a> )<br />
Ik post soms lappen code en geef hele beknopte uitleg maar dat is omdat er heel erg veel commentaar in de code zelf staat.<br />
Mocht er iets toch niet helemaal duidelijk zijn dan kan dat uiteraard nog uitgelegd worden.<br />
<span style="font-weight: bold;">Mappen structuur</span><br />
<br />
Het lijkt me handig om mappen structuur alvast klaar te hebben en dan gaan we straks iedere map stukje bij beetje invullen en zo word de puzzel compleet.<br />
Ik zal ook een aantal mappen defineren die we niet gebruiken maar dit is ter voorbeeld hoe het eruit zou kunnen zien als je vanuit dit ontwerp verder zou willen ontwikkelen.<br />
Deze markeer ik met een asterik (*).<br />
<ul>
<li>classes<br />
<ul>
<li>AutoLoader.php</li>
<li>Component.php</li>
<li>Template.php<br />
	</li></ul></li>
<li>components<br />
<ul>
<li>PlainText.php<br />
	</li></ul></li>
<li>interfaces<br />
<ul>
<li>IComponent</li>
<li>IPersistent</li>
<li>ISingleton</li>
<li>ITemplate</li>
<li>IEventDispatcher *<br />
	</li></ul></li>
<li>modules<br />
<ul>
<li>forms * (OOP forms komen nog in een ander hoofdstuk, hoor het graag als jullie willen dat ik dit ook schrijf :-))<br />
	<ul>
<li>classes<br />
			[list&#93;</li>
<li>Form.php</li>
<li>FormElement.php<br />
			</li></ul></li>
<li>components<br />
		<ul>
<li>InputBox.php</li>
<li>Label.php<br />
			</li></ul></li>
<li>interfaces<br />
		<ul>
<li>IFormElement.php<br />
			</li></ul>
		</li></ul></li>
<li>news<br />
	<ul>
<li>classes<br />
		<ul>
<li>NewsItem.php<br />
			</li></ul></li>
<li>components<br />
		<ul>
<li>NewsMessage.php<br />
			</li></ul></li>
<li>forms<br />
		<ul>
<li>NewsCategoryForm.php<br />
			</li></ul>
		</li></ul></li>
<li>themes<br />
<ul>
<li>default<br />
	<ul>
<li>news</li>
<li>show.phtml<br />
		</li></ul>
	</li></ul></li>
<li>index.php<br />
</li></ul>
<br />
Nu dit is aangemaakt kunnen we verder.<br />
Vul in alle bestanden nog maar even niets in, gewoon leeg bestand aanmaken, vullen we later in.<br />
<br />
<span style="font-weight: bold;">Constants</span><br />
<br />
Voordat we beginnen moet je wel beseffen dat dit systeem heel goed toepasbaar is in een groot systeem.<br />
Nu heb ik niet genoeg inkt om dat systeem te gaan omschrijven dus bepaalde systeem variablen die je uit een class als SystemEnvironments of iets dergelijks haalt doen we nu even simpelweg in constants defineren.<br />
<br />
De index.php is 0,0 OOP omdat het puur is om te testen, je kan zelf later invullen hoe je alles gaat toepassen namelijk.<br />
<br />
<span style="font-style: italic;">index.php:</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">'THEME'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'default'</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;mogelijkheden:&nbsp;default&nbsp;|&nbsp;christmas<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'THEMES_FOLDER'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'/themes'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'ROOT_PATH'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'C:/xampp/htdocs/tutorials/components'</span><span style="color: #007700">);&nbsp;<br /></span></code></div></div></div>
<br />
De constants beschreven:<br />
<br />
- THEME<br />
	<span style="font-style: italic;">De systeemnaam van het thema, deze representeerd in ons geval ook meteen de folder naam waar de templates staan.</span><br />
- THEMES_FOLDER<br />
	<span style="font-style: italic;">Dit is waar alle themas gedefineerd staan</span><br />
- ROOT_PATH<br />
	<span style="font-style: italic;">Dit is het basis pad naar onze map met bestanden, deze word gebruikt bij het includen van files (Autoloader + Template classen)</span><br />
	 <br />
Straks word index.php nog verder ingevuld.<br />
<br />
<span style="font-weight: bold;">Interfaces defineren</span><br />
<br />
Interfaces zijn een van de krachtigste objecten in php vind ik zelf persoonlijk.<br />
<br />
Voor de mensen die het princiepe van interfaces al wel begrijpen kunnen onderstaand blok skippen, de rest die het nog niet begrijpt gewoon lekker blijven lezen.<br />
<br />
<blockquote><cite>Citaat:</cite>Een interface is eigenlijk de manier waarop iets bestuurd kan worden.<br />
Neem bijv. een tv afstandsbediening, iedereen weet dat elke afstandsbedieding altijd de volgende knoppen heeft:<br />
<br />
- Aan<br />
- Uit<br />
- Volume harder<br />
- Volume zachter<br />
- Programma verder<br />
- Programma terug<br />
<br />
Alsof je nou een sony of een samsung afstandsbedieing hebt, ze hebben allemaal dezelfde <span style="font-weight: bold;">functionaliteit</span> maar hoe de sony afstandsbediening het volume signaal verstuurd naar de televisie kan compleet anders dan dat de samsung afstandsbediening dit doet.<br />
<br />
Klein voorbeeldje in code:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IRemoteControl<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOff</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;en&nbsp;de&nbsp;rest&nbsp;van&nbsp;de&nbsp;functies&nbsp;nog:&nbsp;increaseVolume()&nbsp;decreaseVolume()&nbsp;etc&nbsp;etc<br /></span><span style="color: #007700">}<br /><br />class&nbsp;</span><span style="color: #0000BB">SonyRemote<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IRemoteControl&nbsp;</span><span style="color: #FF8000">//&nbsp;hiermee&nbsp;vertel&nbsp;ik&nbsp;dat&nbsp;ik&nbsp;alle&nbsp;functionaliteit&nbsp;heb&nbsp;van&nbsp;een&nbsp;IRemoteControl<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;nu&nbsp;ik&nbsp;mij&nbsp;voordoe&nbsp;als&nbsp;een&nbsp;remote&nbsp;control&nbsp;moet&nbsp;ik&nbsp;ook&nbsp;die&nbsp;functionaliteit&nbsp;bieden&nbsp;dus&nbsp;ben&nbsp;ik&nbsp;verplicht&nbsp;om&nbsp;de&nbsp;publieke&nbsp;methodes&nbsp;van&nbsp;de&nbsp;interface&nbsp;te&nbsp;implementeren:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;iets&nbsp;om&nbsp;tv&nbsp;aan&nbsp;te&nbsp;zetten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOff</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;iets&nbsp;om&nbsp;tv&nbsp;uit&nbsp;te&nbsp;zetten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />}<br /><br />class&nbsp;</span><span style="color: #0000BB">SamsungRemote<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IRemoteControll<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;hier&nbsp;kan&nbsp;ik&nbsp;iets&nbsp;doen&nbsp;hoe&nbsp;ik&nbsp;mijn&nbsp;samsung&nbsp;tv&nbsp;aan&nbsp;zet<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOff</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;en&nbsp;hier&nbsp;iets&nbsp;om&nbsp;die&nbsp;tv&nbsp;weer&nbsp;uit&nbsp;te&nbsp;zetten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />}<br /><br /></span><span style="color: #FF8000">//&nbsp;Denk&nbsp;bijv&nbsp;aan&nbsp;de&nbsp;Sims&nbsp;hoe&nbsp;zoiets&nbsp;gebouwd&nbsp;zou&nbsp;kunnen&nbsp;zijn&nbsp;(net&nbsp;uit&nbsp;me&nbsp;duim&nbsp;gezogen&nbsp;hoor)<br />//&nbsp;Het&nbsp;gaat&nbsp;er&nbsp;hier&nbsp;om&nbsp;dat&nbsp;er&nbsp;bij&nbsp;de&nbsp;method&nbsp;giveRemoteControll()&nbsp;geen&nbsp;class&nbsp;SamsungRemote&nbsp;of&nbsp;SonyRemote&nbsp;word&nbsp;gevraagd&nbsp;maar&nbsp;gewoon&nbsp;<br />//&nbsp;"een&nbsp;(lees&nbsp;als&nbsp;'UN')"&nbsp;controller&nbsp;die&nbsp;de&nbsp;functionaliteit&nbsp;van&nbsp;'UN'&nbsp;afstandsbedieing&nbsp;ondersteund.&nbsp;(IRemoteControll)<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">TurnTelevisionOnAction<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IPersonAction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;heeft&nbsp;method:&nbsp;execute()<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;controller</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">giveRemoteControll</span><span style="color: #007700">(</span><span style="color: #0000BB">IRemoteControll&nbsp;&#36;controll</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">controller&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;controll</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">execute</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">controller</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />class&nbsp;</span><span style="color: #0000BB">Person<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">addActionToQueue</span><span style="color: #007700">(</span><span style="color: #0000BB">IPersonAction&nbsp;&#36;action</span><span style="color: #007700">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;dit&nbsp;kan&nbsp;IEDERE&nbsp;actie&nbsp;zijn,&nbsp;in&nbsp;ons&nbsp;geval&nbsp;hebben&nbsp;we&nbsp;nog&nbsp;maar&nbsp;1&nbsp;actie:&nbsp;TurnTelevisionOnAction<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">actionQueue</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;action</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Zo, dit kan maar zo een tutorial apart zijn volgens mij.<br />
Anyway, dit zijn dus interfaces. Vragen zijn welkom hoor.</blockquote>
<br />
<br />
<span style="font-weight: bold;">interfaces/IComponent.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Interface&nbsp;voor&nbsp;alle&nbsp;componenten,&nbsp;ieder&nbsp;component&nbsp;ondersteunt&nbsp;minimaal&nbsp;deze&nbsp;functionaliteiten&nbsp;zoals&nbsp;hieronder&nbsp;beschreven:<br />&nbsp;*<br />&nbsp;*&nbsp;-&nbsp;render<br />&nbsp;*&nbsp;-&nbsp;styleName<br />&nbsp;*&nbsp;-&nbsp;fullStylename&nbsp;(inheritence&nbsp;meegenomen)<br />&nbsp;*/<br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IComponent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;om&nbsp;component&nbsp;om&nbsp;te&nbsp;zetten&nbsp;naar&nbsp;html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Identity&nbsp;of&nbsp;the&nbsp;component<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">identity</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;de&nbsp;stylename&nbsp;terug&nbsp;van&nbsp;deze&nbsp;component,&nbsp;deze&nbsp;kan&nbsp;ook&nbsp;gezet&nbsp;worden&nbsp;door&nbsp;deze&nbsp;method.&nbsp;De&nbsp;stylename&nbsp;bepaalt&nbsp;uiteindelijk&nbsp;welke&nbsp;template&nbsp;ingeladen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Alleen&nbsp;een&nbsp;getter&nbsp;van&nbsp;de&nbsp;volledige&nbsp;stylename,&nbsp;hier&nbsp;worden&nbsp;ook&nbsp;alle&nbsp;classen&nbsp;meegenomen&nbsp;die&nbsp;parents&nbsp;zijn&nbsp;van&nbsp;deze&nbsp;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">fullStylename</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">interfaces/IPersistent.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Interface&nbsp;voor&nbsp;classen&nbsp;die&nbsp;persistent&nbsp;moeten&nbsp;zijn,&nbsp;persistent&nbsp;wil&nbsp;zeggen&nbsp;dat&nbsp;ze&nbsp;opgeslagen&nbsp;kunnen&nbsp;worden&nbsp;en&nbsp;verwijderd<br />&nbsp;*&nbsp;Deze&nbsp;interface&nbsp;word&nbsp;dus&nbsp;door&nbsp;zeer&nbsp;veel&nbsp;classen&nbsp;geimplementeerd&nbsp;:-)<br />&nbsp;*<br />&nbsp;*/<br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IPersistent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">save</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">delete</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">interfaces/ISingleton.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">ISingleton<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;instance&nbsp;van&nbsp;het&nbsp;corresponderende&nbsp;object&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;ISingleton<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">static&nbsp;function&nbsp;</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">interfaces/ITemplate.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Interface&nbsp;voor&nbsp;templates.<br />&nbsp;*&nbsp;Templates&nbsp;princiepe:&nbsp;word&nbsp;vanuit&nbsp;gegaan&nbsp;van&nbsp;bestanden&nbsp;die&nbsp;ingeladen&nbsp;worden,&nbsp;<br />gebufferd&nbsp;worden&nbsp;en&nbsp;hun&nbsp;inhoud&nbsp;word&nbsp;in&nbsp;render()&nbsp;teruggegeven,&nbsp;deze&nbsp;inhoud&nbsp;is&nbsp;<br />dan&nbsp;geparsed&nbsp;(de&nbsp;parser&nbsp;is&nbsp;geen&nbsp;smarty&nbsp;of&nbsp;iets&nbsp;dergelijks&nbsp;maar&nbsp;in&nbsp;dit&nbsp;geval&nbsp;gewoon&nbsp;php&nbsp;zelf).<br />&nbsp;*/<br />//&nbsp;@todo:&nbsp;method&nbsp;toevoegen&nbsp;voor&nbsp;het&nbsp;verwijderen&nbsp;van&nbsp;een&nbsp;variable<br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">ITemplate<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;word&nbsp;gebruikt&nbsp;om&nbsp;de&nbsp;template&nbsp;naam&nbsp;op&nbsp;te&nbsp;geven&nbsp;en&nbsp;opgehaald&nbsp;te&nbsp;worden&nbsp;indien&nbsp;ingestelt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;word&nbsp;gebruikt&nbsp;om&nbsp;de&nbsp;template&nbsp;te&nbsp;renderen,&nbsp;deze&nbsp;geeft&nbsp;een&nbsp;string&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;true&nbsp;terug&nbsp;in&nbsp;het&nbsp;geval&nbsp;dat&nbsp;de&nbsp;template&nbsp;bestaat&nbsp;of&nbsp;niet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">exists</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;path&nbsp;terug&nbsp;of&nbsp;NULL&nbsp;indien&nbsp;niet&nbsp;bestaat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">path</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voor&nbsp;het&nbsp;toekennen&nbsp;van&nbsp;variablen&nbsp;aan&nbsp;de&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;object&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voor&nbsp;het&nbsp;controleren&nbsp;of&nbsp;een&nbsp;variable&nbsp;bestaat&nbsp;of&nbsp;niet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">contains</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">);<br />}&nbsp;<br /></span></code></div></div></div>
 <br />
Dit zijn alle interfaces die we tot nu toe nodig zullen hebben.<br />
Als de EventDispatcher gemaakt word zal hier hoogstwaarschijnlijk de IEventDispatcher.php bijkomen.<br />
Bedenk wel even dat alle interfaces nu bij elkaar staan.<br />
Een interface die component/template gericht is hoort natuurlijk niet in dezelfde map te staan als een interface zoals IPersistent<br />
Dit is nu wel even zo gedaan om het simpel te houden.<br />
<br />
<span style="font-weight: bold;">AutoLoader</span><br />
<br />
Het is erg handig om een autoloader te hebben, dit scheelt je een heleboel werk + je kan alles makkelijk her-indelen ALS je het goed aanpakt.<br />
Naar mijn idee is de aanpak die ik nu laat zien erg handig + performance erg goed.<br />
Even voor alle duidelijkheid een autoloader is een method in een class of een functie die include() aanroept wanneer een class of interface niet gevonden is.<br />
Je kunt met spl_autoload_register() defineren welke functie dit voor je moet oplossen. Dit mogen ook meerdere functies zijn.<br />
<br />
Flow voorbeeld:<br />
<br />
<span style="font-weight: bold;">foo.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">Foo<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IFoo<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">IFoo.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IFoo<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">index.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br />&#36;foo&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></code></div></div></div>
<br />
De flow:<br />
<br />
1. class Foo word aangemaakt<br />
2. PHP: hee, deze class kan ik niet vinden, is er een autoloader?<br />
3. Ja er is een autoloader, deze word aangeroepen en geeft als argument de class naam mee (in dit geval Foo, dit is een string)<br />
4. De autoloader include het juiste bestand indien er een bestand is voor die class, de class bestaat<br />
5. PHP: hmm, autoloader aangeroepen, bestaat de class nu wel in het geheugen?<br />
6. Zoja: hee, we hebben een interface IFoo, ken ik deze?<br />
7. Zoniet: autoloader nog een keer aanroepen maar nu met IFoo als classname<br />
8. Autoloader: include('IFoo.php'); <br />
9. PHP: hmm, autoloader aangeroepen, bestaat de interface nu wel in het geheugen?<br />
10. Ja, alles bestaat, Foo::__construct() word aangeroepen.<br />
<br />
Het idee is dat je een array met class namen hebt en daaraan is een pad gekoppeld gerekend vanaf de const ROOT_PATH.<br />
Nu word er expres geen file_exists() uitgevoerd in de autoloader ivm performance, je array met class paden MOET dus kloppen en anders triggered php een error.<br />
Nu is het een array die hard gedefineerd word in de code, het zou heel gebruikelijk zijn dat dit soort informatie uit een cache bestand komt.<br />
<br />
<span style="font-weight: bold;">De autoloader class:</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">AutoLoader<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">ISingleton<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;De&nbsp;array&nbsp;met&nbsp;alle&nbsp;class&nbsp;paden&nbsp;erin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;classPaths</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Instantie&nbsp;van&nbsp;dit&nbsp;object<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;AutoLoader<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;static&nbsp;</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;instantie&nbsp;van&nbsp;de&nbsp;AutoLoader&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;zorgt&nbsp;ervoor&nbsp;dat&nbsp;er&nbsp;altijd&nbsp;maar&nbsp;1&nbsp;instantie&nbsp;aanwezig&nbsp;is&nbsp;van&nbsp;dit&nbsp;object&nbsp;in&nbsp;het&nbsp;geheugen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voor&nbsp;meer&nbsp;uitleg&nbsp;zie:&nbsp;http://en.wikipedia.org/wiki/Singleton_pattern<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;AutoLoader<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;static&nbsp;function&nbsp;</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;instance&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;instance&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">AutoLoader</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;van&nbsp;AutoLoader,&nbsp;standaard&nbsp;waarden&nbsp;instellen&nbsp;van&nbsp;de&nbsp;class.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths&nbsp;</span><span style="color: #007700">=&nbsp;array();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Autoloader&nbsp;class.&nbsp;Deze&nbsp;checked&nbsp;of&nbsp;de&nbsp;class&nbsp;beschreven&nbsp;is&nbsp;in&nbsp;de&nbsp;"cache",&nbsp;zoniet,&nbsp;dan&nbsp;doet&nbsp;die&nbsp;niks&nbsp;en&nbsp;zal&nbsp;php&nbsp;een&nbsp;error&nbsp;gooien&nbsp;dat&nbsp;de&nbsp;class&nbsp;niet&nbsp;gevonden&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Ik&nbsp;gebruik&nbsp;expres&nbsp;geen&nbsp;check&nbsp;met&nbsp;file_exists()&nbsp;omdat&nbsp;dat&nbsp;ten&nbsp;koste&nbsp;gaat&nbsp;van&nbsp;je&nbsp;performance.&nbsp;Kortom,&nbsp;je&nbsp;cache&nbsp;bestand&nbsp;moet&nbsp;kloppen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;static&nbsp;function&nbsp;</span><span style="color: #0000BB">load</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;objectName</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;De&nbsp;reden&nbsp;dat&nbsp;het&nbsp;&#36;objectName&nbsp;heet&nbsp;is&nbsp;omdat&nbsp;het&nbsp;een&nbsp;interface&nbsp;OF&nbsp;een&nbsp;class&nbsp;is&nbsp;die&nbsp;ingeladen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;instance&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;isset(</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;objectName</span><span style="color: #007700">&#93;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require_once&nbsp;</span><span style="color: #0000BB">ROOT_PATH&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;objectName</span><span style="color: #007700">&#93;&nbsp;.&nbsp;</span><span style="color: #DD0000">'/'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;objectName&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'.php'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;stelt&nbsp;de&nbsp;array&nbsp;met&nbsp;alle&nbsp;class/interface&nbsp;lokaties&nbsp;in.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;array&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">(array&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
De statische functie load() zal het opgevraagde object gaan inladen.<br />
Nu moet PHP dat ook nog weten dus moeten we onze class gaan registreren.<br />
Omdat deze class zelf de autoloader is moeten we dus 2 objecten includen voordat we de class kunnen registreren als autoloader.<br />
Als je wakker bent weet je al welke 2 dat zijn.<br />
<br />
Anyway, tijd om index.php uit te gaan breiden.<br />
<br />
Met een paar tussenregels van het vorige blok het volgende toevoegen:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">//&nbsp;Deze&nbsp;zijn&nbsp;verplicht&nbsp;om&nbsp;de&nbsp;autoloader&nbsp;uberhaubt&nbsp;te&nbsp;kunnen&nbsp;laten&nbsp;werken.<br /></span><span style="color: #007700">include_once&nbsp;</span><span style="color: #DD0000">'interfaces/ISingleton.php'</span><span style="color: #007700">;<br />include_once&nbsp;</span><span style="color: #DD0000">'classes/AutoLoader.php'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;configureer&nbsp;de&nbsp;autoloader<br /></span><span style="color: #0000BB">&#36;autoLoader&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">AutoLoader</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">//&nbsp;De&nbsp;autoloader&nbsp;moet&nbsp;wel&nbsp;weten&nbsp;waar&nbsp;alle&nbsp;classen&nbsp;en&nbsp;interfaces&nbsp;staan<br />//&nbsp;Nu&nbsp;word&nbsp;dit&nbsp;hard&nbsp;met&nbsp;code&nbsp;aan&nbsp;de&nbsp;autoloader&nbsp;toegekend&nbsp;maar&nbsp;stel&nbsp;je&nbsp;eens&nbsp;een&nbsp;mechanisme&nbsp;voor&nbsp;dat&nbsp;automatisch&nbsp;een&nbsp;cache&nbsp;bestand&nbsp;uitleest<br />//&nbsp;waar&nbsp;dit&nbsp;allemaal&nbsp;in&nbsp;beschreven&nbsp;staat.<br /></span><span style="color: #0000BB">&#36;autoLoader</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">(array(<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'Component'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/classes'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'Template'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/classes'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'IComponent'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/interfaces'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'IPersistent'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/interfaces'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'ITemplate'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/interfaces'</span><span style="color: #007700">,<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'NewsItem'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/modules/news/classes'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'NewsMessage'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/modules/news/components'</span><span style="color: #007700">,<br />));<br /><br /></span><span style="color: #FF8000">//&nbsp;registreer&nbsp;een&nbsp;auto&nbsp;loader,&nbsp;dit&nbsp;houd&nbsp;in&nbsp;als&nbsp;er&nbsp;een&nbsp;class/interface&nbsp;word&nbsp;aangeroepen&nbsp;dan&nbsp;kijkt&nbsp;de&nbsp;autoloader&nbsp;of&nbsp;die&nbsp;gevonden&nbsp;word<br />//&nbsp;zoniet&nbsp;dan&nbsp;word&nbsp;de&nbsp;method&nbsp;AutoLoader::load()&nbsp;aangeroepen&nbsp;met&nbsp;de&nbsp;classname/interfacename&nbsp;als&nbsp;parameter&nbsp;en&nbsp;kun&nbsp;je&nbsp;het&nbsp;corresponderende&nbsp;bestand&nbsp;includen<br /></span><span style="color: #0000BB">spl_autoload_register</span><span style="color: #007700">(array(</span><span style="color: #DD0000">'AutoLoader'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'load'</span><span style="color: #007700">));&nbsp;<br /></span></code></div></div></div>
<br />
Nu de autoloader eindelijk werkt kunnen we aan de slag gaan met onze uiteindelijke doel.<br />
Tot aan hier was eigenlijk allemaal voorbereidend werk.<br />
<br />
<span style="font-weight: bold;">Template class</span><br />
<br />
Dit is de basis class voor ALLE objecten die zichzelf als html kunnen presenteren, kortom: Component.<br />
Je kunt het ook helemaal herschrijven zolang je maar de interface ITemplate implementeerd.<br />
Op deze manier kan je bijv maken: SmartyTemplate of TemplatePowerTemplate of PHPTemplate.<br />
Het zijn allemaal templates en ze kunnen allemaal hetzelfde alleen werken onder water net iets anders.<br />
<br />
Nu zal ik alleen de PHPTemplate gaan doen want php is eigenlijk al een template parser dus waarom een template parser in een template parser schrijven, we willen toch snelle websites? Weggooien dus die smarty en al die andere meuk, dat is mijn mening.<br />
Anyway, dit is de code voor de template class:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">Template<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">ITemplate<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Naam&nbsp;van&nbsp;de&nbsp;template,&nbsp;hiermee&nbsp;word&nbsp;het&nbsp;pad&nbsp;achterhaalt&nbsp;van&nbsp;het&nbsp;template&nbsp;bestand<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;templateName</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Array&nbsp;met&nbsp;alle&nbsp;geldige&nbsp;templates<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;is&nbsp;eigenlijk&nbsp;te&nbsp;vergelijken&nbsp;met&nbsp;de&nbsp;techniek&nbsp;voor&nbsp;de&nbsp;autoloader&nbsp;alleen&nbsp;dan&nbsp;met&nbsp;templates<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Daarbij&nbsp;komt&nbsp;nog&nbsp;kijken&nbsp;dat&nbsp;deze&nbsp;themas&nbsp;zijn&nbsp;gecategorieseerd&nbsp;zijn&nbsp;op&nbsp;basis&nbsp;van&nbsp;thema<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;in&nbsp;dit&nbsp;geval&nbsp;heb&nbsp;ik&nbsp;even&nbsp;2&nbsp;themas&nbsp;aangemaakt,&nbsp;default&nbsp;+&nbsp;christmas<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;is&nbsp;nu&nbsp;weer&nbsp;hard-coded&nbsp;gedaan&nbsp;maar&nbsp;dit&nbsp;zou&nbsp;weer&nbsp;uit&nbsp;een&nbsp;cache&nbsp;file&nbsp;moeten&nbsp;komen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;2&nbsp;variablen&nbsp;(&#36;valid_templates&nbsp;+&nbsp;&#36;theme)&nbsp;horen&nbsp;hier&nbsp;niet&nbsp;thuis&nbsp;maar&nbsp;is&nbsp;quik&nbsp;&amp;&nbsp;dirty.&nbsp;Hoort&nbsp;in&nbsp;een&nbsp;ThemeManagerData&nbsp;achtige&nbsp;class&nbsp;thuis.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;valid_templates</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Systeem&nbsp;naam&nbsp;van&nbsp;het&nbsp;thema&nbsp;dat&nbsp;deze&nbsp;template&nbsp;moet&nbsp;gebruiken<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Standaard&nbsp;is&nbsp;dit&nbsp;de&nbsp;global&nbsp;template&nbsp;die&nbsp;in&nbsp;de&nbsp;const&nbsp;is&nbsp;gedefineerd&nbsp;(dus&nbsp;SystemEnvironment&nbsp;achtig)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Maar&nbsp;stel&nbsp;nou&nbsp;dat&nbsp;je&nbsp;1&nbsp;template&nbsp;in&nbsp;kerst&nbsp;sfeer&nbsp;wil&nbsp;kan&nbsp;je&nbsp;dit&nbsp;dus&nbsp;als&nbsp;nog&nbsp;overriden&nbsp;indien&nbsp;je&nbsp;een&nbsp;method&nbsp;maakt&nbsp;om&nbsp;deze&nbsp;variable&nbsp;te&nbsp;wijzigen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;theme</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Array&nbsp;met&nbsp;alle&nbsp;variablen&nbsp;die&nbsp;in&nbsp;deze&nbsp;template&nbsp;gebruikt&nbsp;kunnen&nbsp;worden<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;vars</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;templateName</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Template&nbsp;naam&nbsp;instellen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;templateName</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Variablen&nbsp;standaard&nbsp;waardes&nbsp;geven<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;array();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">THEME</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;zie&nbsp;property&nbsp;definitie&nbsp;voor&nbsp;commentaar/uitleg<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates&nbsp;</span><span style="color: #007700">=&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'default'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'name'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Standaard&nbsp;thema'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'templates'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'NewsMessage'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/news/show.phtml'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'christmas'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'name'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Kerst&nbsp;thema'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'templates'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;variable&nbsp;waarde&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;De&nbsp;.phtml&nbsp;bestanden&nbsp;die&nbsp;kunnen&nbsp;deze&nbsp;"magic"&nbsp;method&nbsp;benaderen,&nbsp;zie:&nbsp;http://php.net/manual/en/language.oop5.magic.php<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Je&nbsp;moet&nbsp;het&nbsp;eigenlijk&nbsp;zo&nbsp;zien,&nbsp;op&nbsp;het&nbsp;moment&nbsp;dat&nbsp;je&nbsp;include()&nbsp;aanroept&nbsp;binnen&nbsp;in&nbsp;een&nbsp;class&nbsp;dan&nbsp;heeft&nbsp;dat&nbsp;bestand&nbsp;toegang&nbsp;tot&nbsp;alle&nbsp;methodes&nbsp;van&nbsp;die&nbsp;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;object<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">__get</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">contains</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">&#93;;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;om&nbsp;waardes&nbsp;toe&nbsp;te&nbsp;kennen&nbsp;aan&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;object&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">&#93;&nbsp;=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Controleert&nbsp;of&nbsp;opgegeven&nbsp;key&nbsp;bestaat&nbsp;in&nbsp;lijst&nbsp;met&nbsp;variablen&nbsp;voor&nbsp;deze&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">contains</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;isset(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">&#93;);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Template&nbsp;naam&nbsp;setter/getter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;complete&nbsp;path&nbsp;terug&nbsp;van&nbsp;de&nbsp;template.&nbsp;Indien&nbsp;de&nbsp;template&nbsp;niet&nbsp;bestaat&nbsp;dan&nbsp;word&nbsp;NULL&nbsp;teruggeven<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">path</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;!</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exists</span><span style="color: #007700">()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">ROOT_PATH&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">THEMES_FOLDER&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'/'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme</span><span style="color: #007700">&#93;[</span><span style="color: #DD0000">'templates'</span><span style="color: #007700">&#93;[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">&#93;;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Controleert&nbsp;of&nbsp;een&nbsp;template&nbsp;bestaat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">exists</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;nu&nbsp;word&nbsp;dit&nbsp;even&nbsp;quik&nbsp;&amp;&nbsp;dirty&nbsp;gedaan&nbsp;maar&nbsp;misschien&nbsp;kan&nbsp;je&nbsp;zelf&nbsp;een&nbsp;class&nbsp;bedenken&nbsp;die&nbsp;dezelfde&nbsp;functionaliteit&nbsp;gaat&nbsp;bieden&nbsp;als&nbsp;wat&nbsp;hieronder&nbsp;gebeurt.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Hint:&nbsp;return&nbsp;ThemeManagerData::getInstance()-&gt;exists(&#36;this-&gt;templateName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme</span><span style="color: #007700">&#93;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;thema&nbsp;bestaat&nbsp;niet&nbsp;eens<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme</span><span style="color: #007700">&#93;[</span><span style="color: #DD0000">'templates'</span><span style="color: #007700">&#93;[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">&#93;)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;alle&nbsp;checks&nbsp;gepasseerd,&nbsp;template&nbsp;bestaat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Rendered&nbsp;de&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;string&nbsp;versie&nbsp;van&nbsp;deze&nbsp;template&nbsp;terug.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Nu&nbsp;word&nbsp;er&nbsp;vanuit&nbsp;gegaan&nbsp;dat&nbsp;er&nbsp;PHP&nbsp;templates&nbsp;zijn.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Stel&nbsp;dat&nbsp;je&nbsp;ook&nbsp;smarty&nbsp;templates,&nbsp;templatepower&nbsp;templates&nbsp;etc&nbsp;wilt&nbsp;kunnen&nbsp;parsen&nbsp;google&nbsp;dan&nbsp;eens&nbsp;op&nbsp;het&nbsp;Adapter&nbsp;Pattern&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;@todo:&nbsp;hier&nbsp;kan&nbsp;nog&nbsp;include&nbsp;path&nbsp;opgeslagen&nbsp;worden.&nbsp;Pad&nbsp;van&nbsp;thema&nbsp;in&nbsp;het&nbsp;include&nbsp;path&nbsp;gezet&nbsp;worden,&nbsp;daarna&nbsp;als&nbsp;de&nbsp;template&nbsp;is&nbsp;ingeladen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;kan&nbsp;het&nbsp;oude&nbsp;include&nbsp;path&nbsp;weer&nbsp;teruggezet&nbsp;worden.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;op&nbsp;deze&nbsp;manier&nbsp;kan&nbsp;de&nbsp;template&nbsp;ook&nbsp;weer&nbsp;makkelijk&nbsp;andere&nbsp;templates&nbsp;inladen&nbsp;zonder&nbsp;moeilijk&nbsp;te&nbsp;doen&nbsp;met&nbsp;../../messages/info.phtml&nbsp;maar&nbsp;gewoon:&nbsp;messages/info.phtml&nbsp;:-)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;start&nbsp;bufferen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ob_start</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;include/render&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">include_once(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">path</span><span style="color: #007700">());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;vang&nbsp;de&nbsp;buffer&nbsp;inhoud&nbsp;op<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ob_get_contents</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;veeg&nbsp;de&nbsp;buffer&nbsp;schoon<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ob_end_clean</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;geef&nbsp;de&nbsp;geparsde&nbsp;template&nbsp;inhoud&nbsp;terug.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">&#36;content</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Nu de template class is gemaakt kunnen we de Component class gaan maken!<br />
Stel je wil de Template class al even in actie zien kan je een template aanmaken en toevoegen aan de array met geldige templates en vervolgens iets in de zin van:<br />
<br />
<span style="font-weight: bold;">index.php, onder alle huidige code plaatsen.<br />
note: is alleen voor testen en lezers die willen proberen. Gewoon weer weghalen als je klaar bent.</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&#36;template&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Template</span><span style="color: #007700">(</span><span style="color: #DD0000">'Homepage'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'eenVariable'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'Een&nbsp;waarde...'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'uitgerekend'</span><span style="color: #007700">,&nbsp;(</span><span style="color: #0000BB">5</span><span style="color: #007700">*</span><span style="color: #0000BB">5</span><span style="color: #007700">));<br /><br />echo&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">render</span><span style="color: #007700">();&nbsp;<br /></span></code></div></div></div>
<br />
Vervolgens maak je een homepage.phtml aan of hoe je het bestand ook noemt in je valid_templates array en kan je dit invullen:<br />
<br />
<span style="font-weight: bold;">homepage.phtml</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Hoi&nbsp;dit&nbsp;is&nbsp;gewoon&nbsp;html<br /><br /></span><span style="color: #007700">&lt;?</span><span style="color: #0000BB">php<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'En&nbsp;dit&nbsp;is&nbsp;een&nbsp;variable:&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">eenVariable&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;En&nbsp;dit&nbsp;is&nbsp;uitgerekend:&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">uitgerekend</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></code></div></div></div>
<br />
<span style="font-weight: bold;">Component</span><br />
<br />
Deze class zal heel erg veel gebruikt worden voor bijv. het weergeven van nieuws items, forum topics, agenda item, form elementen etc etc etc<br />
Het is een abstracte class, dit houd in dat deze functionaliteit bevat en nooit zelfstaand aangemaakt kan worden, deze type classen zullen 'altijd' ge-extend moeten worden.<br />
De abstracte class wat in dit geval Component is kan de subclass ook verplichten methodes te implementeren.<br />
De kracht van zoon class is dus dat deze functionaliteit bevat maar ook verplichtingen van een interface kan stellen.<br />
<br />
De component class is eigenlijk te vergelijken met de Template class behalve dat deze een simpele logica heeft<br />
Nog een bijzonderheid aan deze class is dat wanneer er geen template beschikbaar voor is dat deze een baseHtml() method heeft die<br />
een minimale hoeveelheid html terug geeft waar ook niet rekening word gehouden met het gekozen thema.<br />
<br />
Zie hier de Component class:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">abstract&nbsp;class&nbsp;</span><span style="color: #0000BB">Component<br /></span><span style="color: #FF8000">//&nbsp;@todo:&nbsp;extends&nbsp;EventDispatcher&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;zoals&nbsp;je&nbsp;ziet,&nbsp;hier&nbsp;heb&nbsp;je&nbsp;de&nbsp;EventDispatcher,&nbsp;het&nbsp;zou&nbsp;erg&nbsp;mooi&nbsp;zijn&nbsp;als&nbsp;deze&nbsp;eenmaal&nbsp;ge-implementeerd&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;stel&nbsp;je&nbsp;eens&nbsp;voor&nbsp;dat&nbsp;je&nbsp;een&nbsp;UsernameInputBox&nbsp;hebt&nbsp;(extend&nbsp;InputBox&nbsp;-&gt;&nbsp;FormElement&nbsp;-&gt;&nbsp;Component)&nbsp;en&nbsp;een&nbsp;event&nbsp;dispatched:&nbsp;Event::CHANGE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Mogelijkheden&nbsp;zijn&nbsp;eindeloos..<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IComponent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Variable&nbsp;die&nbsp;gebruikt&nbsp;word&nbsp;zodat&nbsp;we&nbsp;ALTIJD&nbsp;een&nbsp;uniek&nbsp;ID&nbsp;hebben&nbsp;voor&nbsp;de&nbsp;component<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;int<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;static&nbsp;</span><span style="color: #0000BB">&#36;uniqueId</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;is&nbsp;het&nbsp;id&nbsp;van&nbsp;dit&nbsp;component,&nbsp;deze&nbsp;instantie.&nbsp;Bovenstaande&nbsp;uniqueId&nbsp;is&nbsp;per&nbsp;keer&nbsp;dat&nbsp;er&nbsp;een&nbsp;Component&nbsp;word&nbsp;aangemaakt&nbsp;met&nbsp;1&nbsp;verhoogd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;id</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Stijlnaam,&nbsp;deze&nbsp;wordt&nbsp;later&nbsp;gebruikt&nbsp;voor&nbsp;juiste&nbsp;template&nbsp;inladen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;styleName</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;uniek&nbsp;id&nbsp;toekennen&nbsp;aan&nbsp;onszelf&nbsp;+&nbsp;verhoog&nbsp;het&nbsp;uniqueId&nbsp;op&nbsp;globaal&nbsp;niveau&nbsp;met&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;uniqueId</span><span style="color: #007700">++;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;stel&nbsp;onze&nbsp;STANDAARD&nbsp;stylename&nbsp;in,&nbsp;deze&nbsp;kan&nbsp;uiteraard&nbsp;nog&nbsp;veranderd&nbsp;worden<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;als&nbsp;mogelijkheid&nbsp;je&nbsp;component&nbsp;te&nbsp;omschrijven<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Hier&nbsp;kan&nbsp;je&nbsp;bijv&nbsp;aan&nbsp;de&nbsp;front-end&nbsp;developer&nbsp;duidelijk&nbsp;maken&nbsp;welke&nbsp;variablen&nbsp;hij&nbsp;kan&nbsp;gebruiken&nbsp;in&nbsp;de&nbsp;component&nbsp;indien&nbsp;je&nbsp;een&nbsp;debug&nbsp;modus&nbsp;maakt&nbsp;voor&nbsp;components<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">description</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;aangeroepen&nbsp;net&nbsp;voordat&nbsp;er&nbsp;ge-RENDER-ed&nbsp;gaat&nbsp;worden&nbsp;zodat&nbsp;alle&nbsp;variablen&nbsp;klaar&nbsp;gezet&nbsp;kunnen&nbsp;worden&nbsp;en&nbsp;geen&nbsp;dubbele&nbsp;code&nbsp;krijgt&nbsp;of&nbsp;code&nbsp;die&nbsp;2x&nbsp;aangeroepen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">preBuild</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;aangeroepen&nbsp;indien&nbsp;er&nbsp;geen&nbsp;template&nbsp;voor&nbsp;deze&nbsp;component&nbsp;beschikbaar&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;In&nbsp;dat&nbsp;geval&nbsp;kan&nbsp;de&nbsp;component&nbsp;een&nbsp;simpel&nbsp;stuk&nbsp;html&nbsp;teruggeven&nbsp;waar&nbsp;hij&nbsp;minimaal&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Is&nbsp;bijv.&nbsp;handig&nbsp;voor&nbsp;formulier&nbsp;elementen&nbsp;omdat&nbsp;je&nbsp;deze&nbsp;bijna&nbsp;nooit&nbsp;een&nbsp;echte&nbsp;template&nbsp;zal&nbsp;geven,&nbsp;baseHtml&nbsp;+&nbsp;css&nbsp;voldoet&nbsp;99%&nbsp;van&nbsp;de&nbsp;tijd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">baseHtml</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;aangeroepen&nbsp;indien&nbsp;er&nbsp;WEL&nbsp;een&nbsp;template&nbsp;beschikbaar&nbsp;is,&nbsp;hier&nbsp;krijg&nbsp;je&nbsp;de&nbsp;mogelijkheid&nbsp;om&nbsp;de&nbsp;variablen&nbsp;toe&nbsp;te&nbsp;kennen&nbsp;aan&nbsp;je&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;Template&nbsp;&#36;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">prepareTemplate</span><span style="color: #007700">(</span><span style="color: #0000BB">Template&nbsp;&#36;template</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;de&nbsp;identiteit&nbsp;van&nbsp;deze&nbsp;component&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;is&nbsp;altijd&nbsp;uniek,&nbsp;dit&nbsp;is&nbsp;bijv.&nbsp;handig&nbsp;voor&nbsp;een&nbsp;element&nbsp;aanroepen&nbsp;in&nbsp;javascript.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">identity</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">__CLASS__</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;om&nbsp;component&nbsp;om&nbsp;te&nbsp;zetten&nbsp;naar&nbsp;html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/*&nbsp;@todo:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;kunt&nbsp;een&nbsp;check&nbsp;maken&nbsp;of&nbsp;we&nbsp;in&nbsp;component&nbsp;debug&nbsp;modus&nbsp;draaien<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zoja&nbsp;dan&nbsp;geef&nbsp;je&nbsp;enkel&nbsp;de&nbsp;description()&nbsp;terug&nbsp;als&nbsp;waarde<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;in_array(&#36;this-&gt;identity(),&nbsp;self::&#36;debugComponents)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;'&lt;div&nbsp;class="ComponentDebugger"&gt;'&nbsp;.&nbsp;&#36;this-&gt;description()&nbsp;.&nbsp;'&lt;/div&gt;';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Bereid&nbsp;alles&nbsp;voor<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">preBuild</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Probeer&nbsp;een&nbsp;template&nbsp;te&nbsp;laden&nbsp;voor&nbsp;dit&nbsp;component<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Template</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;!</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exists</span><span style="color: #007700">()&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;er&nbsp;is&nbsp;geen&nbsp;template&nbsp;dus&nbsp;gebruik&nbsp;de&nbsp;basis&nbsp;html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;html&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">baseHtml</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Template&nbsp;bestaat,&nbsp;laat&nbsp;het&nbsp;component&nbsp;deze&nbsp;invullen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepareTemplate</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;render&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;html&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">render</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;geef&nbsp;de&nbsp;ge-genereerde&nbsp;html&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">&#36;html</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;de&nbsp;stylename&nbsp;terug&nbsp;van&nbsp;het&nbsp;component,&nbsp;deze&nbsp;kan&nbsp;ook&nbsp;gezet&nbsp;worden&nbsp;door&nbsp;deze&nbsp;method.&nbsp;De&nbsp;stylename&nbsp;bepaalt&nbsp;uiteindelijk&nbsp;welke&nbsp;template&nbsp;ingeladen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Alleen&nbsp;een&nbsp;getter&nbsp;van&nbsp;de&nbsp;volledige&nbsp;stylename,&nbsp;hier&nbsp;worden&nbsp;ook&nbsp;alle&nbsp;classen&nbsp;meegenomen&nbsp;die&nbsp;parents&nbsp;zijn&nbsp;van&nbsp;deze&nbsp;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;kan&nbsp;je&nbsp;weer&nbsp;invullen&nbsp;als&nbsp;je&nbsp;bijv.&nbsp;een&nbsp;&lt;input&gt;&nbsp;hebt&nbsp;die&nbsp;een&nbsp;component&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voorbeeld:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;input&nbsp;....&nbsp;class="IComponent&nbsp;Component&nbsp;IFormElement&nbsp;FormElement&nbsp;InputBox&nbsp;username"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Uiteraard&nbsp;kan&nbsp;je&nbsp;de&nbsp;interfaces&nbsp;nog&nbsp;eruit&nbsp;filteren&nbsp;bij&nbsp;het&nbsp;invullen&nbsp;van&nbsp;de&nbsp;fullStyleName()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">fullStylename</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;parents&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">class_parents</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;haal&nbsp;alle&nbsp;sub&nbsp;classen&nbsp;op<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">foreach(</span><span style="color: #0000BB">&#36;parents&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">&#36;parent</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;parent&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;string</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ident</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ident&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #DD0000">'&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;string</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit was het Component, hier kunnen we (nog) niks mee want we hebben nog geen class die deze gebruikt.<br />
Eerst de Data class voor nieuws maken, hier geef ik niet heel erg veel uitleg bij want deze is vrij basic.<br />
<br />
<span style="font-weight: bold;">Data class voor news</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Class&nbsp;voor&nbsp;nieuws&nbsp;items<br />&nbsp;*&nbsp;Deze&nbsp;class&nbsp;is&nbsp;de&nbsp;data-laag,&nbsp;deze&nbsp;heeft&nbsp;niets&nbsp;te&nbsp;maken&nbsp;hoe&nbsp;deze&nbsp;aan&nbsp;de&nbsp;bezoeker&nbsp;gepresenteerd&nbsp;word<br />&nbsp;*&nbsp;Hij&nbsp;bevat&nbsp;enkel&nbsp;data&nbsp;en&nbsp;functionaliteit&nbsp;om&nbsp;opgeslagen&nbsp;te&nbsp;worden&nbsp;(IPersistent)<br />&nbsp;*<br />&nbsp;*/<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">NewsItem<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IPersistent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;id</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;title</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;author</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">##&nbsp;IPersistent&nbsp;##<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">save</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">insert</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">update</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">insert</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;hier&nbsp;query&nbsp;om&nbsp;je&nbsp;nieuws&nbsp;item&nbsp;in&nbsp;de&nbsp;database&nbsp;te&nbsp;stoppen,&nbsp;of&nbsp;in&nbsp;xml..&nbsp;of&nbsp;in&nbsp;tekst&nbsp;bestand&nbsp;whatever&nbsp;you&nbsp;would&nbsp;like<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">update</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;hier&nbsp;je&nbsp;ding&nbsp;om&nbsp;het&nbsp;nieuws&nbsp;item&nbsp;te&nbsp;updaten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">delete</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;hier&nbsp;je&nbsp;ding&nbsp;om&nbsp;het&nbsp;nieuws&nbsp;item&nbsp;te&nbsp;verwijderen&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">##&nbsp;END&nbsp;IPersistent&nbsp;##<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;GETTERS&nbsp;/&nbsp;SETTERS&nbsp;##<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">message</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">author</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;nu&nbsp;is&nbsp;de&nbsp;&#36;value&nbsp;een&nbsp;string,&nbsp;had&nbsp;eigenlijk&nbsp;een&nbsp;User&nbsp;object&nbsp;moeten&nbsp;zijn....<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit is duidelijk data. Hier word helemaal niks met display of output of wat dan ook gedaan.<br />
Maar het juiste component zal de structuur van deze data snappen en kan deze dus gebruiken voor weergave genaamd NewsMessage.<br />
<br />
<span style="font-weight: bold;">News component schrijven</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">NewsMessage<br /></span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">Component<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Het&nbsp;item&nbsp;dat&nbsp;getoond&nbsp;moet&nbsp;worden,&nbsp;dit&nbsp;is&nbsp;een&nbsp;class&nbsp;NewsItem.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;De&nbsp;bedoeling&nbsp;hier&nbsp;van&nbsp;is&nbsp;dat&nbsp;je&nbsp;de&nbsp;laag&nbsp;data&nbsp;onderscheid&nbsp;van&nbsp;de&nbsp;laag&nbsp;met&nbsp;display.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Kortom:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;NewsMessage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;Component:&nbsp;DisplayObject,&nbsp;visueel.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;NewsItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;Puur&nbsp;Data&nbsp;&amp;&nbsp;Functionaliteit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;NewsItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;source</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">baseHtml&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #DD0000">'NewsMessage&nbsp;base&nbsp;html'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">description&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #DD0000">'Beschrijving&nbsp;van&nbsp;NewsMessage&nbsp;component.&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beschikbare&nbsp;variablen:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;id&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;title&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;message&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;author&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">preBuild&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;niet&nbsp;nodig&nbsp;hier,&nbsp;bij&nbsp;deze&nbsp;component&nbsp;word&nbsp;het&nbsp;nieuws&nbsp;item&nbsp;van&nbsp;buiten&nbsp;af&nbsp;ingegeven.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;word&nbsp;ingeladen&nbsp;bij&nbsp;het&nbsp;weergeven&nbsp;is&nbsp;dit&nbsp;de&nbsp;plek&nbsp;om&nbsp;het&nbsp;commentaar&nbsp;in&nbsp;te&nbsp;laden&nbsp;en&nbsp;intern&nbsp;in&nbsp;deze&nbsp;class&nbsp;op&nbsp;te&nbsp;slaan.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Hier&nbsp;kunnen&nbsp;kort&nbsp;gezegd&nbsp;uitzonderingen&nbsp;gemaakt&nbsp;worden&nbsp;en&nbsp;dingen&nbsp;inladen&nbsp;die&nbsp;standaard&nbsp;niet&nbsp;worden&nbsp;ondersteund&nbsp;door&nbsp;het&nbsp;data&nbsp;object<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;dan&nbsp;vervolgens&nbsp;bij&nbsp;prepareTemplate&nbsp;&amp;&nbsp;baseHtml()&nbsp;zal&nbsp;die&nbsp;klaar&nbsp;staan&nbsp;om&nbsp;weergegeven&nbsp;worden.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;of&nbsp;nog&nbsp;een&nbsp;ander&nbsp;voorbeeld,&nbsp;stel&nbsp;dat&nbsp;je&nbsp;enkel&nbsp;een&nbsp;id&nbsp;binnen&nbsp;krijgt&nbsp;van&nbsp;het&nbsp;nieuws&nbsp;item,&nbsp;dan&nbsp;kan&nbsp;je&nbsp;nu&nbsp;dus&nbsp;dat&nbsp;nieuws&nbsp;item&nbsp;ophalen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;en&nbsp;het&nbsp;object&nbsp;invullen.&nbsp;nu&nbsp;heb&nbsp;ik&nbsp;het&nbsp;wel&nbsp;over&nbsp;een&nbsp;dirty&nbsp;scenario&nbsp;want&nbsp;dan&nbsp;hou&nbsp;je&nbsp;je&nbsp;niet&nbsp;meer&nbsp;aan&nbsp;de&nbsp;data/display&nbsp;laag&nbsp;gescheiden&nbsp;regel.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">prepareTemplate&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">Template&nbsp;&#36;template</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Vertel&nbsp;de&nbsp;template&nbsp;de&nbsp;waardes&nbsp;van&nbsp;onze&nbsp;bron&nbsp;(NewsItem)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'id'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'title'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'message'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">());&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;ALS&nbsp;het&nbsp;nodig&nbsp;is&nbsp;doe&nbsp;je&nbsp;HIER&nbsp;de&nbsp;htmlentities()&nbsp;check<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'author'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Stelt&nbsp;de&nbsp;source&nbsp;van&nbsp;de&nbsp;component&nbsp;in<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;NewsItem&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;NewsItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">source</span><span style="color: #007700">(</span><span style="color: #0000BB">NewsItem&nbsp;&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit is de component.<br />
Zoals je ziet is het eigenlijk heel erg simpel om nu componenten erbij te maken.<br />
Je maakt een nieuwe class, je extend Component class, je vult 4 functies in:<br />
<br />
- baseHtml()<br />
- description()<br />
- preBuild()<br />
- prepareTemplate()<br />
<br />
En je hebt een volledig component.<br />
Daarnaast kan je natuurlijk nog honderden functionaliteiten toevoegen.<br />
Bedenk je eens dat je NewsMessage gaat extenden met een class in de zin van PagedNewsMessage bijv.<br />
Zoon nieuwsbericht die ondersteund opeens pagina nummering... Is maar een voorbeeld.<br />
<br />
Nu zijn we bijna klaar! Template invullen en test code in index.php en draaien!<br />
<br />
<span style="font-weight: bold;">Template invullen</span><br />
<br />
Vul in de template het volgende in:<br />
<br />
<span style="font-weight: bold;">themes/default/news/show.phtml</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">th&nbsp;colspan</span><span style="color: #007700">=</span><span style="color: #DD0000">"2"</span><span style="color: #007700">&gt;&lt;?</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title?&gt;</span>&lt;/th&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;Auteur&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author?&gt;</span>&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;colspan="2"&gt;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message?&gt;</span>&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />&lt;/table&gt;&nbsp;<br /></code></div></div></div>
<br />
Lijkt me zeer voor de hand liggend.<br />
Het enigste weetje hiervan is dat je weet in welke context je zit met &#36;this<br />
3x raden, &#36;this = de instantie van Template!<br />
Dus als je &#36;this-&gt;author aanroept dan roep je eigenlijk Template::__get() aan.<br />
In de parameter van Template::__get() word dus author meegegeven.<br />
<br />
Voila. Je hebt een componenten systeem.<br />
Nu nog testen dus.<br />
<br />
<span style="font-weight: bold;">Testen!</span><br />
<br />
Voeg de volgende code toe aan index.php:<br />
<br />
<span style="font-weight: bold;">index.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">//&nbsp;Nu&nbsp;maak&nbsp;ik&nbsp;hier&nbsp;een&nbsp;test&nbsp;object&nbsp;aan,&nbsp;je&nbsp;moet&nbsp;je&nbsp;voorstellen&nbsp;dat&nbsp;deze&nbsp;normaal&nbsp;uiteraard&nbsp;ingeladen&nbsp;word&nbsp;vanuit&nbsp;de&nbsp;database&nbsp;of&nbsp;iets&nbsp;dergelijks.<br />//&nbsp;Een&nbsp;NewsItem&nbsp;is&nbsp;puur&nbsp;data<br /></span><span style="color: #0000BB">&#36;item&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsItem</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">(</span><span style="color: #DD0000">'Chris'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #DD0000">'Het&nbsp;nieuws&nbsp;van&nbsp;de&nbsp;dag!'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">(</span><span style="color: #DD0000">'Het&nbsp;bericht'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;Dan&nbsp;maak&nbsp;ik&nbsp;nu&nbsp;de&nbsp;component&nbsp;aan,&nbsp;dit&nbsp;is&nbsp;het&nbsp;visuele&nbsp;object,&nbsp;deze&nbsp;snapt&nbsp;weer&nbsp;de&nbsp;data&nbsp;en&nbsp;weet&nbsp;hoe&nbsp;die&nbsp;het&nbsp;kan&nbsp;weergeven<br /></span><span style="color: #0000BB">&#36;message&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsMessage</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">//&nbsp;het&nbsp;visuele&nbsp;object&nbsp;weet&nbsp;hoe&nbsp;die&nbsp;het&nbsp;moet&nbsp;weergeven&nbsp;maar&nbsp;moet&nbsp;ook&nbsp;nog&nbsp;weten&nbsp;WAT&nbsp;die&nbsp;moet&nbsp;gaan&nbsp;weergeven&nbsp;dus&nbsp;stellen&nbsp;we&nbsp;nu&nbsp;de&nbsp;bron&nbsp;in<br /></span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;en&nbsp;uiteindelijk&nbsp;als&nbsp;het&nbsp;component&nbsp;is&nbsp;ingevuld&nbsp;kan&nbsp;die&nbsp;gaan&nbsp;renderen<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">render</span><span style="color: #007700">();&nbsp;<br /></span></code></div></div></div>
<br />
Je kunt nu gaan testen door alles in een webfolder te plaatsen op je (lokale) webserver en index.php aanroepen.<br />
<br />
<span style="font-weight: bold;">Einde</span><br />
<br />
Dit is het einde van mijn artikel.<br />
Het was een behoorlijke klus maar het is af en hoop iedereen hier veel van geleerd heeft.<br />
<br />
Dingen die je nog zou kunnen gaan doen:<br />
<br />
- EventDispatcher schrijven en de Component class die laten extenden<br />
- Form module schrijven (Form components + Form logica etc etc)<br />
- Nadat je de EventDispatcher hebt geschreven een ORM schrijven die aangesloten is op het template systeem en zo lijsten weergeven, bij elke next() van je db ORM word event gedispatched, Template gaat meteen parsen, zo heb je nooit dubbele loops bij weergeven van lijsten.<br />
<br />
Check de attachment om het gehele artikel in zijn werking te zien.<br />
Daarnaast zijn ook nog een aantal extra's verstopt in de attachment die ik wou gaan behandelen maar was toch erg veel schrijfwerk, voor een volgende keer en de gene die het lezen hebben alvast een voorproefje.<br />
<br />
Vragen of opmerkingen? Gewoon doen!<br />
<br />
Chris.<br />
<br />
<br />
<span style="font-weight: bold;">Extra</span><br />
<br />
Om je vast een klein beetje op weg te helpen hoe de forms in elkaar zouden kunnen gaan zitten dan is hier een voorbeeld:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">NewsItemForm<br /></span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">Form<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;title</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;author</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;category</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">createChildren&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;invoerveld&nbsp;voor&nbsp;titel&nbsp;aanmaken&nbsp;en&nbsp;toevoegen&nbsp;aan&nbsp;formulier<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">InputBox</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">(</span><span style="color: #DD0000">'title'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Titel'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">InputBox</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">(</span><span style="color: #DD0000">'author'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Auteur'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;NewsCategorySelector&nbsp;extends&nbsp;SelectBox&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsCategorySelector</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Ouder&nbsp;categorie'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">TextEditor</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">(</span><span style="color: #DD0000">'message'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Bericht'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;je&nbsp;kunt&nbsp;je&nbsp;nu&nbsp;voorstellen,&nbsp;je&nbsp;voegt&nbsp;een&nbsp;InputBox&nbsp;toe.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Maar&nbsp;je&nbsp;kunt&nbsp;je&nbsp;ook&nbsp;zo&nbsp;voorstellen,&nbsp;ik&nbsp;voeg&nbsp;een&nbsp;IFormElement/IComponent&nbsp;toe,&nbsp;kortom&nbsp;je&nbsp;kunt&nbsp;ALLLESSS&nbsp;toevoegen&nbsp;aan&nbsp;je&nbsp;form<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;zolang&nbsp;het&nbsp;maar&nbsp;de&nbsp;interface&nbsp;IComponent&nbsp;implementeert.&nbsp;Dat&nbsp;is&nbsp;pas&nbsp;Power&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;word&nbsp;alleen&nbsp;aangeroepen&nbsp;als&nbsp;alle&nbsp;velden&nbsp;gevalideerd&nbsp;zijn&nbsp;dus&nbsp;hierin&nbsp;hoeft&nbsp;niks&nbsp;meer&nbsp;gechecked&nbsp;te&nbsp;worden&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;function&nbsp;</span><span style="color: #0000BB">handleForm&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;indien&nbsp;dit&nbsp;formulier&nbsp;gebruikt&nbsp;word&nbsp;voor&nbsp;het&nbsp;aanmaken&nbsp;dan&nbsp;is&nbsp;&#36;this-&gt;item&nbsp;null&nbsp;en&nbsp;word&nbsp;dat&nbsp;object&nbsp;dus&nbsp;ook&nbsp;aangemaakt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;indien&nbsp;dit&nbsp;formulier&nbsp;gebruikt&nbsp;word&nbsp;voor&nbsp;het&nbsp;wijzigen&nbsp;dan&nbsp;is&nbsp;&#36;this-&gt;item&nbsp;een&nbsp;NewsItem&nbsp;object&nbsp;ingesteld&nbsp;van&nbsp;buitenaf<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;In&nbsp;NewsItem::save()&nbsp;word&nbsp;iets&nbsp;gedaan&nbsp;in&nbsp;de&nbsp;zin&nbsp;van:&nbsp;if(&#36;this-&gt;id&nbsp;===&nbsp;null&nbsp;)&nbsp;{&nbsp;&#36;this-&gt;_insert();&nbsp;}&nbsp;else&nbsp;{&nbsp;&#36;this-&gt;update();&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsItem</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;value()&nbsp;returned&nbsp;een&nbsp;NewsCategory&nbsp;object.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;save&nbsp;item<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">save</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit is nu wel echt het einde, haha.<br />
<br />
Have fun!]]></description>
			<content:encoded><![CDATA[Hoi,<br />
<br />
het is een tijdje geleden dat ik actief was hier maar ik wil graag weer eens een beetje kennis delen.<br />
Na deze tutorial zul je een goed inzicht hebben hoe je een stevig template systeem van componenten in elkaar kan zetten.<br />
<br />
Index:<br />
<ul>
<li>Intro</li>
<li>Mappen structuur</li>
<li>Constants</li>
<li>Interfaces defineren</li>
<li>Autoloader</li>
<li>Template class</li>
<li>Component class</li>
<li>Data class voor news</li>
<li>News component schrijven</li>
<li>Template invullen</li>
<li>Testen!</li>
<li>Eind</li>
<li>Extra<br />
</li></ul>
<br />
<span style="font-weight: bold;">Intro</span><br />
<br />
Eindelijk, nu word het leuk.<br />
Wat ik jullie ga leren heb ik ook weer geleerd van iemand anders en heb me eigen creativiteit er daarna op losgelaten en nu wil ik dit graag delen.<br />
De bedoeling is dat alles OOP word, nu zul je denken, ja php, oop? Klopt, php ondersteund inderdaad veel minder dan bijv. C# dat doet qua OOP maar we gaan het toch doen.<br />
Als je bekent bent met Flex dan is de term Component niet heel erg nieuw meer voor je maar hoe passen we dit dan toe in php?<br />
Voordat we daar aankomen moeten we een kleine basis hebben en dat is de Template class.<br />
Deze class die zal templates kunnen inladen en variablen kunnen toekennen en naar de output buffer kunnen schrijven.<br />
De output buffer is eigenlijk een duur woord voor alles wat naar de bezoeker ze browser word gestuurd.<br />
<br />
Mijn voorbeeld zal ervoor zorgen dat je een News component gaat hebben, daarna kan je er zelf op los gaan en uitbreiden en je eigen componenten gaan bouwen.<br />
<br />
Het is wel belangrijk om de denkwijze te hebben:<br />
<br />
Een component is een visueel object. Deze heeft geen logica maar alleen weergave logica. Hij kan bijv. bepalen of een link voor bewerken getoond word of niet maar hij zal nooit een database query bevatten.<br />
Daarvoor hebben we namelijk een data object daarom zal ik nu alvast verklappen dat we een class maken: NewsItem (data) en een class NewsMessage (component)<br />
Hoe dit dan in zijn werk gaat zal je verderop zien.<br />
De reden dat ik dit zo doe is omdat je dan een NewsItem object (puur data) ook aan andere visuele objecten (components) kan geven, zo hou je alle lagen (data -&gt; component -&gt; template) netjes gescheiden<br />
<br />
Nog 1 ding om te weten, alle benamingen zullen in het engels zijn, uitleg en commentaar in het nederlands.<br />
Commentaar in het nederlands omdat ik dit op een NL community post uiteraard :-)<br />
<br />
Toch nog 1 laatste ding, eigenlijk zal deze in dezelfde stijl gaan als me vorige tutorial (Ajax auto completer in JavaScript forum: <a href="http://ep2.nl/thread-2600.html" target="_blank">http://ep2.nl/thread-2600.html</a> )<br />
Ik post soms lappen code en geef hele beknopte uitleg maar dat is omdat er heel erg veel commentaar in de code zelf staat.<br />
Mocht er iets toch niet helemaal duidelijk zijn dan kan dat uiteraard nog uitgelegd worden.<br />
<span style="font-weight: bold;">Mappen structuur</span><br />
<br />
Het lijkt me handig om mappen structuur alvast klaar te hebben en dan gaan we straks iedere map stukje bij beetje invullen en zo word de puzzel compleet.<br />
Ik zal ook een aantal mappen defineren die we niet gebruiken maar dit is ter voorbeeld hoe het eruit zou kunnen zien als je vanuit dit ontwerp verder zou willen ontwikkelen.<br />
Deze markeer ik met een asterik (*).<br />
<ul>
<li>classes<br />
<ul>
<li>AutoLoader.php</li>
<li>Component.php</li>
<li>Template.php<br />
	</li></ul></li>
<li>components<br />
<ul>
<li>PlainText.php<br />
	</li></ul></li>
<li>interfaces<br />
<ul>
<li>IComponent</li>
<li>IPersistent</li>
<li>ISingleton</li>
<li>ITemplate</li>
<li>IEventDispatcher *<br />
	</li></ul></li>
<li>modules<br />
<ul>
<li>forms * (OOP forms komen nog in een ander hoofdstuk, hoor het graag als jullie willen dat ik dit ook schrijf :-))<br />
	<ul>
<li>classes<br />
			[list]</li>
<li>Form.php</li>
<li>FormElement.php<br />
			</li></ul></li>
<li>components<br />
		<ul>
<li>InputBox.php</li>
<li>Label.php<br />
			</li></ul></li>
<li>interfaces<br />
		<ul>
<li>IFormElement.php<br />
			</li></ul>
		</li></ul></li>
<li>news<br />
	<ul>
<li>classes<br />
		<ul>
<li>NewsItem.php<br />
			</li></ul></li>
<li>components<br />
		<ul>
<li>NewsMessage.php<br />
			</li></ul></li>
<li>forms<br />
		<ul>
<li>NewsCategoryForm.php<br />
			</li></ul>
		</li></ul></li>
<li>themes<br />
<ul>
<li>default<br />
	<ul>
<li>news</li>
<li>show.phtml<br />
		</li></ul>
	</li></ul></li>
<li>index.php<br />
</li></ul>
<br />
Nu dit is aangemaakt kunnen we verder.<br />
Vul in alle bestanden nog maar even niets in, gewoon leeg bestand aanmaken, vullen we later in.<br />
<br />
<span style="font-weight: bold;">Constants</span><br />
<br />
Voordat we beginnen moet je wel beseffen dat dit systeem heel goed toepasbaar is in een groot systeem.<br />
Nu heb ik niet genoeg inkt om dat systeem te gaan omschrijven dus bepaalde systeem variablen die je uit een class als SystemEnvironments of iets dergelijks haalt doen we nu even simpelweg in constants defineren.<br />
<br />
De index.php is 0,0 OOP omdat het puur is om te testen, je kan zelf later invullen hoe je alles gaat toepassen namelijk.<br />
<br />
<span style="font-style: italic;">index.php:</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br />define</span><span style="color: #007700">(</span><span style="color: #DD0000">'THEME'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'default'</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;mogelijkheden:&nbsp;default&nbsp;|&nbsp;christmas<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'THEMES_FOLDER'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'/themes'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">define</span><span style="color: #007700">(</span><span style="color: #DD0000">'ROOT_PATH'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'C:/xampp/htdocs/tutorials/components'</span><span style="color: #007700">);&nbsp;<br /></span></code></div></div></div>
<br />
De constants beschreven:<br />
<br />
- THEME<br />
	<span style="font-style: italic;">De systeemnaam van het thema, deze representeerd in ons geval ook meteen de folder naam waar de templates staan.</span><br />
- THEMES_FOLDER<br />
	<span style="font-style: italic;">Dit is waar alle themas gedefineerd staan</span><br />
- ROOT_PATH<br />
	<span style="font-style: italic;">Dit is het basis pad naar onze map met bestanden, deze word gebruikt bij het includen van files (Autoloader + Template classen)</span><br />
	 <br />
Straks word index.php nog verder ingevuld.<br />
<br />
<span style="font-weight: bold;">Interfaces defineren</span><br />
<br />
Interfaces zijn een van de krachtigste objecten in php vind ik zelf persoonlijk.<br />
<br />
Voor de mensen die het princiepe van interfaces al wel begrijpen kunnen onderstaand blok skippen, de rest die het nog niet begrijpt gewoon lekker blijven lezen.<br />
<br />
<blockquote><cite>Citaat:</cite>Een interface is eigenlijk de manier waarop iets bestuurd kan worden.<br />
Neem bijv. een tv afstandsbediening, iedereen weet dat elke afstandsbedieding altijd de volgende knoppen heeft:<br />
<br />
- Aan<br />
- Uit<br />
- Volume harder<br />
- Volume zachter<br />
- Programma verder<br />
- Programma terug<br />
<br />
Alsof je nou een sony of een samsung afstandsbedieing hebt, ze hebben allemaal dezelfde <span style="font-weight: bold;">functionaliteit</span> maar hoe de sony afstandsbediening het volume signaal verstuurd naar de televisie kan compleet anders dan dat de samsung afstandsbediening dit doet.<br />
<br />
Klein voorbeeldje in code:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IRemoteControl<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOff</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;en&nbsp;de&nbsp;rest&nbsp;van&nbsp;de&nbsp;functies&nbsp;nog:&nbsp;increaseVolume()&nbsp;decreaseVolume()&nbsp;etc&nbsp;etc<br /></span><span style="color: #007700">}<br /><br />class&nbsp;</span><span style="color: #0000BB">SonyRemote<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IRemoteControl&nbsp;</span><span style="color: #FF8000">//&nbsp;hiermee&nbsp;vertel&nbsp;ik&nbsp;dat&nbsp;ik&nbsp;alle&nbsp;functionaliteit&nbsp;heb&nbsp;van&nbsp;een&nbsp;IRemoteControl<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;nu&nbsp;ik&nbsp;mij&nbsp;voordoe&nbsp;als&nbsp;een&nbsp;remote&nbsp;control&nbsp;moet&nbsp;ik&nbsp;ook&nbsp;die&nbsp;functionaliteit&nbsp;bieden&nbsp;dus&nbsp;ben&nbsp;ik&nbsp;verplicht&nbsp;om&nbsp;de&nbsp;publieke&nbsp;methodes&nbsp;van&nbsp;de&nbsp;interface&nbsp;te&nbsp;implementeren:<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;iets&nbsp;om&nbsp;tv&nbsp;aan&nbsp;te&nbsp;zetten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOff</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;iets&nbsp;om&nbsp;tv&nbsp;uit&nbsp;te&nbsp;zetten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />}<br /><br />class&nbsp;</span><span style="color: #0000BB">SamsungRemote<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IRemoteControll<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;hier&nbsp;kan&nbsp;ik&nbsp;iets&nbsp;doen&nbsp;hoe&nbsp;ik&nbsp;mijn&nbsp;samsung&nbsp;tv&nbsp;aan&nbsp;zet<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">turnOff</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;en&nbsp;hier&nbsp;iets&nbsp;om&nbsp;die&nbsp;tv&nbsp;weer&nbsp;uit&nbsp;te&nbsp;zetten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />}<br /><br /></span><span style="color: #FF8000">//&nbsp;Denk&nbsp;bijv&nbsp;aan&nbsp;de&nbsp;Sims&nbsp;hoe&nbsp;zoiets&nbsp;gebouwd&nbsp;zou&nbsp;kunnen&nbsp;zijn&nbsp;(net&nbsp;uit&nbsp;me&nbsp;duim&nbsp;gezogen&nbsp;hoor)<br />//&nbsp;Het&nbsp;gaat&nbsp;er&nbsp;hier&nbsp;om&nbsp;dat&nbsp;er&nbsp;bij&nbsp;de&nbsp;method&nbsp;giveRemoteControll()&nbsp;geen&nbsp;class&nbsp;SamsungRemote&nbsp;of&nbsp;SonyRemote&nbsp;word&nbsp;gevraagd&nbsp;maar&nbsp;gewoon&nbsp;<br />//&nbsp;"een&nbsp;(lees&nbsp;als&nbsp;'UN')"&nbsp;controller&nbsp;die&nbsp;de&nbsp;functionaliteit&nbsp;van&nbsp;'UN'&nbsp;afstandsbedieing&nbsp;ondersteund.&nbsp;(IRemoteControll)<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">TurnTelevisionOnAction<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IPersonAction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;heeft&nbsp;method:&nbsp;execute()<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;controller</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">giveRemoteControll</span><span style="color: #007700">(</span><span style="color: #0000BB">IRemoteControll&nbsp;&#36;controll</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">controller&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;controll</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">execute</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">controller</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">turnOn</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br /><br />class&nbsp;</span><span style="color: #0000BB">Person<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">addActionToQueue</span><span style="color: #007700">(</span><span style="color: #0000BB">IPersonAction&nbsp;&#36;action</span><span style="color: #007700">)&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;dit&nbsp;kan&nbsp;IEDERE&nbsp;actie&nbsp;zijn,&nbsp;in&nbsp;ons&nbsp;geval&nbsp;hebben&nbsp;we&nbsp;nog&nbsp;maar&nbsp;1&nbsp;actie:&nbsp;TurnTelevisionOnAction<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">actionQueue</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">append</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;action</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Zo, dit kan maar zo een tutorial apart zijn volgens mij.<br />
Anyway, dit zijn dus interfaces. Vragen zijn welkom hoor.</blockquote>
<br />
<br />
<span style="font-weight: bold;">interfaces/IComponent.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Interface&nbsp;voor&nbsp;alle&nbsp;componenten,&nbsp;ieder&nbsp;component&nbsp;ondersteunt&nbsp;minimaal&nbsp;deze&nbsp;functionaliteiten&nbsp;zoals&nbsp;hieronder&nbsp;beschreven:<br />&nbsp;*<br />&nbsp;*&nbsp;-&nbsp;render<br />&nbsp;*&nbsp;-&nbsp;styleName<br />&nbsp;*&nbsp;-&nbsp;fullStylename&nbsp;(inheritence&nbsp;meegenomen)<br />&nbsp;*/<br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IComponent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;om&nbsp;component&nbsp;om&nbsp;te&nbsp;zetten&nbsp;naar&nbsp;html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Identity&nbsp;of&nbsp;the&nbsp;component<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">identity</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;de&nbsp;stylename&nbsp;terug&nbsp;van&nbsp;deze&nbsp;component,&nbsp;deze&nbsp;kan&nbsp;ook&nbsp;gezet&nbsp;worden&nbsp;door&nbsp;deze&nbsp;method.&nbsp;De&nbsp;stylename&nbsp;bepaalt&nbsp;uiteindelijk&nbsp;welke&nbsp;template&nbsp;ingeladen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Alleen&nbsp;een&nbsp;getter&nbsp;van&nbsp;de&nbsp;volledige&nbsp;stylename,&nbsp;hier&nbsp;worden&nbsp;ook&nbsp;alle&nbsp;classen&nbsp;meegenomen&nbsp;die&nbsp;parents&nbsp;zijn&nbsp;van&nbsp;deze&nbsp;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">fullStylename</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">interfaces/IPersistent.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Interface&nbsp;voor&nbsp;classen&nbsp;die&nbsp;persistent&nbsp;moeten&nbsp;zijn,&nbsp;persistent&nbsp;wil&nbsp;zeggen&nbsp;dat&nbsp;ze&nbsp;opgeslagen&nbsp;kunnen&nbsp;worden&nbsp;en&nbsp;verwijderd<br />&nbsp;*&nbsp;Deze&nbsp;interface&nbsp;word&nbsp;dus&nbsp;door&nbsp;zeer&nbsp;veel&nbsp;classen&nbsp;geimplementeerd&nbsp;:-)<br />&nbsp;*<br />&nbsp;*/<br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IPersistent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">save</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">delete</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">interfaces/ISingleton.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">ISingleton<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;instance&nbsp;van&nbsp;het&nbsp;corresponderende&nbsp;object&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;ISingleton<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">static&nbsp;function&nbsp;</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">interfaces/ITemplate.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Interface&nbsp;voor&nbsp;templates.<br />&nbsp;*&nbsp;Templates&nbsp;princiepe:&nbsp;word&nbsp;vanuit&nbsp;gegaan&nbsp;van&nbsp;bestanden&nbsp;die&nbsp;ingeladen&nbsp;worden,&nbsp;<br />gebufferd&nbsp;worden&nbsp;en&nbsp;hun&nbsp;inhoud&nbsp;word&nbsp;in&nbsp;render()&nbsp;teruggegeven,&nbsp;deze&nbsp;inhoud&nbsp;is&nbsp;<br />dan&nbsp;geparsed&nbsp;(de&nbsp;parser&nbsp;is&nbsp;geen&nbsp;smarty&nbsp;of&nbsp;iets&nbsp;dergelijks&nbsp;maar&nbsp;in&nbsp;dit&nbsp;geval&nbsp;gewoon&nbsp;php&nbsp;zelf).<br />&nbsp;*/<br />//&nbsp;@todo:&nbsp;method&nbsp;toevoegen&nbsp;voor&nbsp;het&nbsp;verwijderen&nbsp;van&nbsp;een&nbsp;variable<br /></span><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">ITemplate<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;word&nbsp;gebruikt&nbsp;om&nbsp;de&nbsp;template&nbsp;naam&nbsp;op&nbsp;te&nbsp;geven&nbsp;en&nbsp;opgehaald&nbsp;te&nbsp;worden&nbsp;indien&nbsp;ingestelt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;word&nbsp;gebruikt&nbsp;om&nbsp;de&nbsp;template&nbsp;te&nbsp;renderen,&nbsp;deze&nbsp;geeft&nbsp;een&nbsp;string&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;true&nbsp;terug&nbsp;in&nbsp;het&nbsp;geval&nbsp;dat&nbsp;de&nbsp;template&nbsp;bestaat&nbsp;of&nbsp;niet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">exists</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;path&nbsp;terug&nbsp;of&nbsp;NULL&nbsp;indien&nbsp;niet&nbsp;bestaat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">path</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voor&nbsp;het&nbsp;toekennen&nbsp;van&nbsp;variablen&nbsp;aan&nbsp;de&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;object&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voor&nbsp;het&nbsp;controleren&nbsp;of&nbsp;een&nbsp;variable&nbsp;bestaat&nbsp;of&nbsp;niet<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">function&nbsp;</span><span style="color: #0000BB">contains</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">);<br />}&nbsp;<br /></span></code></div></div></div>
 <br />
Dit zijn alle interfaces die we tot nu toe nodig zullen hebben.<br />
Als de EventDispatcher gemaakt word zal hier hoogstwaarschijnlijk de IEventDispatcher.php bijkomen.<br />
Bedenk wel even dat alle interfaces nu bij elkaar staan.<br />
Een interface die component/template gericht is hoort natuurlijk niet in dezelfde map te staan als een interface zoals IPersistent<br />
Dit is nu wel even zo gedaan om het simpel te houden.<br />
<br />
<span style="font-weight: bold;">AutoLoader</span><br />
<br />
Het is erg handig om een autoloader te hebben, dit scheelt je een heleboel werk + je kan alles makkelijk her-indelen ALS je het goed aanpakt.<br />
Naar mijn idee is de aanpak die ik nu laat zien erg handig + performance erg goed.<br />
Even voor alle duidelijkheid een autoloader is een method in een class of een functie die include() aanroept wanneer een class of interface niet gevonden is.<br />
Je kunt met spl_autoload_register() defineren welke functie dit voor je moet oplossen. Dit mogen ook meerdere functies zijn.<br />
<br />
Flow voorbeeld:<br />
<br />
<span style="font-weight: bold;">foo.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">Foo<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IFoo<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #DD0000">'foo'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">IFoo.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">interface&nbsp;</span><span style="color: #0000BB">IFoo<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;</span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br />}&nbsp;<br /></span></code></div></div></div>
<br />
<span style="font-weight: bold;">index.php</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br />&#36;foo&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;foo</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">foo</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">?&gt;</span></code></div></div></div>
<br />
De flow:<br />
<br />
1. class Foo word aangemaakt<br />
2. PHP: hee, deze class kan ik niet vinden, is er een autoloader?<br />
3. Ja er is een autoloader, deze word aangeroepen en geeft als argument de class naam mee (in dit geval Foo, dit is een string)<br />
4. De autoloader include het juiste bestand indien er een bestand is voor die class, de class bestaat<br />
5. PHP: hmm, autoloader aangeroepen, bestaat de class nu wel in het geheugen?<br />
6. Zoja: hee, we hebben een interface IFoo, ken ik deze?<br />
7. Zoniet: autoloader nog een keer aanroepen maar nu met IFoo als classname<br />
8. Autoloader: include('IFoo.php'); <br />
9. PHP: hmm, autoloader aangeroepen, bestaat de interface nu wel in het geheugen?<br />
10. Ja, alles bestaat, Foo::__construct() word aangeroepen.<br />
<br />
Het idee is dat je een array met class namen hebt en daaraan is een pad gekoppeld gerekend vanaf de const ROOT_PATH.<br />
Nu word er expres geen file_exists() uitgevoerd in de autoloader ivm performance, je array met class paden MOET dus kloppen en anders triggered php een error.<br />
Nu is het een array die hard gedefineerd word in de code, het zou heel gebruikelijk zijn dat dit soort informatie uit een cache bestand komt.<br />
<br />
<span style="font-weight: bold;">De autoloader class:</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">AutoLoader<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">ISingleton<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;De&nbsp;array&nbsp;met&nbsp;alle&nbsp;class&nbsp;paden&nbsp;erin<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;classPaths</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Instantie&nbsp;van&nbsp;dit&nbsp;object<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;AutoLoader<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;static&nbsp;</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;instantie&nbsp;van&nbsp;de&nbsp;AutoLoader&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;zorgt&nbsp;ervoor&nbsp;dat&nbsp;er&nbsp;altijd&nbsp;maar&nbsp;1&nbsp;instantie&nbsp;aanwezig&nbsp;is&nbsp;van&nbsp;dit&nbsp;object&nbsp;in&nbsp;het&nbsp;geheugen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voor&nbsp;meer&nbsp;uitleg&nbsp;zie:&nbsp;http://en.wikipedia.org/wiki/Singleton_pattern<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;AutoLoader<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;static&nbsp;function&nbsp;</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;instance&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;instance&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">AutoLoader</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Constructor&nbsp;van&nbsp;AutoLoader,&nbsp;standaard&nbsp;waarden&nbsp;instellen&nbsp;van&nbsp;de&nbsp;class.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths&nbsp;</span><span style="color: #007700">=&nbsp;array();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Autoloader&nbsp;class.&nbsp;Deze&nbsp;checked&nbsp;of&nbsp;de&nbsp;class&nbsp;beschreven&nbsp;is&nbsp;in&nbsp;de&nbsp;"cache",&nbsp;zoniet,&nbsp;dan&nbsp;doet&nbsp;die&nbsp;niks&nbsp;en&nbsp;zal&nbsp;php&nbsp;een&nbsp;error&nbsp;gooien&nbsp;dat&nbsp;de&nbsp;class&nbsp;niet&nbsp;gevonden&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Ik&nbsp;gebruik&nbsp;expres&nbsp;geen&nbsp;check&nbsp;met&nbsp;file_exists()&nbsp;omdat&nbsp;dat&nbsp;ten&nbsp;koste&nbsp;gaat&nbsp;van&nbsp;je&nbsp;performance.&nbsp;Kortom,&nbsp;je&nbsp;cache&nbsp;bestand&nbsp;moet&nbsp;kloppen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;static&nbsp;function&nbsp;</span><span style="color: #0000BB">load</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;objectName</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;De&nbsp;reden&nbsp;dat&nbsp;het&nbsp;&#36;objectName&nbsp;heet&nbsp;is&nbsp;omdat&nbsp;het&nbsp;een&nbsp;interface&nbsp;OF&nbsp;een&nbsp;class&nbsp;is&nbsp;die&nbsp;ingeladen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;instance&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;isset(</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;objectName</span><span style="color: #007700">])&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;require_once&nbsp;</span><span style="color: #0000BB">ROOT_PATH&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;instance</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;objectName</span><span style="color: #007700">]&nbsp;.&nbsp;</span><span style="color: #DD0000">'/'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;objectName&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'.php'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;stelt&nbsp;de&nbsp;array&nbsp;met&nbsp;alle&nbsp;class/interface&nbsp;lokaties&nbsp;in.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;array&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">(array&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
De statische functie load() zal het opgevraagde object gaan inladen.<br />
Nu moet PHP dat ook nog weten dus moeten we onze class gaan registreren.<br />
Omdat deze class zelf de autoloader is moeten we dus 2 objecten includen voordat we de class kunnen registreren als autoloader.<br />
Als je wakker bent weet je al welke 2 dat zijn.<br />
<br />
Anyway, tijd om index.php uit te gaan breiden.<br />
<br />
Met een paar tussenregels van het vorige blok het volgende toevoegen:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">//&nbsp;Deze&nbsp;zijn&nbsp;verplicht&nbsp;om&nbsp;de&nbsp;autoloader&nbsp;uberhaubt&nbsp;te&nbsp;kunnen&nbsp;laten&nbsp;werken.<br /></span><span style="color: #007700">include_once&nbsp;</span><span style="color: #DD0000">'interfaces/ISingleton.php'</span><span style="color: #007700">;<br />include_once&nbsp;</span><span style="color: #DD0000">'classes/AutoLoader.php'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;configureer&nbsp;de&nbsp;autoloader<br /></span><span style="color: #0000BB">&#36;autoLoader&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">AutoLoader</span><span style="color: #007700">::</span><span style="color: #0000BB">getInstance</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">//&nbsp;De&nbsp;autoloader&nbsp;moet&nbsp;wel&nbsp;weten&nbsp;waar&nbsp;alle&nbsp;classen&nbsp;en&nbsp;interfaces&nbsp;staan<br />//&nbsp;Nu&nbsp;word&nbsp;dit&nbsp;hard&nbsp;met&nbsp;code&nbsp;aan&nbsp;de&nbsp;autoloader&nbsp;toegekend&nbsp;maar&nbsp;stel&nbsp;je&nbsp;eens&nbsp;een&nbsp;mechanisme&nbsp;voor&nbsp;dat&nbsp;automatisch&nbsp;een&nbsp;cache&nbsp;bestand&nbsp;uitleest<br />//&nbsp;waar&nbsp;dit&nbsp;allemaal&nbsp;in&nbsp;beschreven&nbsp;staat.<br /></span><span style="color: #0000BB">&#36;autoLoader</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">classPaths</span><span style="color: #007700">(array(<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'Component'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/classes'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'Template'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/classes'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'IComponent'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/interfaces'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'IPersistent'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/interfaces'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'ITemplate'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/interfaces'</span><span style="color: #007700">,<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'NewsItem'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/modules/news/classes'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'NewsMessage'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/modules/news/components'</span><span style="color: #007700">,<br />));<br /><br /></span><span style="color: #FF8000">//&nbsp;registreer&nbsp;een&nbsp;auto&nbsp;loader,&nbsp;dit&nbsp;houd&nbsp;in&nbsp;als&nbsp;er&nbsp;een&nbsp;class/interface&nbsp;word&nbsp;aangeroepen&nbsp;dan&nbsp;kijkt&nbsp;de&nbsp;autoloader&nbsp;of&nbsp;die&nbsp;gevonden&nbsp;word<br />//&nbsp;zoniet&nbsp;dan&nbsp;word&nbsp;de&nbsp;method&nbsp;AutoLoader::load()&nbsp;aangeroepen&nbsp;met&nbsp;de&nbsp;classname/interfacename&nbsp;als&nbsp;parameter&nbsp;en&nbsp;kun&nbsp;je&nbsp;het&nbsp;corresponderende&nbsp;bestand&nbsp;includen<br /></span><span style="color: #0000BB">spl_autoload_register</span><span style="color: #007700">(array(</span><span style="color: #DD0000">'AutoLoader'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'load'</span><span style="color: #007700">));&nbsp;<br /></span></code></div></div></div>
<br />
Nu de autoloader eindelijk werkt kunnen we aan de slag gaan met onze uiteindelijke doel.<br />
Tot aan hier was eigenlijk allemaal voorbereidend werk.<br />
<br />
<span style="font-weight: bold;">Template class</span><br />
<br />
Dit is de basis class voor ALLE objecten die zichzelf als html kunnen presenteren, kortom: Component.<br />
Je kunt het ook helemaal herschrijven zolang je maar de interface ITemplate implementeerd.<br />
Op deze manier kan je bijv maken: SmartyTemplate of TemplatePowerTemplate of PHPTemplate.<br />
Het zijn allemaal templates en ze kunnen allemaal hetzelfde alleen werken onder water net iets anders.<br />
<br />
Nu zal ik alleen de PHPTemplate gaan doen want php is eigenlijk al een template parser dus waarom een template parser in een template parser schrijven, we willen toch snelle websites? Weggooien dus die smarty en al die andere meuk, dat is mijn mening.<br />
Anyway, dit is de code voor de template class:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">Template<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">ITemplate<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Naam&nbsp;van&nbsp;de&nbsp;template,&nbsp;hiermee&nbsp;word&nbsp;het&nbsp;pad&nbsp;achterhaalt&nbsp;van&nbsp;het&nbsp;template&nbsp;bestand<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;templateName</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Array&nbsp;met&nbsp;alle&nbsp;geldige&nbsp;templates<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;is&nbsp;eigenlijk&nbsp;te&nbsp;vergelijken&nbsp;met&nbsp;de&nbsp;techniek&nbsp;voor&nbsp;de&nbsp;autoloader&nbsp;alleen&nbsp;dan&nbsp;met&nbsp;templates<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Daarbij&nbsp;komt&nbsp;nog&nbsp;kijken&nbsp;dat&nbsp;deze&nbsp;themas&nbsp;zijn&nbsp;gecategorieseerd&nbsp;zijn&nbsp;op&nbsp;basis&nbsp;van&nbsp;thema<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;in&nbsp;dit&nbsp;geval&nbsp;heb&nbsp;ik&nbsp;even&nbsp;2&nbsp;themas&nbsp;aangemaakt,&nbsp;default&nbsp;+&nbsp;christmas<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;is&nbsp;nu&nbsp;weer&nbsp;hard-coded&nbsp;gedaan&nbsp;maar&nbsp;dit&nbsp;zou&nbsp;weer&nbsp;uit&nbsp;een&nbsp;cache&nbsp;file&nbsp;moeten&nbsp;komen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;2&nbsp;variablen&nbsp;(&#36;valid_templates&nbsp;+&nbsp;&#36;theme)&nbsp;horen&nbsp;hier&nbsp;niet&nbsp;thuis&nbsp;maar&nbsp;is&nbsp;quik&nbsp;&amp;&nbsp;dirty.&nbsp;Hoort&nbsp;in&nbsp;een&nbsp;ThemeManagerData&nbsp;achtige&nbsp;class&nbsp;thuis.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;valid_templates</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Systeem&nbsp;naam&nbsp;van&nbsp;het&nbsp;thema&nbsp;dat&nbsp;deze&nbsp;template&nbsp;moet&nbsp;gebruiken<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Standaard&nbsp;is&nbsp;dit&nbsp;de&nbsp;global&nbsp;template&nbsp;die&nbsp;in&nbsp;de&nbsp;const&nbsp;is&nbsp;gedefineerd&nbsp;(dus&nbsp;SystemEnvironment&nbsp;achtig)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Maar&nbsp;stel&nbsp;nou&nbsp;dat&nbsp;je&nbsp;1&nbsp;template&nbsp;in&nbsp;kerst&nbsp;sfeer&nbsp;wil&nbsp;kan&nbsp;je&nbsp;dit&nbsp;dus&nbsp;als&nbsp;nog&nbsp;overriden&nbsp;indien&nbsp;je&nbsp;een&nbsp;method&nbsp;maakt&nbsp;om&nbsp;deze&nbsp;variable&nbsp;te&nbsp;wijzigen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;theme</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Array&nbsp;met&nbsp;alle&nbsp;variablen&nbsp;die&nbsp;in&nbsp;deze&nbsp;template&nbsp;gebruikt&nbsp;kunnen&nbsp;worden<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;array<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;</span><span style="color: #0000BB">&#36;vars</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;templateName</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Template&nbsp;naam&nbsp;instellen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;templateName</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Variablen&nbsp;standaard&nbsp;waardes&nbsp;geven<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;array();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">THEME</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;zie&nbsp;property&nbsp;definitie&nbsp;voor&nbsp;commentaar/uitleg<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates&nbsp;</span><span style="color: #007700">=&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'default'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'name'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Standaard&nbsp;thema'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'templates'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'NewsMessage'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'/news/show.phtml'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;),<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'christmas'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'name'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #DD0000">'Kerst&nbsp;thema'</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'templates'&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;array()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;variable&nbsp;waarde&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;De&nbsp;.phtml&nbsp;bestanden&nbsp;die&nbsp;kunnen&nbsp;deze&nbsp;"magic"&nbsp;method&nbsp;benaderen,&nbsp;zie:&nbsp;http://php.net/manual/en/language.oop5.magic.php<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Je&nbsp;moet&nbsp;het&nbsp;eigenlijk&nbsp;zo&nbsp;zien,&nbsp;op&nbsp;het&nbsp;moment&nbsp;dat&nbsp;je&nbsp;include()&nbsp;aanroept&nbsp;binnen&nbsp;in&nbsp;een&nbsp;class&nbsp;dan&nbsp;heeft&nbsp;dat&nbsp;bestand&nbsp;toegang&nbsp;tot&nbsp;alle&nbsp;methodes&nbsp;van&nbsp;die&nbsp;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;object<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">__get</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">contains</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">];<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;om&nbsp;waardes&nbsp;toe&nbsp;te&nbsp;kennen&nbsp;aan&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;object&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Controleert&nbsp;of&nbsp;opgegeven&nbsp;key&nbsp;bestaat&nbsp;in&nbsp;lijst&nbsp;met&nbsp;variablen&nbsp;voor&nbsp;deze&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;key<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">contains</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;isset(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">vars</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;key</span><span style="color: #007700">]);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Template&nbsp;naam&nbsp;setter/getter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;complete&nbsp;path&nbsp;terug&nbsp;van&nbsp;de&nbsp;template.&nbsp;Indien&nbsp;de&nbsp;template&nbsp;niet&nbsp;bestaat&nbsp;dan&nbsp;word&nbsp;NULL&nbsp;teruggeven<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">path</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;!</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exists</span><span style="color: #007700">()&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">null</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">ROOT_PATH&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">THEMES_FOLDER&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'/'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme</span><span style="color: #007700">][</span><span style="color: #DD0000">'templates'</span><span style="color: #007700">][</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">];<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Controleert&nbsp;of&nbsp;een&nbsp;template&nbsp;bestaat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;boolean<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">exists</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;nu&nbsp;word&nbsp;dit&nbsp;even&nbsp;quik&nbsp;&amp;&nbsp;dirty&nbsp;gedaan&nbsp;maar&nbsp;misschien&nbsp;kan&nbsp;je&nbsp;zelf&nbsp;een&nbsp;class&nbsp;bedenken&nbsp;die&nbsp;dezelfde&nbsp;functionaliteit&nbsp;gaat&nbsp;bieden&nbsp;als&nbsp;wat&nbsp;hieronder&nbsp;gebeurt.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Hint:&nbsp;return&nbsp;ThemeManagerData::getInstance()-&gt;exists(&#36;this-&gt;templateName);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme</span><span style="color: #007700">])&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;&nbsp;</span><span style="color: #FF8000">//&nbsp;thema&nbsp;bestaat&nbsp;niet&nbsp;eens<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(&nbsp;!isset(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">valid_templates</span><span style="color: #007700">[</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">theme</span><span style="color: #007700">][</span><span style="color: #DD0000">'templates'</span><span style="color: #007700">][</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">templateName</span><span style="color: #007700">])&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;alle&nbsp;checks&nbsp;gepasseerd,&nbsp;template&nbsp;bestaat<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Rendered&nbsp;de&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;string&nbsp;versie&nbsp;van&nbsp;deze&nbsp;template&nbsp;terug.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Nu&nbsp;word&nbsp;er&nbsp;vanuit&nbsp;gegaan&nbsp;dat&nbsp;er&nbsp;PHP&nbsp;templates&nbsp;zijn.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Stel&nbsp;dat&nbsp;je&nbsp;ook&nbsp;smarty&nbsp;templates,&nbsp;templatepower&nbsp;templates&nbsp;etc&nbsp;wilt&nbsp;kunnen&nbsp;parsen&nbsp;google&nbsp;dan&nbsp;eens&nbsp;op&nbsp;het&nbsp;Adapter&nbsp;Pattern&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;@todo:&nbsp;hier&nbsp;kan&nbsp;nog&nbsp;include&nbsp;path&nbsp;opgeslagen&nbsp;worden.&nbsp;Pad&nbsp;van&nbsp;thema&nbsp;in&nbsp;het&nbsp;include&nbsp;path&nbsp;gezet&nbsp;worden,&nbsp;daarna&nbsp;als&nbsp;de&nbsp;template&nbsp;is&nbsp;ingeladen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;kan&nbsp;het&nbsp;oude&nbsp;include&nbsp;path&nbsp;weer&nbsp;teruggezet&nbsp;worden.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;op&nbsp;deze&nbsp;manier&nbsp;kan&nbsp;de&nbsp;template&nbsp;ook&nbsp;weer&nbsp;makkelijk&nbsp;andere&nbsp;templates&nbsp;inladen&nbsp;zonder&nbsp;moeilijk&nbsp;te&nbsp;doen&nbsp;met&nbsp;../../messages/info.phtml&nbsp;maar&nbsp;gewoon:&nbsp;messages/info.phtml&nbsp;:-)<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;start&nbsp;bufferen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ob_start</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;include/render&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">include_once(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">path</span><span style="color: #007700">());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;vang&nbsp;de&nbsp;buffer&nbsp;inhoud&nbsp;op<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;content&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">ob_get_contents</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;veeg&nbsp;de&nbsp;buffer&nbsp;schoon<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">ob_end_clean</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;geef&nbsp;de&nbsp;geparsde&nbsp;template&nbsp;inhoud&nbsp;terug.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">&#36;content</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Nu de template class is gemaakt kunnen we de Component class gaan maken!<br />
Stel je wil de Template class al even in actie zien kan je een template aanmaken en toevoegen aan de array met geldige templates en vervolgens iets in de zin van:<br />
<br />
<span style="font-weight: bold;">index.php, onder alle huidige code plaatsen.<br />
note: is alleen voor testen en lezers die willen proberen. Gewoon weer weghalen als je klaar bent.</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&#36;template&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Template</span><span style="color: #007700">(</span><span style="color: #DD0000">'Homepage'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'eenVariable'</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'Een&nbsp;waarde...'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'uitgerekend'</span><span style="color: #007700">,&nbsp;(</span><span style="color: #0000BB">5</span><span style="color: #007700">*</span><span style="color: #0000BB">5</span><span style="color: #007700">));<br /><br />echo&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">render</span><span style="color: #007700">();&nbsp;<br /></span></code></div></div></div>
<br />
Vervolgens maak je een homepage.phtml aan of hoe je het bestand ook noemt in je valid_templates array en kan je dit invullen:<br />
<br />
<span style="font-weight: bold;">homepage.phtml</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">Hoi&nbsp;dit&nbsp;is&nbsp;gewoon&nbsp;html<br /><br /></span><span style="color: #007700">&lt;?</span><span style="color: #0000BB">php<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'En&nbsp;dit&nbsp;is&nbsp;een&nbsp;variable:&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">eenVariable&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;En&nbsp;dit&nbsp;is&nbsp;uitgerekend:&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">uitgerekend</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></code></div></div></div>
<br />
<span style="font-weight: bold;">Component</span><br />
<br />
Deze class zal heel erg veel gebruikt worden voor bijv. het weergeven van nieuws items, forum topics, agenda item, form elementen etc etc etc<br />
Het is een abstracte class, dit houd in dat deze functionaliteit bevat en nooit zelfstaand aangemaakt kan worden, deze type classen zullen 'altijd' ge-extend moeten worden.<br />
De abstracte class wat in dit geval Component is kan de subclass ook verplichten methodes te implementeren.<br />
De kracht van zoon class is dus dat deze functionaliteit bevat maar ook verplichtingen van een interface kan stellen.<br />
<br />
De component class is eigenlijk te vergelijken met de Template class behalve dat deze een simpele logica heeft<br />
Nog een bijzonderheid aan deze class is dat wanneer er geen template beschikbaar voor is dat deze een baseHtml() method heeft die<br />
een minimale hoeveelheid html terug geeft waar ook niet rekening word gehouden met het gekozen thema.<br />
<br />
Zie hier de Component class:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">abstract&nbsp;class&nbsp;</span><span style="color: #0000BB">Component<br /></span><span style="color: #FF8000">//&nbsp;@todo:&nbsp;extends&nbsp;EventDispatcher&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;zoals&nbsp;je&nbsp;ziet,&nbsp;hier&nbsp;heb&nbsp;je&nbsp;de&nbsp;EventDispatcher,&nbsp;het&nbsp;zou&nbsp;erg&nbsp;mooi&nbsp;zijn&nbsp;als&nbsp;deze&nbsp;eenmaal&nbsp;ge-implementeerd&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;stel&nbsp;je&nbsp;eens&nbsp;voor&nbsp;dat&nbsp;je&nbsp;een&nbsp;UsernameInputBox&nbsp;hebt&nbsp;(extend&nbsp;InputBox&nbsp;-&gt;&nbsp;FormElement&nbsp;-&gt;&nbsp;Component)&nbsp;en&nbsp;een&nbsp;event&nbsp;dispatched:&nbsp;Event::CHANGE<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Mogelijkheden&nbsp;zijn&nbsp;eindeloos..<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IComponent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Variable&nbsp;die&nbsp;gebruikt&nbsp;word&nbsp;zodat&nbsp;we&nbsp;ALTIJD&nbsp;een&nbsp;uniek&nbsp;ID&nbsp;hebben&nbsp;voor&nbsp;de&nbsp;component<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;int<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;static&nbsp;</span><span style="color: #0000BB">&#36;uniqueId</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Dit&nbsp;is&nbsp;het&nbsp;id&nbsp;van&nbsp;dit&nbsp;component,&nbsp;deze&nbsp;instantie.&nbsp;Bovenstaande&nbsp;uniqueId&nbsp;is&nbsp;per&nbsp;keer&nbsp;dat&nbsp;er&nbsp;een&nbsp;Component&nbsp;word&nbsp;aangemaakt&nbsp;met&nbsp;1&nbsp;verhoogd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;id</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Stijlnaam,&nbsp;deze&nbsp;wordt&nbsp;later&nbsp;gebruikt&nbsp;voor&nbsp;juiste&nbsp;template&nbsp;inladen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;styleName</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">__construct</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;uniek&nbsp;id&nbsp;toekennen&nbsp;aan&nbsp;onszelf&nbsp;+&nbsp;verhoog&nbsp;het&nbsp;uniqueId&nbsp;op&nbsp;globaal&nbsp;niveau&nbsp;met&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">&#36;uniqueId</span><span style="color: #007700">++;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;stel&nbsp;onze&nbsp;STANDAARD&nbsp;stylename&nbsp;in,&nbsp;deze&nbsp;kan&nbsp;uiteraard&nbsp;nog&nbsp;veranderd&nbsp;worden<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;als&nbsp;mogelijkheid&nbsp;je&nbsp;component&nbsp;te&nbsp;omschrijven<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Hier&nbsp;kan&nbsp;je&nbsp;bijv&nbsp;aan&nbsp;de&nbsp;front-end&nbsp;developer&nbsp;duidelijk&nbsp;maken&nbsp;welke&nbsp;variablen&nbsp;hij&nbsp;kan&nbsp;gebruiken&nbsp;in&nbsp;de&nbsp;component&nbsp;indien&nbsp;je&nbsp;een&nbsp;debug&nbsp;modus&nbsp;maakt&nbsp;voor&nbsp;components<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">description</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;aangeroepen&nbsp;net&nbsp;voordat&nbsp;er&nbsp;ge-RENDER-ed&nbsp;gaat&nbsp;worden&nbsp;zodat&nbsp;alle&nbsp;variablen&nbsp;klaar&nbsp;gezet&nbsp;kunnen&nbsp;worden&nbsp;en&nbsp;geen&nbsp;dubbele&nbsp;code&nbsp;krijgt&nbsp;of&nbsp;code&nbsp;die&nbsp;2x&nbsp;aangeroepen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">preBuild</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;aangeroepen&nbsp;indien&nbsp;er&nbsp;geen&nbsp;template&nbsp;voor&nbsp;deze&nbsp;component&nbsp;beschikbaar&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;In&nbsp;dat&nbsp;geval&nbsp;kan&nbsp;de&nbsp;component&nbsp;een&nbsp;simpel&nbsp;stuk&nbsp;html&nbsp;teruggeven&nbsp;waar&nbsp;hij&nbsp;minimaal&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Is&nbsp;bijv.&nbsp;handig&nbsp;voor&nbsp;formulier&nbsp;elementen&nbsp;omdat&nbsp;je&nbsp;deze&nbsp;bijna&nbsp;nooit&nbsp;een&nbsp;echte&nbsp;template&nbsp;zal&nbsp;geven,&nbsp;baseHtml&nbsp;+&nbsp;css&nbsp;voldoet&nbsp;99%&nbsp;van&nbsp;de&nbsp;tijd<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">baseHtml</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;aangeroepen&nbsp;indien&nbsp;er&nbsp;WEL&nbsp;een&nbsp;template&nbsp;beschikbaar&nbsp;is,&nbsp;hier&nbsp;krijg&nbsp;je&nbsp;de&nbsp;mogelijkheid&nbsp;om&nbsp;de&nbsp;variablen&nbsp;toe&nbsp;te&nbsp;kennen&nbsp;aan&nbsp;je&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;Template&nbsp;&#36;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">abstract&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">prepareTemplate</span><span style="color: #007700">(</span><span style="color: #0000BB">Template&nbsp;&#36;template</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;de&nbsp;identiteit&nbsp;van&nbsp;deze&nbsp;component&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;is&nbsp;altijd&nbsp;uniek,&nbsp;dit&nbsp;is&nbsp;bijv.&nbsp;handig&nbsp;voor&nbsp;een&nbsp;element&nbsp;aanroepen&nbsp;in&nbsp;javascript.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">identity</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">get_class</span><span style="color: #007700">(</span><span style="color: #0000BB">__CLASS__</span><span style="color: #007700">)&nbsp;.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Word&nbsp;gebruikt&nbsp;om&nbsp;component&nbsp;om&nbsp;te&nbsp;zetten&nbsp;naar&nbsp;html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">render</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/*&nbsp;@todo:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;je&nbsp;kunt&nbsp;een&nbsp;check&nbsp;maken&nbsp;of&nbsp;we&nbsp;in&nbsp;component&nbsp;debug&nbsp;modus&nbsp;draaien<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zoja&nbsp;dan&nbsp;geef&nbsp;je&nbsp;enkel&nbsp;de&nbsp;description()&nbsp;terug&nbsp;als&nbsp;waarde<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;in_array(&#36;this-&gt;identity(),&nbsp;self::&#36;debugComponents)&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;'&lt;div&nbsp;class="ComponentDebugger"&gt;'&nbsp;.&nbsp;&#36;this-&gt;description()&nbsp;.&nbsp;'&lt;/div&gt;';<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Bereid&nbsp;alles&nbsp;voor<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">preBuild</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Probeer&nbsp;een&nbsp;template&nbsp;te&nbsp;laden&nbsp;voor&nbsp;dit&nbsp;component<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Template</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;!</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">exists</span><span style="color: #007700">()&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;er&nbsp;is&nbsp;geen&nbsp;template&nbsp;dus&nbsp;gebruik&nbsp;de&nbsp;basis&nbsp;html<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;html&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">baseHtml</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Template&nbsp;bestaat,&nbsp;laat&nbsp;het&nbsp;component&nbsp;deze&nbsp;invullen.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">prepareTemplate</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;render&nbsp;template<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;html&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">render</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;geef&nbsp;de&nbsp;ge-genereerde&nbsp;html&nbsp;terug<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">return&nbsp;</span><span style="color: #0000BB">&#36;html</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Geeft&nbsp;de&nbsp;stylename&nbsp;terug&nbsp;van&nbsp;het&nbsp;component,&nbsp;deze&nbsp;kan&nbsp;ook&nbsp;gezet&nbsp;worden&nbsp;door&nbsp;deze&nbsp;method.&nbsp;De&nbsp;stylename&nbsp;bepaalt&nbsp;uiteindelijk&nbsp;welke&nbsp;template&nbsp;ingeladen&nbsp;word.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;string&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Alleen&nbsp;een&nbsp;getter&nbsp;van&nbsp;de&nbsp;volledige&nbsp;stylename,&nbsp;hier&nbsp;worden&nbsp;ook&nbsp;alle&nbsp;classen&nbsp;meegenomen&nbsp;die&nbsp;parents&nbsp;zijn&nbsp;van&nbsp;deze&nbsp;class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Deze&nbsp;kan&nbsp;je&nbsp;weer&nbsp;invullen&nbsp;als&nbsp;je&nbsp;bijv.&nbsp;een&nbsp;&lt;input&gt;&nbsp;hebt&nbsp;die&nbsp;een&nbsp;component&nbsp;is.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Voorbeeld:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&lt;input&nbsp;....&nbsp;class="IComponent&nbsp;Component&nbsp;IFormElement&nbsp;FormElement&nbsp;InputBox&nbsp;username"&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Uiteraard&nbsp;kan&nbsp;je&nbsp;de&nbsp;interfaces&nbsp;nog&nbsp;eruit&nbsp;filteren&nbsp;bij&nbsp;het&nbsp;invullen&nbsp;van&nbsp;de&nbsp;fullStyleName()<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;string<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">fullStylename</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;parents&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">class_parents</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">);&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;haal&nbsp;alle&nbsp;sub&nbsp;classen&nbsp;op<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">foreach(</span><span style="color: #0000BB">&#36;parents&nbsp;</span><span style="color: #007700">AS&nbsp;</span><span style="color: #0000BB">&#36;parent</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;parent&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;string</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ident</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">ident&nbsp;</span><span style="color: #007700">!=&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;string&nbsp;</span><span style="color: #007700">.=&nbsp;</span><span style="color: #DD0000">'&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">styleName</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;string</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit was het Component, hier kunnen we (nog) niks mee want we hebben nog geen class die deze gebruikt.<br />
Eerst de Data class voor nieuws maken, hier geef ik niet heel erg veel uitleg bij want deze is vrij basic.<br />
<br />
<span style="font-weight: bold;">Data class voor news</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">/**<br />&nbsp;*&nbsp;Class&nbsp;voor&nbsp;nieuws&nbsp;items<br />&nbsp;*&nbsp;Deze&nbsp;class&nbsp;is&nbsp;de&nbsp;data-laag,&nbsp;deze&nbsp;heeft&nbsp;niets&nbsp;te&nbsp;maken&nbsp;hoe&nbsp;deze&nbsp;aan&nbsp;de&nbsp;bezoeker&nbsp;gepresenteerd&nbsp;word<br />&nbsp;*&nbsp;Hij&nbsp;bevat&nbsp;enkel&nbsp;data&nbsp;en&nbsp;functionaliteit&nbsp;om&nbsp;opgeslagen&nbsp;te&nbsp;worden&nbsp;(IPersistent)<br />&nbsp;*<br />&nbsp;*/<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">NewsItem<br /></span><span style="color: #007700">implements&nbsp;</span><span style="color: #0000BB">IPersistent<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;id</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;title</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;</span><span style="color: #0000BB">&#36;author</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">##&nbsp;IPersistent&nbsp;##<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">save</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">insert</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">update</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">insert</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;hier&nbsp;query&nbsp;om&nbsp;je&nbsp;nieuws&nbsp;item&nbsp;in&nbsp;de&nbsp;database&nbsp;te&nbsp;stoppen,&nbsp;of&nbsp;in&nbsp;xml..&nbsp;of&nbsp;in&nbsp;tekst&nbsp;bestand&nbsp;whatever&nbsp;you&nbsp;would&nbsp;like<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">update</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;hier&nbsp;je&nbsp;ding&nbsp;om&nbsp;het&nbsp;nieuws&nbsp;item&nbsp;te&nbsp;updaten<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">delete</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;doe&nbsp;hier&nbsp;je&nbsp;ding&nbsp;om&nbsp;het&nbsp;nieuws&nbsp;item&nbsp;te&nbsp;verwijderen&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">##&nbsp;END&nbsp;IPersistent&nbsp;##<br /><br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;##&nbsp;GETTERS&nbsp;/&nbsp;SETTERS&nbsp;##<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">id</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">message</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;</span><span style="color: #0000BB">author</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)&nbsp;</span><span style="color: #FF8000">//&nbsp;nu&nbsp;is&nbsp;de&nbsp;&#36;value&nbsp;een&nbsp;string,&nbsp;had&nbsp;eigenlijk&nbsp;een&nbsp;User&nbsp;object&nbsp;moeten&nbsp;zijn....<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit is duidelijk data. Hier word helemaal niks met display of output of wat dan ook gedaan.<br />
Maar het juiste component zal de structuur van deze data snappen en kan deze dus gebruiken voor weergave genaamd NewsMessage.<br />
<br />
<span style="font-weight: bold;">News component schrijven</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">NewsMessage<br /></span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">Component<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Het&nbsp;item&nbsp;dat&nbsp;getoond&nbsp;moet&nbsp;worden,&nbsp;dit&nbsp;is&nbsp;een&nbsp;class&nbsp;NewsItem.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;De&nbsp;bedoeling&nbsp;hier&nbsp;van&nbsp;is&nbsp;dat&nbsp;je&nbsp;de&nbsp;laag&nbsp;data&nbsp;onderscheid&nbsp;van&nbsp;de&nbsp;laag&nbsp;met&nbsp;display.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Kortom:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;NewsMessage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;Component:&nbsp;DisplayObject,&nbsp;visueel.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;NewsItem&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;Puur&nbsp;Data&nbsp;&amp;&nbsp;Functionaliteit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@var&nbsp;NewsItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">private&nbsp;</span><span style="color: #0000BB">&#36;source</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">baseHtml&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #DD0000">'NewsMessage&nbsp;base&nbsp;html'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">description&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #DD0000">'Beschrijving&nbsp;van&nbsp;NewsMessage&nbsp;component.&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Beschikbare&nbsp;variablen:<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;id&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;title&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;message&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-&nbsp;&#36;this-&gt;author&lt;br&nbsp;/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">preBuild&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;niet&nbsp;nodig&nbsp;hier,&nbsp;bij&nbsp;deze&nbsp;component&nbsp;word&nbsp;het&nbsp;nieuws&nbsp;item&nbsp;van&nbsp;buiten&nbsp;af&nbsp;ingegeven.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;word&nbsp;ingeladen&nbsp;bij&nbsp;het&nbsp;weergeven&nbsp;is&nbsp;dit&nbsp;de&nbsp;plek&nbsp;om&nbsp;het&nbsp;commentaar&nbsp;in&nbsp;te&nbsp;laden&nbsp;en&nbsp;intern&nbsp;in&nbsp;deze&nbsp;class&nbsp;op&nbsp;te&nbsp;slaan.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Hier&nbsp;kunnen&nbsp;kort&nbsp;gezegd&nbsp;uitzonderingen&nbsp;gemaakt&nbsp;worden&nbsp;en&nbsp;dingen&nbsp;inladen&nbsp;die&nbsp;standaard&nbsp;niet&nbsp;worden&nbsp;ondersteund&nbsp;door&nbsp;het&nbsp;data&nbsp;object<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;dan&nbsp;vervolgens&nbsp;bij&nbsp;prepareTemplate&nbsp;&amp;&nbsp;baseHtml()&nbsp;zal&nbsp;die&nbsp;klaar&nbsp;staan&nbsp;om&nbsp;weergegeven&nbsp;worden.<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;of&nbsp;nog&nbsp;een&nbsp;ander&nbsp;voorbeeld,&nbsp;stel&nbsp;dat&nbsp;je&nbsp;enkel&nbsp;een&nbsp;id&nbsp;binnen&nbsp;krijgt&nbsp;van&nbsp;het&nbsp;nieuws&nbsp;item,&nbsp;dan&nbsp;kan&nbsp;je&nbsp;nu&nbsp;dus&nbsp;dat&nbsp;nieuws&nbsp;item&nbsp;ophalen<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;en&nbsp;het&nbsp;object&nbsp;invullen.&nbsp;nu&nbsp;heb&nbsp;ik&nbsp;het&nbsp;wel&nbsp;over&nbsp;een&nbsp;dirty&nbsp;scenario&nbsp;want&nbsp;dan&nbsp;hou&nbsp;je&nbsp;je&nbsp;niet&nbsp;meer&nbsp;aan&nbsp;de&nbsp;data/display&nbsp;laag&nbsp;gescheiden&nbsp;regel.<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">prepareTemplate&nbsp;</span><span style="color: #007700">(</span><span style="color: #0000BB">Template&nbsp;&#36;template</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;Vertel&nbsp;de&nbsp;template&nbsp;de&nbsp;waardes&nbsp;van&nbsp;onze&nbsp;bron&nbsp;(NewsItem)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'id'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'title'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'message'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">());&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;ALS&nbsp;het&nbsp;nodig&nbsp;is&nbsp;doe&nbsp;je&nbsp;HIER&nbsp;de&nbsp;htmlentities()&nbsp;check<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;template</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">assign</span><span style="color: #007700">(</span><span style="color: #DD0000">'author'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Stelt&nbsp;de&nbsp;source&nbsp;van&nbsp;de&nbsp;component&nbsp;in<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;NewsItem&nbsp;&#36;value<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;NewsItem<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;function&nbsp;</span><span style="color: #0000BB">source</span><span style="color: #007700">(</span><span style="color: #0000BB">NewsItem&nbsp;&#36;value</span><span style="color: #007700">=</span><span style="color: #0000BB">null</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;</span><span style="color: #0000BB">&#36;value&nbsp;</span><span style="color: #007700">!==&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">&#36;value</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit is de component.<br />
Zoals je ziet is het eigenlijk heel erg simpel om nu componenten erbij te maken.<br />
Je maakt een nieuwe class, je extend Component class, je vult 4 functies in:<br />
<br />
- baseHtml()<br />
- description()<br />
- preBuild()<br />
- prepareTemplate()<br />
<br />
En je hebt een volledig component.<br />
Daarnaast kan je natuurlijk nog honderden functionaliteiten toevoegen.<br />
Bedenk je eens dat je NewsMessage gaat extenden met een class in de zin van PagedNewsMessage bijv.<br />
Zoon nieuwsbericht die ondersteund opeens pagina nummering... Is maar een voorbeeld.<br />
<br />
Nu zijn we bijna klaar! Template invullen en test code in index.php en draaien!<br />
<br />
<span style="font-weight: bold;">Template invullen</span><br />
<br />
Vul in de template het volgende in:<br />
<br />
<span style="font-weight: bold;">themes/default/news/show.phtml</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #007700">&lt;</span><span style="color: #0000BB">table</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">tr</span><span style="color: #007700">&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;</span><span style="color: #0000BB">th&nbsp;colspan</span><span style="color: #007700">=</span><span style="color: #DD0000">"2"</span><span style="color: #007700">&gt;&lt;?</span><span style="color: #0000BB">php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title?&gt;</span>&lt;/th&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;Auteur&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&gt;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author?&gt;</span>&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;tr&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;td&nbsp;colspan="2"&gt;<span style="color: #0000BB">&lt;?php&nbsp;</span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message?&gt;</span>&lt;/td&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/tr&gt;<br />&lt;/table&gt;&nbsp;<br /></code></div></div></div>
<br />
Lijkt me zeer voor de hand liggend.<br />
Het enigste weetje hiervan is dat je weet in welke context je zit met &#36;this<br />
3x raden, &#36;this = de instantie van Template!<br />
Dus als je &#36;this-&gt;author aanroept dan roep je eigenlijk Template::__get() aan.<br />
In de parameter van Template::__get() word dus author meegegeven.<br />
<br />
Voila. Je hebt een componenten systeem.<br />
Nu nog testen dus.<br />
<br />
<span style="font-weight: bold;">Testen!</span><br />
<br />
Voeg de volgende code toe aan index.php:<br />
<br />
<span style="font-weight: bold;">index.php</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #FF8000">//&nbsp;Nu&nbsp;maak&nbsp;ik&nbsp;hier&nbsp;een&nbsp;test&nbsp;object&nbsp;aan,&nbsp;je&nbsp;moet&nbsp;je&nbsp;voorstellen&nbsp;dat&nbsp;deze&nbsp;normaal&nbsp;uiteraard&nbsp;ingeladen&nbsp;word&nbsp;vanuit&nbsp;de&nbsp;database&nbsp;of&nbsp;iets&nbsp;dergelijks.<br />//&nbsp;Een&nbsp;NewsItem&nbsp;is&nbsp;puur&nbsp;data<br /></span><span style="color: #0000BB">&#36;item&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsItem</span><span style="color: #007700">();<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">id</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">(</span><span style="color: #DD0000">'Chris'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #DD0000">'Het&nbsp;nieuws&nbsp;van&nbsp;de&nbsp;dag!'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">(</span><span style="color: #DD0000">'Het&nbsp;bericht'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;Dan&nbsp;maak&nbsp;ik&nbsp;nu&nbsp;de&nbsp;component&nbsp;aan,&nbsp;dit&nbsp;is&nbsp;het&nbsp;visuele&nbsp;object,&nbsp;deze&nbsp;snapt&nbsp;weer&nbsp;de&nbsp;data&nbsp;en&nbsp;weet&nbsp;hoe&nbsp;die&nbsp;het&nbsp;kan&nbsp;weergeven<br /></span><span style="color: #0000BB">&#36;message&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsMessage</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">//&nbsp;het&nbsp;visuele&nbsp;object&nbsp;weet&nbsp;hoe&nbsp;die&nbsp;het&nbsp;moet&nbsp;weergeven&nbsp;maar&nbsp;moet&nbsp;ook&nbsp;nog&nbsp;weten&nbsp;WAT&nbsp;die&nbsp;moet&nbsp;gaan&nbsp;weergeven&nbsp;dus&nbsp;stellen&nbsp;we&nbsp;nu&nbsp;de&nbsp;bron&nbsp;in<br /></span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">source</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;en&nbsp;uiteindelijk&nbsp;als&nbsp;het&nbsp;component&nbsp;is&nbsp;ingevuld&nbsp;kan&nbsp;die&nbsp;gaan&nbsp;renderen<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">render</span><span style="color: #007700">();&nbsp;<br /></span></code></div></div></div>
<br />
Je kunt nu gaan testen door alles in een webfolder te plaatsen op je (lokale) webserver en index.php aanroepen.<br />
<br />
<span style="font-weight: bold;">Einde</span><br />
<br />
Dit is het einde van mijn artikel.<br />
Het was een behoorlijke klus maar het is af en hoop iedereen hier veel van geleerd heeft.<br />
<br />
Dingen die je nog zou kunnen gaan doen:<br />
<br />
- EventDispatcher schrijven en de Component class die laten extenden<br />
- Form module schrijven (Form components + Form logica etc etc)<br />
- Nadat je de EventDispatcher hebt geschreven een ORM schrijven die aangesloten is op het template systeem en zo lijsten weergeven, bij elke next() van je db ORM word event gedispatched, Template gaat meteen parsen, zo heb je nooit dubbele loops bij weergeven van lijsten.<br />
<br />
Check de attachment om het gehele artikel in zijn werking te zien.<br />
Daarnaast zijn ook nog een aantal extra's verstopt in de attachment die ik wou gaan behandelen maar was toch erg veel schrijfwerk, voor een volgende keer en de gene die het lezen hebben alvast een voorproefje.<br />
<br />
Vragen of opmerkingen? Gewoon doen!<br />
<br />
Chris.<br />
<br />
<br />
<span style="font-weight: bold;">Extra</span><br />
<br />
Om je vast een klein beetje op weg te helpen hoe de forms in elkaar zouden kunnen gaan zitten dan is hier een voorbeeld:<br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP-code:<br />
</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">NewsItemForm<br /></span><span style="color: #007700">extends&nbsp;</span><span style="color: #0000BB">Form<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;title</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;author</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;message</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;category</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;</span><span style="color: #0000BB">&#36;item</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;function&nbsp;</span><span style="color: #0000BB">createChildren&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;invoerveld&nbsp;voor&nbsp;titel&nbsp;aanmaken&nbsp;en&nbsp;toevoegen&nbsp;aan&nbsp;formulier<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">InputBox</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">(</span><span style="color: #DD0000">'title'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Titel'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">InputBox</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">(</span><span style="color: #DD0000">'author'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Auteur'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;NewsCategorySelector&nbsp;extends&nbsp;SelectBox&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsCategorySelector</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Ouder&nbsp;categorie'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">TextEditor</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">name</span><span style="color: #007700">(</span><span style="color: #DD0000">'message'</span><span style="color: #007700">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">label</span><span style="color: #007700">(new&nbsp;</span><span style="color: #0000BB">Label</span><span style="color: #007700">(</span><span style="color: #DD0000">'Bericht'</span><span style="color: #007700">));<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">add</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;je&nbsp;kunt&nbsp;je&nbsp;nu&nbsp;voorstellen,&nbsp;je&nbsp;voegt&nbsp;een&nbsp;InputBox&nbsp;toe.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Maar&nbsp;je&nbsp;kunt&nbsp;je&nbsp;ook&nbsp;zo&nbsp;voorstellen,&nbsp;ik&nbsp;voeg&nbsp;een&nbsp;IFormElement/IComponent&nbsp;toe,&nbsp;kortom&nbsp;je&nbsp;kunt&nbsp;ALLLESSS&nbsp;toevoegen&nbsp;aan&nbsp;je&nbsp;form<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;zolang&nbsp;het&nbsp;maar&nbsp;de&nbsp;interface&nbsp;IComponent&nbsp;implementeert.&nbsp;Dat&nbsp;is&nbsp;pas&nbsp;Power&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">/**<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;Method&nbsp;word&nbsp;alleen&nbsp;aangeroepen&nbsp;als&nbsp;alle&nbsp;velden&nbsp;gevalideerd&nbsp;zijn&nbsp;dus&nbsp;hierin&nbsp;hoeft&nbsp;niks&nbsp;meer&nbsp;gechecked&nbsp;te&nbsp;worden&nbsp;:-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;void<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">protected&nbsp;function&nbsp;</span><span style="color: #0000BB">handleForm&nbsp;</span><span style="color: #007700">()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;indien&nbsp;dit&nbsp;formulier&nbsp;gebruikt&nbsp;word&nbsp;voor&nbsp;het&nbsp;aanmaken&nbsp;dan&nbsp;is&nbsp;&#36;this-&gt;item&nbsp;null&nbsp;en&nbsp;word&nbsp;dat&nbsp;object&nbsp;dus&nbsp;ook&nbsp;aangemaakt<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;indien&nbsp;dit&nbsp;formulier&nbsp;gebruikt&nbsp;word&nbsp;voor&nbsp;het&nbsp;wijzigen&nbsp;dan&nbsp;is&nbsp;&#36;this-&gt;item&nbsp;een&nbsp;NewsItem&nbsp;object&nbsp;ingesteld&nbsp;van&nbsp;buitenaf<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;In&nbsp;NewsItem::save()&nbsp;word&nbsp;iets&nbsp;gedaan&nbsp;in&nbsp;de&nbsp;zin&nbsp;van:&nbsp;if(&#36;this-&gt;id&nbsp;===&nbsp;null&nbsp;)&nbsp;{&nbsp;&#36;this-&gt;_insert();&nbsp;}&nbsp;else&nbsp;{&nbsp;&#36;this-&gt;update();&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">if(&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item&nbsp;</span><span style="color: #007700">===&nbsp;</span><span style="color: #0000BB">null&nbsp;</span><span style="color: #007700">)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">NewsItem</span><span style="color: #007700">();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">title</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">author</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">category</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;value()&nbsp;returned&nbsp;een&nbsp;NewsCategory&nbsp;object.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">(</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">message</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">());<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;save&nbsp;item<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000BB">&#36;this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">item</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">save</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}&nbsp;<br /></span></code></div></div></div>
<br />
Dit is nu wel echt het einde, haha.<br />
<br />
Have fun!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[javascript hulp]]></title>
			<link>http://ep2.nl/thread-7677.html</link>
			<pubDate>Wed, 18 Aug 2010 09:51:24 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7677.html</guid>
			<description><![CDATA[Hoe moet je een script maken als bijv.<br />
<br />
in pagina.html klik je op een plaatje met ismap usemap<br />
dan kan je in pagina2.html komen,anders niet<br />
Ik dacht dat je dit mat javascript moest doen, met cookies ofzo.]]></description>
			<content:encoded><![CDATA[Hoe moet je een script maken als bijv.<br />
<br />
in pagina.html klik je op een plaatje met ismap usemap<br />
dan kan je in pagina2.html komen,anders niet<br />
Ik dacht dat je dit mat javascript moest doen, met cookies ofzo.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Gimp tutorials]]></title>
			<link>http://ep2.nl/thread-7676.html</link>
			<pubDate>Tue, 17 Aug 2010 17:30:45 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7676.html</guid>
			<description><![CDATA[Zijn er mensen die websites weten met goede en duidelijk gimp tutorials?<br />
Het liefste in de richting van het webdesign.<br />
<br />
Wat een vreselijk pittig programma is het. Ik probeer iets heel basics te doen maar zelfs dat lukt me nog niet <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" />]]></description>
			<content:encoded><![CDATA[Zijn er mensen die websites weten met goede en duidelijk gimp tutorials?<br />
Het liefste in de richting van het webdesign.<br />
<br />
Wat een vreselijk pittig programma is het. Ik probeer iets heel basics te doen maar zelfs dat lukt me nog niet <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Andere banner boven het forum?]]></title>
			<link>http://ep2.nl/thread-7675.html</link>
			<pubDate>Tue, 17 Aug 2010 16:53:54 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7675.html</guid>
			<description><![CDATA[Je zult waarschijnlijk wel gezien hebben dat er een andere banner boven het forum staat! <br />
<br />
Deze banner is van <a href="http://www.adverteerdirect.nl/" target="_blank"><span style="font-weight: bold;">AdverteerDirect</span></a>, de nieuwe advertentiepartner van Ep2! De member <a href="http://ep2.nl/thread-7672.html" target="_blank"><span style="font-weight: bold;">wabontrup</span></a> pwnt die tent en z'n aanbod is harstikke interessant voor de middelgrote tot grote webmasters die advertenties voeren op hun website.<br />
<br />
Check het zelf effe en als je een website hebt met 1000+ bezoekers per maand, meld je dan gelijk aan! Kost niets <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" /> <br />
<br />
<span style="font-size: small;">(levert mij ook niets op trouwens, daar doe ik dit absoluut niet voor! Ik sta achter de dienstverlening en maak er gebruik van op Ep2, that's it!)</span><br />
<br />
Check it out: <span style="font-weight: bold;"><a href="http://www.adverteerdirect.nl/publisher" target="_blank">http://www.adverteerdirect.nl/publisher</a></span><br />
<br />
Zelf adverteren op middelgrote tot grote websites kan natuurlijk ook! Voor een vast bedrag per periode kun je helemaal zelf een advertentie plaatsen op een <a href="http://www.adverteerdirect.nl/buy-ads" target="_blank"><span style="font-weight: bold;">website naar keuze</span></a>. Na betaling is je advertentie direct zichtbaar en uiteraard ondersteunen ze voor het afhandelen van de betaling iDeal <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" /><br />
<br />
Peace!]]></description>
			<content:encoded><![CDATA[Je zult waarschijnlijk wel gezien hebben dat er een andere banner boven het forum staat! <br />
<br />
Deze banner is van <a href="http://www.adverteerdirect.nl/" target="_blank"><span style="font-weight: bold;">AdverteerDirect</span></a>, de nieuwe advertentiepartner van Ep2! De member <a href="http://ep2.nl/thread-7672.html" target="_blank"><span style="font-weight: bold;">wabontrup</span></a> pwnt die tent en z'n aanbod is harstikke interessant voor de middelgrote tot grote webmasters die advertenties voeren op hun website.<br />
<br />
Check het zelf effe en als je een website hebt met 1000+ bezoekers per maand, meld je dan gelijk aan! Kost niets <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" /> <br />
<br />
<span style="font-size: small;">(levert mij ook niets op trouwens, daar doe ik dit absoluut niet voor! Ik sta achter de dienstverlening en maak er gebruik van op Ep2, that's it!)</span><br />
<br />
Check it out: <span style="font-weight: bold;"><a href="http://www.adverteerdirect.nl/publisher" target="_blank">http://www.adverteerdirect.nl/publisher</a></span><br />
<br />
Zelf adverteren op middelgrote tot grote websites kan natuurlijk ook! Voor een vast bedrag per periode kun je helemaal zelf een advertentie plaatsen op een <a href="http://www.adverteerdirect.nl/buy-ads" target="_blank"><span style="font-weight: bold;">website naar keuze</span></a>. Na betaling is je advertentie direct zichtbaar en uiteraard ondersteunen ze voor het afhandelen van de betaling iDeal <img src="http://ep2.nl/images/smilies/smile.gif" style="vertical-align: middle;" border="0" alt=":)" title=":)" /><br />
<br />
Peace!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[wrong datatype in array]]></title>
			<link>http://ep2.nl/thread-7674.html</link>
			<pubDate>Tue, 17 Aug 2010 13:32:54 +0000</pubDate>
			<guid isPermaLink="false">http://ep2.nl/thread-7674.html</guid>
			<description><![CDATA[hallo mensen,<br />
<br />
ik zit met een probleempje hier op m'n werk. Ik heb een stuk code van mn werkgever gehad met de vraag: los de foutmeldingen op.<br />
<br />
Dit is de code die fout gaat:<br />
<br />
<a href="http://ep2.pastebin.com/9ZTg1FLc" target="_blank">http://ep2.pastebin.com/9ZTg1FLc</a><br />
<br />
En de melding is<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>Warning: in_array() [function.in-array&#93;: Wrong datatype for second argument in /home/inmru1/public_html/beheer_inmru/offerte_auto_matchen_cron.php on line 164 (12, in dit voorbeeld)<br />
<br />
Warning: in_array() [function.in-array&#93;: Wrong datatype for second argument in /home/inmru1/public_html/beheer_inmru/offerte_auto_matchen_cron.php on line 173 (21, in dit voorbeeld)</code></div></div>
<br />
wat is er nou mis? Thanks alvast!]]></description>
			<content:encoded><![CDATA[hallo mensen,<br />
<br />
ik zit met een probleempje hier op m'n werk. Ik heb een stuk code van mn werkgever gehad met de vraag: los de foutmeldingen op.<br />
<br />
Dit is de code die fout gaat:<br />
<br />
<a href="http://ep2.pastebin.com/9ZTg1FLc" target="_blank">http://ep2.pastebin.com/9ZTg1FLc</a><br />
<br />
En de melding is<br />
<br />
<div class="codeblock">
<div class="title">Code:<br />
</div><div class="body" dir="ltr"><code>Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/inmru1/public_html/beheer_inmru/offerte_auto_matchen_cron.php on line 164 (12, in dit voorbeeld)<br />
<br />
Warning: in_array() [function.in-array]: Wrong datatype for second argument in /home/inmru1/public_html/beheer_inmru/offerte_auto_matchen_cron.php on line 173 (21, in dit voorbeeld)</code></div></div>
<br />
wat is er nou mis? Thanks alvast!]]></content:encoded>
		</item>
	</channel>
</rss>