<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>FinalFrag.be &#187; Smarty</title>
	<atom:link href="http://finalfrag.be/blog/tag/smarty/feed/" rel="self" type="application/rss+xml" />
	<link>http://finalfrag.be/blog</link>
	<description>De persoonlijke website van Massimo 'FinalFrag' Mertens</description>
	<lastBuildDate>Tue, 04 Aug 2009 07:08:07 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Data Type Usage Profiler&#160;(DTUP)</title>
		<link>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/</link>
		<comments>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 11:00:14 +0000</pubDate>
		<dc:creator>Michael</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[datamodel]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[statistieken]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=479</guid>
		<description><![CDATA[Als eerste artikel als gastschrijver op deze blog, wil ik graag een onderwerp aanhalen dat toch wel belangrijk is bij het beheren van een uitgebreide database, zoals bijvoorbeeld die van Spacetarion, namelijk het in de gaten houden van de bevolking van je database.
Het probleem
Bij het creeëren van je datamodel heb je wellicht rekening gehouden met [...]]]></description>
			<content:encoded><![CDATA[<p>Als eerste artikel als gastschrijver op deze blog, wil ik graag een onderwerp aanhalen dat toch wel belangrijk is bij het beheren van een uitgebreide database, zoals bijvoorbeeld die van <a target="_blank" href="http://www.spacetarion.com" title="Spacetarion" >Spacetarion</a>, namelijk het in de gaten houden van de bevolking van je database.</p>
<h3>Het probleem</h3>
<p>Bij het creeëren van je datamodel heb je wellicht rekening gehouden met het optimaal gebruiken van de datatypes die MySQL aanreikt. Een voorbeeld is het verschil tussen de tinyint en de smallint, een tinyint kan maximum waarde 255 bevatten en een smallint maximum 65 535 (wanneer ze worden ingesteld als unsigned). In een optimale database is er goed afgewogen welke datatypes er gebruikt worden voor welk veld. De unieke sleutel van je gebruikerstabel zal waarschijnlijk geen tinyint zijn, tenzij je maar 255 leden verwacht. Maar hoeveel leden verwachten je dan wel?<span id="more-479"></span> Omdat dit moeilijk in te schatten is, hebben <a target="_blank" href="http://www.twitter.com/MassimoMertens" title="Massimo" >Massimo</a> en <a target="_blank" href="http://www.twitter.com/geertsmichael" title="Michaël" >ikzelf</a> een tool geschreven die ons toont hoe ver de tabelvelden &#8216;bevolkt&#8217; zijn. Met de <strong>Data Type Usage Profiler (DTUP)</strong> kan een volledige database beheerd worden en kunnen de volgende datatypes gecontroleerd worden op hun bevolkingsgraad:</p>
<ul>
<li>alle integers (tinyint, smallint, mediumint, int en bigint)</li>
<li>alle teksten (tinytext, text, mediumtext en longtext)</li>
<li>varchar (met eigen ingestelde lengte)</li>
</ul>
<p>In de DTUP zijn er 4 niveaus of zones waarin een datatype zich kan bevinden. Elke zone heeft een kleuraanduiding die terugkomen in de tabelweergave van de databasetabel en in de grafische weergave. De mogelijke zones zijn:</p>
<ol>
<li>&gt; 90% &#8211; Rood</li>
<li>&gt; 75% &#8211; Licht rood</li>
<li>&gt; 50% &#8211; Oranje</li>
<li>&lt; 50% &#8211; Groen</li>
</ol>
<p>Als een datatype zich in de groene of oranje zone bevindt, is er nog geen reden tot het doorvoeren van database aanpassingen. Als echter de het bezettingspercentage &gt; 75% is, dan kan misschien geopteerd worden om een datatype hoger te nemen of de lengte aan te passen. De test op de datatypes uit de reeks van integer gaat kijken naar de hoogste waarde in de tabel. De varchar en text reeks gaat rekening houden met de lengte die het aantal karakters in beslag neemt.</p>
<p>DTUP is gemaakt met het vertrouwde <a target="_blank" href="http://www.codeigniter.com" title="CodeIgniter" >CodeIgniter</a> en <a target="_blank" href="http://www.smarty.net" title="Smarty" >Smarty</a>. De pagina die getoond wordt door de controller te bezoeken, bestaat uit 3 delen.</p>
<ol>
<li>Overzicht: geeft het aantal gevallen weer die voorkomen in elke zone op een pie chart;</li>
<li>Tabellenlijst: alle tabellen die voorkomen in de gebruikte database;</li>
<li>Databasetabellen: bevat een tabel die weergeeft hoeveel waarden er in gebruik zijn en hoeveel er maximum gebruikt mogen worden met als laatste kolom in de tabel de procentuele verhouding tussen aantal gebruikte en maximum te gebruiken. Een bar chart vervolledigt de tabel door op een grafische manier de verhouding nogmaals weer te geven. Zowel de tabel als de grafiek maken gebruik van de kleuren die bij de zones horen.</li>
</ol>
<h3>Waar jullie allemaal op wachten, screenshots</h3>
<p><img class="alignnone wp-smiley wp-image-513 left" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup_screen0.png" alt="dtup_screen0" width="300" height="200" /></p>
<p>Deze pie chart toont de beknopt overzicht van alle velden uit de database. Het grootste deel in de voorbeeld database is gezond (groen) en enkele velden bevinden zich in de kritische zone. De velden die vooral in die rode zone liggen zijn velden waarvan we op voorhand de maximale lengte kennen, bijvoorbeeld omdat we een MD5 hash gebruiken.</p>
<p><img class="alignnone wp-smiley wp-image-515" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup_screen2.png" alt="dtup" width="526" height="268" /></p>
<p>Bovenstaande schermafbeelding geeft duidelijk weer waar dit artikel en DTUP eigenlijk om draait. Alle velden van een bepaalde tabel worden getoond met informatie zoals aantal gebruikt, maximum te gebruiken en de procentuele verhouding. Ook het datatype is weergegeven zodat er van hieruit beslist kan worden welk datatype misschien de opvolger kan worden van het huidige, te kleine, datatype.</p>
<p>Bovenstaand voorbeeld kan een deel zijn van een gebruikerstabel. Zoals al gezegd, wisten we op voorhand dat het wachtwoord 32 tekens lang ging zijn, dus dat rode veld is geen verrassing. Het veld waarin de gebruikersnaam wordt bijgehouden is ook volledig gebruikt. Er heeft zich namelijk een gebruiker geregistreerd met een gebruikersnaam die net 32 karakters is. Nu is de vraag, houden we de beperking op die 32 tekens, of breiden we het veld uit? Dat hangt natuurlijk af van het doel. In ons voorbeeld stellen we dat er van hogerhand beslist is dat een gebruikersnaam nooit langer mag zijn dan 32 tekens.</p>
<p>Dit voorbeeldje ging over een varchar veld. Het is een heel ander verhaal wanneer het gaat om een unieke sleutel die automatisch verhoogd wordt met AUTO_INCREMENT.</p>
<p><img class="alignnone wp-smiley wp-image-515" src="http://finalfrag.be/blog/wp-content/uploads/2009/06/dtup1.png" alt="dtup" width="526" /></p>
<p>In onze instellingen tabel is er gekozen om met een tinyint te werken als unieke sleutel die maximum 255 records toelaat. Zoals te zien is in bovenstaande figuur is ondertussen waarde 240 bereikt. Als er nog meer instellingen bijkomen, is het misschien niet onbelangrijk om op dit moment het datatype tinyint op te krikken naar een smallint die tot waarde 65 535 aankan. Voor deze tabel is het natuurlijk geen probleem als de unieke sleutels op zijn. Voor een gebruikerstabel, waarvan de ID zichzelf verhoogt, kan dit veel kritischer zijn omdat, eenmaal de grens bereikt is, er geen leden meer kunnen registreren en dat wil je natuurlijk niet.</p>
<h3>Voila</h3>
<p>Ik hoop dat ik jullie een nieuwe kijk heb kunnen geven op de manier waarop Massimo en ikzelf <a target="_blank" href="http://www.twitter.com/Spacetarion" title="Spacetarion" >Spacetarion</a> onderhouden.</p>
<p>Dit zelfgeschreven profiler tooltje met behulp van CodeIgniter, Smarty en een MySQL database laat ons toe nauwgezet de bevolking van onze datatypes te monitoren. Deze pagina is toegankelijk vanuit het beheerpaneel van Spacetarion dat opgebouwd is met <a target="_blank" href="http://www.extjs.com" title="ExtJS" >ExtJS</a>. Binnenkort zullen onze trouwe volgers ook een blik kunnen werpen op de adminkant van Spacetarion. Zo weten jullie des te meer waar wij mee bezig zijn. Met dat paneel en deze DTUP kunnen wij ons uitgebreid systeem opvolgen om het zo stabiel mogelijk te presenteren aan de spelers, hopelijk aan jou dus.</p>
<h3>Verbeteringen? Altijd mogelijk&#8230;</h3>
<p>Mogelijke verbeteringen zijn er altijd, zo zou ik nog kunnen voorzien dat het datatype vanuit de DTUP gewijzigd kan worden. Een tweede verbetering die ik nog zou kunnen doorvoeren, is alle autonummeringvelden als speciaal veld behandelen waarbij een verhouding van &gt; 75% echt kritiek is. In het geval van kritieke autonumeringvelden kan ik via een cronjob mezelf via mail op de hoogte houden en direct ingrijpen. Een stap verder is dat het systeem zichzelf kan verbeteren door automatisch zijn datatype te verhogen en me via mail op de hoogte stellen dat deze actie ondernomen werd.</p>
<p>De DTUP staat nog maar in z&#8217;n kinderschoenen en kan dus nog verder uitgebreid worden. Misschien heb jij wel een suggestie die DTUP kan omvormen tot een mooi product dat voor iedereen te downloaden zal zijn in de toekomst? Laat het ons zeker weten!</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/06/data-type-usage-profiler-dtup/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Smarty integreren in&#160;CodeIgniter</title>
		<link>http://finalfrag.be/blog/2009/06/smarty-integreren-in-codeigniter/</link>
		<comments>http://finalfrag.be/blog/2009/06/smarty-integreren-in-codeigniter/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 11:00:51 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>
		<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=381</guid>
		<description><![CDATA[ Iedereen die iets of wat op een professionele manier bezig is met het maken van websites, heeft al wel van Smarty gehoord. Smarty is een tool die je toelaat om PHP code volledig te scheiden van de manier waarop de site wordt getoond. Deze blogpost dient echter niet om Smarty toe te lichten, want [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://finalfrag.be/blog/wp-content/uploads/2009/06/smarty-logo-orange.gif" alt="Smarty logo" style="margin-left: 10px !important" class="alignright wp-smiley wp-image-417" /> Iedereen die iets of wat op een professionele manier bezig is met het maken van websites, heeft al wel van <a target="_blank" href="http://www.smarty.net"  title="Smarty">Smarty</a> gehoord. Smarty is een tool die je toelaat om PHP code volledig te scheiden van de manier waarop de site wordt getoond. Deze blogpost dient echter niet om Smarty toe te lichten, want daar vind je genoeg informatie over op het internet. Wat deze blogpost wel zal doen, is uitleggen hoe je Smarty kan integreren in <a target="_blank" href="http://www.codeigniter.com"  title="CodeIgniter">CodeIgniter</a>, want daarover is bijzonder weinig (goede) informatie te vinden.<span id="more-381"></span></p>
<h3>Waarom zit het niet standaard in CodeIgniter?</h3>
<p>Daar zijn 2 goede redenen voor. De eerste is de meest voor de hand liggende. CodeIgniter heeft namelijk zijn eigen manier om om te gaan met templates. In CodeIgniter termen noemen deze &#8216;view files&#8217;. Telkens wanneer je het volgende doet, roep je dus eigenlijk een template aan.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">load</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">view</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Een andere mogelijke reden waarom Smarty niet standaard bij CodeIgniter wordt geleverd is omdat er meerdere mogelijkheden zijn. Smarty is wel de bekendste, maar zeker niet de enige template engine. Een template engine biedt natuurlijk vele voordelen waaronder caching, afscherming van de PHP code voor designers, handige tags, etc.</p>
<h3>Waar zetten we Smarty?</h3>
<p><img src="http://finalfrag.be/blog/wp-content/uploads/2009/06/smarty_ci_folders.png" alt="Smarty locatie" class="wp-smiley alignleft size-full wp-image-427" style="margin-right: 5px" /> De eerste stap is natuurlijk het uploaden van de Smarty bestanden naar je webhost. De beste locatie om deze te plaatsen vind ik persoonlijk de libraries map onder system/application/. Dit enerzijds omdat Smarty een library is die je zal gebruiken en anderszijds omdat ik al mijn eigen uitbreidingen in die map plaats. Zo blijven alle zelfgemaakte bestanden mooi bij elkaar en kan ik beter het overzicht behouden. Mijn system/application/libraries map zie je links op de afbeelding.</p>
<p>Zoals je ziet heb ik de originele naam van de Smarty map behouden. Hierdoor kan ik makkelijk zien welke versie ik heb wanneer er updates uitkomen. Deze naam mag je uiteraard zelf kiezen, maar ik zou de bestanden wel in een map houden, ook weer om het overzicht te behouden.</p>
<p>Noot: wanneer je werkt met meerdere applicaties op één CodeIgniter installatie, kan het handig zijn om deze map in system/libraries te plaatsen. Op die manier hoef je maar één keer Smarty te uploaden in plaats van één keer voor elke applicatie.</p>
<h3>De Smarty klasse</h3>
<p>Het is uiteraard niet voldoende om gewoon de map te uploaden naar je server. Het Smarty object moet bereikbaar zijn vanuit de CodeIgniter klassen (meestal vanuit een controller). Een klasse toevoegen aan het CodeIgniter framework is helemaal niet moeilijk, eerst moet je de klasse uiteraard schrijven en deze daarna gewoon automatisch inladen met behulp van autoload.php.</p>
<p>Zoals je uit de onderstaande code kan afleiden, heb ik deze klasse de naam &#8216;S&#8217; gegeven. Ik heb gekozen om &#8216;S&#8217; als naam te nemen in plaats van &#8216;MY_Smarty&#8217; om de simpele reden dat &#8216;S&#8217; korter is dan &#8216;MY_Smarty&#8217; (en omdat &#8216;Smarty&#8217; al gereseveerd is door &#8230; jawel &#8230; Smarty zelf). Wanneer ik nu een template aanroep hoef ik dus niet altijd</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">my_smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>te gebruiken, maar simpelweg</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">s</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'home'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>wat in de grotere applicaties toch al snel heel wat typwerk minder is. De hardcore Smarty fans zien ook meteen dat ik de extensie .tpl kan weglaten bij het aanroepen van een template. Deze &#8216;functionaliteit&#8217; is ook voorzien in de S klasse.</p>
<p>Zoals je op de afbeelding van mijn bestandsstructuur al kon zien, heb ik gewoon een bestandje S.php aangemaakt in de system/application/libraries/ map. De inhoud van dit bestand is als volgt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span> <span style="color: #0000ff;">&quot;Smarty-2.6.22/Smarty.class.php&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">class</span> S <span style="color: #000000; font-weight: bold;">extends</span> Smarty <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> S<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">Smarty</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Het config object van CodeIgniter ophalen</span>
        <span style="color: #000088;">$config</span> <span style="color: #339933;">=&amp;</span> get_config<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Aan de hand van de config de mappen die Smarty zal gebruiken instellen</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">template_dir</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'smarty_template_dir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'smarty_template_dir'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> BASEPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'application/views/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">compile_dir</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">empty</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'smarty_compile_dir'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> ? <span style="color: #000088;">$config</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'compile_dir'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">:</span> BASEPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'cache/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// base_url is een handige functie, die willen we altijd bij ons hebben</span>
        <span style="color: #666666; font-style: italic;">// In een Smarty template kunnen we dan gewoon {$base_url} gebruiken</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">function_exists</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'base_url'</span><span style="color: #339933;">,</span> base_url<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">clear_all_cache</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">function</span> display<span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource_name</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// .tpl toevoegen indien dit niet in het gevraagde bestand staat</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">strpos</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource_name</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.tpl'</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$resource_name</span> <span style="color: #339933;">.=</span> <span style="color: #0000ff;">'.tpl'</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// Hier kan je allerlei code toevoegen die moet gebeuren vlak voor het tonen van de pagina</span>
&nbsp;
        <span style="color: #666666; font-style: italic;">// De pagina tonen</span>
        <span style="color: #b1b100;">return</span> parent<span style="color: #339933;">::</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resource_name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Let op: de compile map die je aangeeft moet schrijfbaar zijn door de webserver. Ik gebruik altijd 777, maar misschien is minder ook al goed. Kan iemand dat duidelijk maken?</p>
<p>De S klasse moet natuurlijk in het CodeIgniter framework worden ingeladen voordat je deze kan gebruiken in een controller. Hiervoor open je gewoon system/application/config/autoload.php en voeg je bij het &#8216;libraries&#8217; onderdeel de &#8216;S&#8217; klasse toe als volgt:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$autoload</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'libraries'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'s'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Wat met $smarty.session?</h3>
<p>CodeIgniter maakt, zoals je misschien weet, geen gebruik van de globale $_SESSION variabele van PHP. Om gegevens bij te houden, maakt CI gebruik van cookies en/of een database (kan je instellen in het config bestand). Dit brengt echter wel een minpunt met zich mee in dit geval. Smarty kan namelijk de $_SESSION variabele aanspreken met behulp van $smarty.session. Maar aangezien CI hier geen gebruik van maakt, is dit niet mogelijk <img src='http://finalfrag.be/blog/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Maar voor elk probleem is natuurlijk een oplossing. Ik heb in de display functie van de S klasse een stukje code geschreven dat alle gegevens uit $this->session (de plaats waar CI alle sessiegegevens opslaat) haalt en ze doorgeeft aan Smarty. Dit is makkelijk te doen met een foreach, maar dat laat ik als uitstekende oefening voor thuis.</p>
<h3>Een klein voorbeeldje</h3>
<p>system/application/controllers/Voorbeeld.php</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">class</span> Voorbeeld <span style="color: #000000; font-weight: bold;">extends</span> Controller <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">function</span> index<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$tekst</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'hello world...'</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">s</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tekst'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tekst</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">s</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'voorbeeld'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>system/application/views/voorbeeld.tpl</p>

<div class="wp_syntax"><div class="code"><pre class="smarty" style="font-family:monospace;">Dit is de doorgegeven tekst:<span style="color: #009000;">&lt;br /&gt;</span>
<span style="color: #009000;">&lt;br /&gt;</span>
<span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$tekst</span><span style="color: #D36900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/06/smarty-integreren-in-codeigniter/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Smarties zijn&#160;lekker</title>
		<link>http://finalfrag.be/blog/2009/05/smarties-zijn-lekker/</link>
		<comments>http://finalfrag.be/blog/2009/05/smarties-zijn-lekker/#comments</comments>
		<pubDate>Sat, 02 May 2009 12:21:50 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[Stage]]></category>
		<category><![CDATA[eindwerk]]></category>
		<category><![CDATA[Inventis]]></category>
		<category><![CDATA[pukkelpop]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[Suckyreview]]></category>
		<category><![CDATA[verjaardag]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=102</guid>
		<description><![CDATA[Voor de trouwe lezers van deze blog, bij deze mijn verslag van week 9 van mijn stage bij Inventis.
Smarties
Wel, niet echt smarties natuurlijk, maar een template engine. Met behulp van Smarty kan je templates schrijven. Deze templates bepalen hoe een website eruit ziet, waar alle elementen zich bevinden en op welke manier de gegevens worden [...]]]></description>
			<content:encoded><![CDATA[<p>Voor de trouwe lezers van deze blog, bij deze mijn verslag van <strong>week 9</strong> van mijn stage bij <a target="_blank" href="http://www.inventis.be" title="Inventis" >Inventis</a>.</p>
<h3>Smarties</h3>
<p>Wel, niet echt smarties natuurlijk, maar een<strong> template engine</strong>. Met behulp van <a target="_blank" href="http://www.smarty.net" title="Smarty" >Smarty</a> kan je templates schrijven. Deze <strong>templates </strong>bepalen hoe een website eruit ziet, waar alle elementen zich bevinden en op welke manier de gegevens worden getoond. Het spreekt voor zich dat hieraan <strong>heel wat werk</strong> is. Mijn week was dan ook goed gevuld met dit te doen.<span id="more-102"></span> Maandag heb ik het <strong>registreren </strong>en het <strong>inloggen </strong>afgewerkt, dinsdag de pagina&#8217;s die de gebruiker toelaten zijn <strong>wachtwoord </strong>opnieuw <strong>op te vragen</strong> en de rest van de week heb ik gewerkt aan de templates die mensen <strong>reviews </strong>laten <strong>toevoegen en lezen</strong>.</p>
<h3>Nachtwerk</h3>
<p>Gelukkig niet voor mij, maar maandag werd er aan <strong>nachtwerk </strong>gedaan bij Inventis. De nieuwe <strong>pukkelpop </strong>website moest op dinsdagmorgen gelanceerd worden, en er moesten nog heel wat bands toegevoegd worden. Toen ik dinsdag op kantoor aankwam, ging de nachtploeg juist naar huis met een slaperig gezicht. De nieuwe pukkelpop is dankzij hun echter wel <strong>online</strong> geraakt en is te vinden op <a target="_blank" href="http://www.pukkelpop.be" title="Pukkelpop" >pukkelpop.be</a>.</p>
<h3>Eindwerk&#8230; nog maar eens</h3>
<p>Voor de zoveelste keer nog maar eens iets zeggen over mijn <strong>eindwerk</strong>. De voorbije weken heb ik hieraan niet veel kunnen werken door de problemen met mijn computer, pukkelpop, etc. <strong>Dit weekend </strong>staat er heel wat schrijven op de planning dus.</p>
<h3>Hiep hiep, slice-aah</h3>
<p>Donderdag zat de <strong>feestelijke </strong>sfeer er helemaal in, de slicer van Inventis, <a target="_blank" href="http://www.inventis.be/over/het-team/david-candreva"  title="David Candreva">David</a>, werd 18. Hij carpoolt elke dag naar het werk met <a target="_blank" href="http://www.inventis.be/over/het-team/stijn-janssen"  title="Stijn Janssen">Stijn</a>, die zich &#8220;toevallig&#8221; had <strong>overslapen</strong>. Zo hadden we iets meer tijd om alles te versieren en in orde te brengen. Toen David binnenkwam was het dan ook meteen feest (niet dat dat op andere dagen niet zo is <img src='http://finalfrag.be/blog/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ). Een <strong>videoverslag</strong>:</p>
<p><object width="425" height="344" data="http://www.youtube.com/v/o73zhzl5CT4&amp;hl=nl&amp;fs=1" type="application/x-shockwave-flash"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/o73zhzl5CT4&amp;hl=nl&amp;fs=1" /><param name="allowfullscreen" value="true" /></object></p>
<p>Donderdag stond er ook nog een leuke <strong>verrassing </strong>voor de deur: een <a target="_blank" href="http://nl.wikipedia.org/wiki/Dag_van_de_Arbeid" title="Dag van de arbeid" >dagje vrijaf</a>. Hoewel er nog heel wat werk is aan mijn eindwerk ga ik toch <strong>genieten </strong>van dat extra dagje weekend. Hopelijk doen jullie dat ook&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/05/smarties-zijn-lekker/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Een tagcloud&#160;maken</title>
		<link>http://finalfrag.be/blog/2009/04/een-tagcloud-maken/</link>
		<comments>http://finalfrag.be/blog/2009/04/een-tagcloud-maken/#comments</comments>
		<pubDate>Thu, 30 Apr 2009 10:04:10 +0000</pubDate>
		<dc:creator>FinalFrag</dc:creator>
				<category><![CDATA[Programmeren]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Smarty]]></category>
		<category><![CDATA[tags]]></category>

		<guid isPermaLink="false">http://finalfrag.be/blog/?p=110</guid>
		<description><![CDATA[Tijdens mijn stage ben ik deze week gestoten op iets dat ik nooit eerder heb gemaakt, een tagcloud. Dit klinkt heel simpel om te maken, maar uiteindelijk was het toch moeilijker om te maken dan verwacht. Door deze blogpost zal ik het maken van een tagcloud wat toelichten.
Wat is een tagcloud?
Een tagcloud is een verzameling [...]]]></description>
			<content:encoded><![CDATA[<p>Tijdens mijn stage ben ik deze week gestoten op iets dat ik nooit eerder heb gemaakt, een tagcloud. Dit klinkt heel simpel om te maken, maar uiteindelijk was het toch moeilijker om te maken dan verwacht. Door deze blogpost zal ik het maken van een tagcloud wat toelichten.</p>
<h3>Wat is een tagcloud?</h3>
<p>Een tagcloud is een verzameling van kernwoorden op een blog. Door het grote succes van tagclouds, worden ze ondertussen ook voor andere doeleinden gebruikt.<span id="more-110"></span>In mijn stageproject gebruik ik een &#8216;product-cloud&#8217;, een tagcloud die de producten bevat waarover de meeste reviews werden geschreven.</p>
<p>Een tagcloud kan je makkelijk herkennen doordat er grote en kleine woorden instaan. De grote woorden zijn belangrijker en worden dus groter getoond zodat ze beter opvallen. Een voorbeeld van een tagcloud kan je op deze blog in het rechter menu zien. Kernwoorden waarover ik het dikwijls heb in mijn posts worden groter getoond, terwijl minder vaak voorkomende tags kleiner worden afgebeeld.</p>
<h3>Een tagcloud maken</h3>
<p>Het makkelijkste deel van een tagcloud is de CSS. In dit voorbeeld zullen we gebruik maken van vier verschillende groottes. De CSS bevat dus vier klassen, één voor elke grootte.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.size1</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">12px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.size2</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">24px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.size3</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">36px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span>
<span style="color: #6666ff;">.size4</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-size</span><span style="color: #00AA00;">:</span> <span style="color: #933;">48px</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Om dit voorbeeld zo simpel mogelijk te houden, zal ik de tags niet ophalen uit een database, maar zelf een array declareren. In een realistische situatie moet dit uiteraard wel gebeuren. Om een tagcloud samen te stellen hebben we nood aan twee gegevens. In mijn stageproject waren dit de naam van een product en het aantal reviews dat erover zijn geschreven. De naamgeving hangt af van het doel van de cloud. Om dit voorbeeld zo duidelijk mogelijk te maken, zullen we gegevens ‘naam’ en ‘aantal’ noemen. De gebruikte array ziet er dus als volgt uit:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$tags</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
    <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'naam'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Massimo'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'aantal'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">5</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'naam'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Mertens'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'aantal'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">9</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'naam'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'FinalFrag'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'aantal'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">2</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'naam'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Website'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'aantal'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">7</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'naam'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Blog'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'aantal'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">1</span>
    <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
    <span style="color: #990000;">array</span> <span style="color: #009900;">&#40;</span>
        <span style="color: #0000ff;">'naam'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #0000ff;">'Tagcloud'</span><span style="color: #339933;">,</span>
        <span style="color: #0000ff;">'aantal'</span> <span style="color: #339933;">=&gt;</span> <span style="color: #cc66cc;">8</span>
    <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Uit deze array kunnen we al afleiden dat &#8216;Tagcloud&#8217; en &#8216;Mertens&#8217; het grootst gaan getoond worden met respectievelijk 8 en 9 als aantal. &#8216;Blog&#8217; en &#8216;FinalFrag&#8217; zullen klein worden getoond omdat ze maar 1 en 2 als aantal hebben.</p>
<p>De verwerking van deze array gaat in mensentaal als volgt. Eerst bepalen we het grootste en het kleinste aantal. Zo komen we te weten welke klein moeten getoond worden en welke groot. Uiteraard moeten ook de tussenliggende tags onderverdeeld worden in de vier CSS klassen die we eerder al hebben aangemaakt. In PHP ziet dit er als volgt uit:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Eerst initialiseren we de variabelen</span>
<span style="color: #666666; font-style: italic;">// die het kleinste en grootste aantal bevatten</span>
<span style="color: #000088;">$min</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$max</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Daarna overlopen we de array (by reference)</span>
<span style="color: #666666; font-style: italic;">// om het kleinste en grootste aantal op te slaan</span>
<span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span> <span style="color: #b1b100;">as</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Indien er nog geen kleinste waarde is opgeslagen,</span>
    <span style="color: #666666; font-style: italic;">// is de eerste de kleinste</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$min</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$min</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Hetzelfde voor de maximumwaarde</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$max</span> <span style="color: #339933;">===</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$max</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Als het huidige aantal kleiner is dan de opgeslagen</span>
    <span style="color: #666666; font-style: italic;">// minimumwaarde is dit de nieuwe minimumwaarde</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$min</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$min</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// En weer hetzelfde voor de maximumwaarde</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$max</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$max</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// De volgende stap is om de tags te verdelen over de vier klassen</span>
<span style="color: #666666; font-style: italic;">// Eerst moeten we de range bepalen waarin de tags zich bevinden</span>
<span style="color: #000088;">$range</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$max</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$min</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Daarna bepalen we de grootte van elk van de vier delen</span>
<span style="color: #000088;">$partSize</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$range</span> <span style="color: #339933;">/</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Aan de hand van de grootte van elk deel,</span>
<span style="color: #666666; font-style: italic;">// kunnen we de maximumwaarde van elk deel bepalen</span>
<span style="color: #000088;">$part1Max</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$min</span> <span style="color: #339933;">+</span> <span style="color: #000088;">$partSize</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$part2Max</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$min</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">2</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$partSize</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$part3Max</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$min</span> <span style="color: #339933;">+</span> <span style="color: #cc66cc;">3</span> <span style="color: #339933;">*</span> <span style="color: #000088;">$partSize</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$part4Max</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$max</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Wanneer we bovenstaande code uitvoeren op de array die we hoger hebben aangemaakt, krijgen we volgend resultaat:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="text" style="font-family:monospace;">$min = 1
$max = 9
&nbsp;
$range = 8 (9 – 1)
$partSize = 2 (8 / 4)
&nbsp;
$part1Max = 3 (1 + 2)
$part2Max = 5 (1 + 2 * 2)
$part3Max = 7 (1 + 3 * 2)
$part4Max = 9 ($max)</pre></td></tr></table></div>

<p>Het enige dat ons nu nog rest is om de array opnieuw te overlopen en de tags te verdelen over de aangemaakt klassen. Dit is makkelijk te realiseren als volgt:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span> <span style="color: #b1b100;">as</span> <span style="color: #339933;">&amp;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$part1Max</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Het aantal ligt tussen 1 en 3</span>
        <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'klasse'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$part2Max</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Het aantal ligt tussen 3 en 5</span>
        <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'klasse'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">2</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span> <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'aantal'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;=</span> <span style="color: #000088;">$part3Max</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Het aantal ligt tussen 5 en 7</span>
        <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'klasse'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">3</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">// Het aantal ligt tussen 7 en 9</span>
        <span style="color: #000088;">$tag</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'klasse'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">4</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Nu is de array die we in het begin aangemaakt hebben uitgebreid met een extra veld, namelijk &#8216;klasse&#8217;. In deze variabele staat de CSS klasse waartoe die bepaalde tag hoort. Met behulp van Smarty (onze favoriete template engine) kunnen we deze array makkelijk omzetten in HTML zodat deze op de website kan getoond worden. Allereerst moeten we de array doorgeven aan Smarty en de juiste template aanroepen:</p>
</pre>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Eerst geven we de tags array door aan Smarty</span>
<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">assign</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tags'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tags</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// En daarna tonen we de tagcloud template</span>
<span style="color: #000088;">$smarty</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">display</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tagcloud.tpl'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Deze template ziet er als volgt uit:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="smarty" style="font-family:monospace;"><span style="color: #009000;">&lt;div id=&quot;tagcloud&quot;&gt;</span>
    <span style="color: #D36900;">&#123;</span><span style="color: #0600FF;">foreach</span> <span style="color: #6A0A0A;">from</span><span style="color: #D36900;">=</span><span style="color: #00aaff;">$tags</span> <span style="color: #6A0A0A;">item</span><span style="color: #D36900;">=</span>tag<span style="color: #D36900;">&#125;</span>
        <span style="color: #009000;">&lt;span class=&quot;size{$tag.klasse}&quot;&gt;</span><span style="color: #D36900;">&#123;</span><span style="color: #00aaff;">$tag</span>.<span style="color: #006600;">naam</span><span style="color: #D36900;">&#125;</span><span style="color: #009000;">&lt;/span&gt;</span>
    <span style="color: #D36900;">&#123;</span><span style="color: #D36900;">/</span><span style="color: #0600FF;">foreach</span><span style="color: #D36900;">&#125;</span>
<span style="color: #009000;">&lt;/div&gt;</span></pre></td></tr></table></div>

<h3>Het resultaat</h3>
<p><a href="http://finalfrag.be/blog/wp-content/uploads/2009/04/tag_cloud_resultaat.png"  rel="shadowbox[post-110];player=img;"><img src="http://finalfrag.be/blog/wp-content/uploads/2009/04/tag_cloud_resultaat.png" alt="Het resultaat" title="Het resultaat" width="170" height="60" class="alignright size-thumbnail wp-image-181" /></a>Als je alle code die hierboven staat zou samenvoegen en uitvoeren, krijg je een 'mooie' tagcloud. Uiteraard kan dit met behulp van de juiste CSS regels veel beter gemaakt worden, maar daar gaat deze post niet over. Bepaalde stukken PHP code kunnen op een betere manier geschreven worden, bijvoorbeeld het deel dat beslist in welk deel een bepaalde tag hoort. In een productieomgeving moet dit gedaan worden met een switch. Het is dan ook niet aangeraden de code gewoon over te nemen wanneer je zelf een tagcloud wil maken. Er zijn op het internet heel wat voorbeelden te vinden van tagclouds met een mooie stijling.</p>
<p><a target="_blank" href="http://www.inventis.be/blog"  title="Inventis blog"><img src="http://finalfrag.be/blog/wp-content/uploads/2009/04/tag_cloud_voorbeeld1.png" alt="Inventis tagcloud" title="Inventis tagcloud" class="alignnone size-thumbnail wp-image-184" /></a></p>
<p><a target="_blank" href="http://chir.ag/projects/preztags/"  title="US presidential speeches tagcloud"><img src="http://finalfrag.be/blog/wp-content/uploads/2009/04/tag_cloud_voorbeeld2.png" alt="US presidential speeches tagcloud" title="US presidential speeches tagcloud" width="385" height="123" class="alignnone size-thumbnail wp-image-186" /></a></p>
<p><a target="_blank" href="http://www.webdesignerwall.com"  title="Webdesignerwall"><img src="http://finalfrag.be/blog/wp-content/uploads/2009/04/tag_cloud_voorbeeld3.png" alt="Webdesignerwall tagcloud" title="Webdesignerwall tagcloud" class="alignnone size-thumbnail wp-image-184" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://finalfrag.be/blog/2009/04/een-tagcloud-maken/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
