<?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>Programmazione Web &#187; Design pattern</title>
	<atom:link href="http://www.programmazione-web.com/categorie/design-pattern/feed" rel="self" type="application/rss+xml" />
	<link>http://www.programmazione-web.com</link>
	<description>il Blog open degli sviluppatori del web!</description>
	<lastBuildDate>Mon, 25 Jul 2011 16:39:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Template engine, smarty, ma sono utili su framework MVC?</title>
		<link>http://www.programmazione-web.com/template-engine-smarty-sono-utili-framework-mvc.php</link>
		<comments>http://www.programmazione-web.com/template-engine-smarty-sono-utili-framework-mvc.php#comments</comments>
		<pubDate>Sun, 01 Mar 2009 13:00:24 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
				<category><![CDATA[Design pattern]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Programmare Php]]></category>
		<category><![CDATA[RAD]]></category>
		<category><![CDATA[framework mvc]]></category>
		<category><![CDATA[pattern MVC]]></category>
		<category><![CDATA[programmazione object oriented]]></category>
		<category><![CDATA[smarty tpl]]></category>
		<category><![CDATA[template language]]></category>
		<category><![CDATA[web templates]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=189</guid>
		<description><![CDATA[Sono utili i motori di template come smarty usando i framework MVC? In ambiente PHP così come in altri ambienti, sono delle classi che consentono ai grafici di interagire con il codice sviluppato dai programmatori senza per questo dover acquisire competenze specifiche sul linguaggio di programmazione utilizzato.]]></description>
			<content:encoded><![CDATA[<p>Lo<strong> sviluppo web</strong> in questi ultimi anni ha introdotto notevoli migliorie sotto l&#8217;aspetto di progettazione e programmazione.. si e&#8217; passati da uno s<strong>viluppo funzionale</strong> ad una programmazione completamente <strong>object oriented</strong>, si utilizzano ora sempre piu&#8217; <strong>pattern di sviluppo basati sul concetto MVC</strong>, appoggiandosi a diversi <strong>framework php</strong> (codeigniter, cakephp, symphony, zend ecc ecc..), ottenendo codice piu&#8217; organizzato e ben strutturato, quindi maggiore controllo e velocita&#8217; di sviluppo, separazione logica ed estensibilita&#8217;, uno standard di sviluppo.. insomma molti vantaggi rispetto a quando si creavano files confusi di codice html innestati a query php, cicli e migliaia di controlli sparsi in tutte le pagine con includes di centinaia di funzioni di libreria poco organizzate.. che una volta fatti e poi lasciati nel dimenticatoio, quando bisognava modificarli poi diventava necessario fare un brainstorming per capire la logica con cui erano stati concepiti.. figuriamoci se il codice era sviluppato da qualcun altro che non usava i nostri schemi.</p>
<p>Ora come sappiamo, grazie al <strong>pattern MVC e ai framework opensource php</strong> si ha modo di organizzare il codice al meglio, separando completamente la logica applicativa dalla parte di modello di accesso ai dati del database e dalla parte di presentazione dei dati sulle viste.</p>
<p>Fino qua tutto bene e vedo solo dei vantaggi che non voglio ripetere, ma parliamo ora del ruolo dei <strong>template language.. smarty tpl </strong>per citarne uno<strong>.. </strong> che sono ormai spesso presenti <strong>nei CMS di ultima generazione</strong> e vengono spesso propinati per rendere la vita piu&#8217; facile a chi progetta interfaccie web&#8230; Sinceramente fatico a capire che grossi vantaggi possono offrire questi <strong>pseudo linguaggi</strong>, che sono nati appunto per rendere la vita piu&#8217; semplice a chi deve mettere le mani sulle viste, tentando di ridurre il gap tra gli sviluppatori, i web designer e i grafici.. questo nell&#8217;ottica di team di sviluppo medio grandi dove sono solitamente sono i web designer a mettere le mani sulla parte frontend dei layout.</p>
<p>Questi <strong>motori di template</strong>, in ambiente PHP così come in altri ambienti, sono delle classi che consentono ai grafici di interagire con il codice sviluppato dai programmatori senza per questo dover acquisire competenze specifiche sul linguaggio di programmazione utilizzato&#8230; questo e&#8217; vero se si dimentica che il grafico invece di capire come estrapolare il codice da un array in php tramite un foreach, dovra&#8217; imparare ad usare un linguaggio diverso con costrutti simili (foreach, loop) e non molto piu&#8217; semplici, per poi fare la stessa cosa con un array di dati in smarty.</p>
<p>Quindi nell&#8217;ottica di utilizzo di un <strong>framework MVC</strong> che ha gia&#8217; dentro il concetto di vista e gia&#8217; separa adeguatamente la parte di presentazione dalle query al database e dalla logica applicativa, risulta inutile secondo me appoggiarsi a queste classi, che appesantiscono a livello prestazionale il codice per introdurre un nuovo linguaggio, che ha le medesime difficolta&#8217; dal punto programmativo quando si maneggiano strutture dati semplici come array (ovvero quello che ci dovremmo trovare nelle viste).</p>
<p>Quindi quali sono i <strong>vantaggi nello scrivere codice delle viste in tpl? </strong>Cambia la sintassi, non sono piu&#8217; semplici e bisogna imparare un nuovo linguaggio, si introducono nuove classi quindi piu&#8217; righe di codice da eseguire <strong>rallentando le prestazioni del software</strong> e come ripeto se si lavora su framework MVC si ha gia&#8217; una separazione logica delle viste, percui non ha senso neanche per la sepazione della business logic&#8230;</p>
<p>Li buttiamo a mare questi tpl?</p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.programmazione-web.com%2Ftemplate-engine-smarty-sono-utili-framework-mvc.php&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/template-engine-smarty-sono-utili-framework-mvc.php/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Progettiamo il software o programmiamo e basta?</title>
		<link>http://www.programmazione-web.com/progettare-software-o-programmare-progettando.php</link>
		<comments>http://www.programmazione-web.com/progettare-software-o-programmare-progettando.php#comments</comments>
		<pubDate>Tue, 05 Aug 2008 20:52:42 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
				<category><![CDATA[Applicazioni]]></category>
		<category><![CDATA[Design pattern]]></category>
		<category><![CDATA[RAD]]></category>
		<category><![CDATA[Sviluppo applicazioni]]></category>
		<category><![CDATA[ciclo di vita del software]]></category>
		<category><![CDATA[linguaggi di modellazione]]></category>
		<category><![CDATA[progettare applicazioni]]></category>
		<category><![CDATA[progettare software]]></category>
		<category><![CDATA[programmazione e sviluppo]]></category>
		<category><![CDATA[sviluppo software]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/?p=69</guid>
		<description><![CDATA[Spesso noi programmatori siamo costretti a lavorare in condizioni esasperate da tempistiche troppo stringenti, richieste e specifiche date all'ultimo minuto e margini di brainstorming ridicoli. Un software ben progettato e' piu' stabile e architetturalmente espandibile, mantenibile e il costo finale sara' inferiore.. quindi perche' non vogliamo attenerci a queste semplice regole?]]></description>
			<content:encoded><![CDATA[<p>Spesso noi programmatori siamo costretti a lavorare in condizioni esasperate da tempistiche troppo stringenti, richieste e specifiche date all&#8217;ultimo minuto e margini di brainstorming ridicoli.</p>
<p>Questo e&#8217; quello che succede in molte aziende dove spesso i project manager (cosi&#8217; amano definirsi), che in alcuni casi non hanno neanche mai seriamente progettato e sviluppato applicazioni, pretendono di vedere i risultati in tempi molto brevi.. magari preferiscono vedere la bozza del software semi funzionante, anche se concepita male, piuttosto che dare agli analisti/sviluppatori tempi adeguati di progettazione e analisi che migliorerebbero inevitabilmente la qualita&#8217; e la stabilita&#8217; finale dei software prodotti.</p>
<p>E&#8217; chiaro a tutti noi che se vengono fornite specifiche complete e precise, e c&#8217;e&#8217; il tempo di progettare l&#8217;intero <a title="Ciclo di vita del software" href="http://it.wikipedia.org/wiki/Ciclo_di_vita_del_software" target="_blank">ciclo di vita del software</a>, utilizzando pattern validi e magari linguaggi di modellazione, lo sviluppo e la manutenzione del codice sarebbe molto piu&#8217; semplice.  Anche uno sviluppatore meno esperto, con queste premesse, riuscirebbe a cimentarsi senza particolari problemi; ma purtroppo non e&#8217; sempre cosi&#8217; e si preferisce programmare e basta, progettare mentre si programma ed inevitabilmente nascono software che non stanno in piedi.</p>
<p>Sara&#8217; la senzazione di risparmio? Sara&#8217; che meglio un uovo oggi che una gallina domani? mah..</p>
<p>Progettare software e&#8217; un investimento, se si vuole fare le cose di fretta e senza riflettere si finisce per buttare via soldi e tempo, oltre a creare un prodotto di scarsa qualita&#8217;; poi noi ci troveremo a mettere continuamente mano a progetti pieni di toppe e ripieghi che per sistemare un bug impieghiamo giornate di lavoro!</p>
<p>Un software ben progettato e&#8217; piu&#8217; stabile e architetturalmente espandibile, mantenibile e il costo finale sara&#8217; inferiore.. quindi perche&#8217; non vogliamo attenerci a queste semplice regole?</p>
<p><!-- message --></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.programmazione-web.com%2Fprogettare-software-o-programmare-progettando.php&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/progettare-software-o-programmare-progettando.php/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Framework CodeIgniter guida alla creazione di un blog</title>
		<link>http://www.programmazione-web.com/creazione-blog-con-framework-codeigniter.php</link>
		<comments>http://www.programmazione-web.com/creazione-blog-con-framework-codeigniter.php#comments</comments>
		<pubDate>Sat, 15 Mar 2008 17:55:22 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
				<category><![CDATA[Applicazioni]]></category>
		<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[Design pattern]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Open-source]]></category>
		<category><![CDATA[Programmare Php]]></category>
		<category><![CDATA[RAD]]></category>
		<category><![CDATA[Sviluppo applicazioni]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[blog con framework codeigniter]]></category>
		<category><![CDATA[creazione applicazioni codeigniter.]]></category>
		<category><![CDATA[creazione blog codeingniter]]></category>
		<category><![CDATA[guida codeigniter]]></category>
		<category><![CDATA[tutorial codeigniter]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/creazione-blog-con-framework-codeigniter.php</guid>
		<description><![CDATA[Tutorial passo passo per la creazione di un blog in MVC, guida alla creazione di un blog con Codeigniter utilizzando il pattern MVC.]]></description>
			<content:encoded><![CDATA[<p><span style="font-weight: bold">Guida alla creazione di un blog con il framework codeigniter</span></p>
<p>Ecco a voi un&#8217;altro tutorial di sviluppo web, piú complesso rispetto al <a title="Tutorial con il framework codeigniter" href="http://www.programmazione-web.com/tutorial-con-il-framework-codeigniter.php">precedente</a>, utilizzando il framework CodeIgniter. Questa guida é una bozza per la creazione di un semplice blog sfruttando le potenzialitá di questo versatile e potente framework, che come sappiamo stá maturando sempre piú interesse nel mondo dagli sviluppatori del web che credono fermamente nel pattern di sviluppo MVC.</p>
<p>Questo tutorial ha preso spunto quasi interamente dal tutorial di <em>Michael Wales</em> <a title="michael wale - live tutorial codeigniter blog" href="http://www.michaelwales.com/2007/09/live-tutorial-codeigniter-blog/">&#8220;Live tutorial codeigniter blog&#8221;</a>, il quale presenta secondo me alcuni errori e imprecisioni,   come ad esempio il non utilizzo delle classi che estendono il Model per fare interfacciarsi al database (pattern MVC), implementate in modo &#8220;sporco&#8221; direttamente all&#8217;interno del controller.<br />
Inoltre ho esteso qualche funzionalitá non implementata come: la visione dei singoli post del blog, i commenti sui post, il logout.. ecc</p>
<p>Come al solito per iniziare a programmare scaricate il pacchetto di codeigniter sul <a title="Download framework codeigniter" href="http://codeigniter.com/download.php">sito ufficiale</a>, al momento giunto alla versione 1.6.1 e scompattate tutto il contenuto dentro la cartella principale del vostro web server (solitamente htdocs), e rinominate la cartella in myblog.</p>
<p><strong>Configurazioni del framework</strong></p>
<p>Dentro la cartella <strong>system/application/config</strong> apportate le seguenti modifiche di configurazione ai files del framework, facendo particolare attenzione nei paramentri di configurazione del database che potrebbero differire da quelli che vi ho postato. Per capire cosa sono queste variabili consultate i commenti all&#8217;interno dei file di configurazione o fate riferimento diretto al <a title="Codeigniter user guide" href="http://codeigniter.com/user_guide/" target="_blank">manuale ufficiale di codeigniter.</a></p>
<p style="font-weight: bold">autoload.php</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$autoload</span><span class="br0">&#91;</span><span class="st0">&#8216;libraries&#8217;</span><span class="br0">&#93;</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;database&#8217;</span>, <span class="st0">&#8216;session&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$autoload</span><span class="br0">&#91;</span><span class="st0">&#8216;helper&#8217;</span><span class="br0">&#93;</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span><span class="st0">&#8216;url&#8217;</span>, <span class="st0">&#8216;form&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p style="font-weight: bold">config.php:</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;base_url&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp;= <span class="st0">&quot;http://localhost/myblog&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;log_threshold&#8217;</span><span class="br0">&#93;</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;encryption_key&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;myblog&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;sess_cookie_name&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp;= <span class="st0">&#8216;myblog_sess&#8217;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;sess_expiration&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp; &nbsp; &nbsp;= <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;sess_encrypt_cookie&#8217;</span><span class="br0">&#93;</span> &nbsp; &nbsp;= <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;global_xss_filtering&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$config</span><span class="br0">&#91;</span><span class="st0">&#8216;compress_output&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
</ol>
</div>
<p style="font-weight: bold">database.php</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;hostname&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;localhost&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;username&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;root&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;password&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="re0">$db</span><span class="br0">&#91;</span><span class="st0">&#8216;default&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;database&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;myblog&quot;</span>;</div>
</li>
</ol>
</div>
<p style="font-weight: bold">routes.php</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="re0">$route</span><span class="br0">&#91;</span><span class="st0">&#8216;default_controller&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;blog&quot;</span>;</div>
</li>
</ol>
</div>
<p><strong>Creazione del database del nostro blog (myblog)</strong></p>
<p>Questo é il dump del mio database mysql, contenente le query di creazione delle tabelle necessarie e alcuni dati.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">SET</span> SQL_MODE=<span class="st0">&quot;NO_AUTO_VALUE_ON_ZERO&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`comments`</span> <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`id`</span> smallint<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="st0">`post_id`</span> smallint<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`name`</span> varchar<span class="br0">&#40;</span><span class="nu0">60</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`email`</span> varchar<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`body`</span> text collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`created_on`</span> varchar<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span><span class="st0">`id`</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">KEY</span> <span class="st0">`post_id`</span> <span class="br0">&#40;</span><span class="st0">`post_id`</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span> ENGINE=MyISAM <span class="kw1">DEFAULT</span> CHARSET=latin1 COLLATE=latin1_general_ci COMMENT=<span class="st0">&#8216;Comments on Posts&#8217;</span> <span class="kw1">AUTO_INCREMENT</span>=<span class="nu0">1</span> ;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`posts`</span> <span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2"><span class="st0">`id`</span> smallint<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`title`</span> varchar<span class="br0">&#40;</span><span class="nu0">255</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`slug`</span> varchar<span class="br0">&#40;</span><span class="nu0">255</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`author_id`</span> smallint<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`body`</span> text collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="st0">`created_on`</span> varchar<span class="br0">&#40;</span><span class="nu0">10</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span><span class="st0">`id`</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">KEY</span> <span class="st0">`author_id`</span> <span class="br0">&#40;</span><span class="st0">`author_id`</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span> ENGINE=MyISAM &nbsp;<span class="kw1">DEFAULT</span> CHARSET=latin1 COLLATE=latin1_general_ci COMMENT=<span class="st0">&#8216;Blog Posts&#8217;</span> <span class="kw1">AUTO_INCREMENT</span>=<span class="nu0">5</span> ;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`posts`</span> <span class="br0">&#40;</span><span class="st0">`id`</span>, <span class="st0">`title`</span>, <span class="st0">`slug`</span>, <span class="st0">`author_id`</span>, <span class="st0">`body`</span>, <span class="st0">`created_on`</span><span class="br0">&#41;</span> <span class="kw1">VALUES</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">1</span>, <span class="st0">&#8216;test1&#8242;</span>, <span class="st0">&#8216;test1&#8242;</span>, <span class="nu0">1</span>, <span class="st0">&#8216;test&#8217;</span>, <span class="st0">&#8217;1205594625&#8242;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">2</span>, <span class="st0">&#8216;test2&#8242;</span>, <span class="st0">&#8216;test2&#8242;</span>, <span class="nu0">1</span>, <span class="st0">&#8216;test2&#8242;</span>, <span class="st0">&#8217;1205594637&#8242;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">3</span>, <span class="st0">&#8216;test3&#8242;</span>, <span class="st0">&#8216;test3&#8242;</span>, <span class="nu0">1</span>, <span class="st0">&#8216;test3&#8242;</span>, <span class="st0">&#8217;1205594651&#8242;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">4</span>, <span class="st0">&#8216;test4&#8242;</span>, <span class="st0">&#8216;test4&#8242;</span>, <span class="nu0">1</span>, <span class="st0">&#8216;test4&#8242;</span>, <span class="st0">&#8217;1205596145&#8242;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">CREATE</span> <span class="kw1">TABLE</span> <span class="st0">`users`</span> <span class="br0">&#40;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`id`</span> smallint<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw1">UNSIGNED</span> <span class="kw1">NOT</span> <span class="kw1">NULL</span> <span class="kw1">AUTO_INCREMENT</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`username`</span> varchar<span class="br0">&#40;</span><span class="nu0">20</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`password`</span> varchar<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li2">
<div class="de2"><span class="st0">`email`</span> varchar<span class="br0">&#40;</span><span class="nu0">100</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="st0">`display_name`</span> varchar<span class="br0">&#40;</span><span class="nu0">40</span><span class="br0">&#41;</span> collate latin1_general_ci <span class="kw1">NOT</span> <span class="kw1">NULL</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">PRIMARY</span> <span class="kw1">KEY</span> &nbsp;<span class="br0">&#40;</span><span class="st0">`id`</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#41;</span> ENGINE=MyISAM &nbsp;<span class="kw1">DEFAULT</span> CHARSET=latin1 COLLATE=latin1_general_ci COMMENT=<span class="st0">&#8216;Registered Users Information&#8217;</span> <span class="kw1">AUTO_INCREMENT</span>=<span class="nu0">3</span> ;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">INSERT</span> <span class="kw1">INTO</span> <span class="st0">`users`</span> <span class="br0">&#40;</span><span class="st0">`id`</span>, <span class="st0">`username`</span>, <span class="st0">`password`</span>, <span class="st0">`email`</span>, <span class="st0">`display_name`</span><span class="br0">&#41;</span> <span class="kw1">VALUES</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">1</span>, <span class="st0">&#8216;admin&#8217;</span>, <span class="st0">&#8216;admin&#8217;</span>, <span class="st0">&#8221;</span>, <span class="st0">&#8221;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#40;</span><span class="nu0">2</span>, <span class="st0">&#8216;test&#8217;</span>, <span class="st0">&#8216;test&#8217;</span>, <span class="st0">&#8216;test@test.it&#8217;</span>, <span class="st0">&#8216;test&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Importate questo database  come preferite, tramite phpmyadmin o tramite la shell di mysql utilizzando il comando source. Vi ho inserito alcuni dati cosí potete subito visualizzare alcuni post e loggarvi e rendervi conto subito del funzionamento dell&#8217;applicazione.</p>
<p>Partiamo innanzitutto con il controller principale ovvero la classe blog che come abbiamo settato parte di default al momento dell&#8217;avvio di questa applicazione. Questa classe di nome <strong>blog.php</strong> andrá salvata all&#8217;interno di  <strong>system/application/controllers</strong>.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;BASEPATH&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="st0">&#8216;No direct script access allowed&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">class</span> Blog <span class="kw2">extends</span> Controller <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// costruttore</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> Blog<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; parent::<span class="me2">Controller</span><span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">//richiama il costruttore padre</span></div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// funzione principale che richiama la vista principale front con la lista dei post</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> index<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="co1">// parametri per il titolo del blog</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;Questo e&#8217; il mio blog&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;heading&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&quot;Header del mio blog&quot;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">session</span>-&gt;<span class="me1">userdata</span><span class="br0">&#40;</span><span class="st0">&#8216;logged_in&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;user&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;logged_in&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">TRUE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;user&#8217;</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#8216;logged_in&#8217;</span><span class="br0">&#93;</span> = <span class="kw2">FALSE</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">database</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">model</span><span class="br0">&#40;</span><span class="st0">&#8216;blog_model&#8217;</span><span class="br0">&#41;</span>; <span class="co1">// richiamo il modello</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$this</span>-&gt;<span class="me1">blog_model</span>-&gt;<span class="me1">get_posts</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;blog/front&#8217;</span>, <span class="re0">$data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// Metodo per visualizzare un post del blog</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> article<span class="br0">&#40;</span><span class="re0">$id</span> = <span class="kw2">false</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">helper</span><span class="br0">&#40;</span><span class="st0">&#8216;url&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>!<span class="re0">$id</span><span class="br0">&#41;</span> redirect<span class="br0">&#40;</span><span class="st0">&#8216;blog&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">database</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">model</span><span class="br0">&#40;</span><span class="st0">&#8216;blog_model&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;blog&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$this</span>-&gt;<span class="me1">blog_model</span>-&gt;<span class="me1">get_post</span><span class="br0">&#40;</span><span class="re0">$id</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;blog/article&#8217;</span>, <span class="re0">$data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// metodo per l&#8217;inserimento di un post nel blog</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> write<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">session</span>-&gt;<span class="me1">userdata</span><span class="br0">&#40;</span><span class="st0">&#8216;logged_in&#8217;</span><span class="br0">&#41;</span> === <span class="kw2">FALSE</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; redirect<span class="br0">&#40;</span><span class="st0">&#8216;blog&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">library</span><span class="br0">&#40;</span><span class="st0">&#8216;validation&#8217;</span><span class="br0">&#41;</span>; <span class="co1">// libreria per i controlli sui campi</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$rules</span><span class="br0">&#91;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;trim|required|min_length[3]|max_length[255]&#8216;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$rules</span><span class="br0">&#91;</span><span class="st0">&#8216;body&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;trim|required&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$this</span>-&gt;<span class="me1">validation</span>-&gt;<span class="me1">set_rules</span><span class="br0">&#40;</span><span class="re0">$rules</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$fields</span><span class="br0">&#91;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;title&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$fields</span><span class="br0">&#91;</span><span class="st0">&#8216;body&#8217;</span><span class="br0">&#93;</span> = <span class="st0">&#8216;body&#8217;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$this</span>-&gt;<span class="me1">validation</span>-&gt;<span class="me1">set_fields</span><span class="br0">&#40;</span><span class="re0">$fields</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">validation</span>-&gt;<span class="me1">run</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="co1">// se tutto e&#8217; valido</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">helper</span><span class="br0">&#40;</span><span class="st0">&#8216;date&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">// array di dati in post</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re0">$insert</span> = <a href="http://www.php.net/array"><span class="kw3">array</span></a><span class="br0">&#40;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="st0">&#8216;title&#8217;</span> =&gt; <span class="re0">$this</span>-&gt;<span class="me1">input</span>-&gt;<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#8216;slug&#8217;</span> =&gt; url_title<span class="br0">&#40;</span><span class="re0">$this</span>-&gt;<span class="me1">input</span>-&gt;<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#8216;author_id&#8217;</span> =&gt; <span class="re0">$this</span>-&gt;<span class="me1">session</span>-&gt;<span class="me1">userdata</span><span class="br0">&#40;</span><span class="st0">&#8216;logged_in&#8217;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#8216;body&#8217;</span> =&gt; <span class="re0">$this</span>-&gt;<span class="me1">input</span>-&gt;<span class="me1">post</span><span class="br0">&#40;</span><span class="st0">&#8216;body&#8217;</span><span class="br0">&#41;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="st0">&#8216;created_on&#8217;</span> =&gt; now<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">db</span>-&gt;<span class="me1">insert</span><span class="br0">&#40;</span><span class="st0">&#8216;posts&#8217;</span>, <span class="re0">$insert</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; redirect<span class="br0">&#40;</span><span class="st0">&#8216;blog&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;blog/write&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">function</span> comments<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">db</span>-&gt;<span class="me1">where</span><span class="br0">&#40;</span><span class="st0">&#8216;post_id&#8217;</span>, <span class="re0">$this</span>-&gt;<span class="me1">uri</span>-&gt;<span class="me1">segment</span><span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$data</span><span class="br0">&#91;</span><span class="st0">&#8216;query&#8217;</span><span class="br0">&#93;</span> = <span class="re0">$this</span>-&gt;<span class="me1">db</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;comments&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$this</span>-&gt;<span class="me1">load</span>-&gt;<span class="me1">view</span><span class="br0">&#40;</span><span class="st0">&#8216;blog/comments&#8217;</span>, <span class="re0">$data</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> comment_insert<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re0">$this</span>-&gt;<span class="me1">db</span>-&gt;<span class="me1">insert</span><span class="br0">&#40;</span><span class="st0">&#8216;comments&#8217;</span>, <span class="re0">$_POST</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;redirect<span class="br0">&#40;</span><span class="st0">&#8216;blog/comments/&#8217;</span>.<span class="re0">$_POST</span><span class="br0">&#91;</span><span class="st0">&#8216;post_id&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Come potete vedere  rispetto al tutorial di Michael, la parte relativa all&#8217;interfacciamento al database, é stata delegata ad un&#8217;altra classe chiamata &#8220;Blog_model&#8221; che estende naturalmente la classe di default &#8220;Model&#8221;, rispettando quindi quello che il pattern MVC consiglia di fare; inoltre ho inserito due metodi per la gestione dei commenti sui post del blog: uno per la visualizzazione e uno per l&#8217;inserimento di nuovi commenti.<br />
Il nome del file che si interfaccia al database per la lettura dei post del blog é <strong>blog_model.php </strong>e sará contenuto, come potete immaginare, nella cartella <span style="font-weight: bold">system/application/models/</span>.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span> <span class="br0">&#40;</span>!<a href="http://www.php.net/defined"><span class="kw3">defined</span></a><span class="br0">&#40;</span><span class="st0">&#8216;BASEPATH&#8217;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <a href="http://www.php.net/exit"><span class="kw3">exit</span></a><span class="br0">&#40;</span><span class="st0">&#8216;No direct script access allowed&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">class</span> Blog_model <span class="kw2">extends</span> Model <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="co1">// preleva tutti i post dal db</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">function</span> get_posts<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp;<span class="re0">$query</span> = <span class="re0">$this</span>-&gt;<span class="me1">db</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re0">$query</span>-&gt;<span class="me1">result_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">as</span> <span class="re0">$row</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re0">$result</span><span class="br0">&#91;</span><span class="br0">&#93;</span> = <span class="re0">$row</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">return</span> <span class="re0">$result</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">// preleva un singolo post</span></div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">function</span> get_post<span class="br0">&#40;</span><span class="re0">$post_id</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$query</span> = <span class="re0">$this</span>-&gt;<span class="me1">db</span>-&gt;<span class="me1">where</span><span class="br0">&#40;</span><span class="st0">&#8216;id&#8217;</span>, <span class="re0">$post_id</span><span class="br0">&#41;</span>-&gt;<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#8216;posts&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re0">$result</span> = <span class="re0">$query</span>-&gt;<span class="me1">row_array</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;<span class="kw1">return</span> <span class="re0">$result</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p>Ora passiamo alle parte di viste che vengono richiamate dal Blog controller, utilizzando i dati forniti dal modello attraverso l&#8217;interrogazioni del database. Questi files devono essere salvati nella cartella  <strong>system/application/views/</strong> dentro la sottocartella creata di nome <span style="font-weight: bold">blog/</span> .</p>
<p><strong>front.php<br />
</strong>E&#8217; la vista principale, che ci permette di effettuare il login e visualizzare i post del blog.</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;h1&gt;&lt; ?=<span class="re0">$title</span>;?&gt;&lt;/h1&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2">&lt;h2&gt;&lt; ?=<span class="re0">$heading</span>;?&gt;&lt;/h2&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt; ?php</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="kw1">if</span> <span class="br0">&#40;</span><span class="re0">$user</span><span class="br0">&#91;</span><span class="st0">&#8216;logged_in&#8217;</span><span class="br0">&#93;</span> === <span class="kw2">TRUE</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> anchor<span class="br0">&#40;</span><span class="st0">&#8216;user/logout&#8217;</span>, <span class="st0">&#8216;Logout&#8217;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&#8216;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"><span class="st0">&lt; ?</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">if(isset($posts)){</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp;foreach ($posts as $id =&gt; $post) {</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;echo &#8216;</span>Post <span class="co2">#&#8217; . $id . &#8216;: &#8216;;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> anchor<span class="br0">&#40;</span><span class="st0">&#8216;blog/article/&#8217;</span> . <span class="re0">$id</span>, <span class="re0">$post</span><span class="br0">&#91;</span><span class="st0">&#8216;title&#8217;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; <a href="http://www.php.net/echo"><span class="kw3">echo</span></a> <span class="st0">&#8221;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">?&gt;</span></div>
</li>
</ol>
</div>
<p><strong>write.php<br />
</strong>La form per l&#8217;inserimento dei post del blog, accessibile come possiamo vedere dal controller solo agli utenti autenticati.<strong><br />
</strong></p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">&lt; ?= form_open<span class="br0">&#40;</span><span class="st0">&#8216;blog/write&#8217;</span><span class="br0">&#41;</span>; <span class="kw2">?&gt;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;label <span class="kw1">for</span>=<span class="st0">&quot;title&quot;</span>&gt;Title:&lt;/label&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;input id=<span class="st0">&quot;title&quot;</span> name=<span class="st0">&quot;title&quot;</span> size=<span class="st0">&quot;50&quot;</span> type=<span class="st0">&quot;text&quot;</span> /&gt;</div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&lt;label <span class="kw1">for</span>=<span class="st0">&quot;body&quot;</span>&gt;Body:&lt;/label&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;textarea id=<span class="st0">&quot;body&quot;</span> cols=<span class="st0">&quot;60&quot;</span> rows=<span class="st0">&quot;10&quot;</span> name=<span class="st0">&quot;body&quot;</span>&gt;&lt;/textarea&gt;</div>
</li>
</ol>
</div>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.programmazione-web.com%2Fcreazione-blog-con-framework-codeigniter.php&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/creazione-blog-con-framework-codeigniter.php/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Programmare il Web seguendo MVC</title>
		<link>http://www.programmazione-web.com/programmare-web-seguendo-mvc.php</link>
		<comments>http://www.programmazione-web.com/programmare-web-seguendo-mvc.php#comments</comments>
		<pubDate>Sun, 09 Mar 2008 13:05:54 +0000</pubDate>
		<dc:creator>neryo</dc:creator>
				<category><![CDATA[Applicazioni]]></category>
		<category><![CDATA[Design pattern]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Sviluppo applicazioni]]></category>
		<category><![CDATA[model view controller.]]></category>
		<category><![CDATA[Modello vista controllore]]></category>
		<category><![CDATA[mvc in php]]></category>
		<category><![CDATA[programmazione ad oggetti]]></category>
		<category><![CDATA[programmazione mvc]]></category>
		<category><![CDATA[web MVC]]></category>

		<guid isPermaLink="false">http://www.programmazione-web.com/programmare-web-seguendo-mvc.php</guid>
		<description><![CDATA[MVC stá per Model View Controller in italiano Modello-Vista-Controllore é un design pattern architetturale three tier, originariamente impiegato nel linguaggio smalltalk, (ora portato in tutti i linguaggi ad oggetti), ovvero un metodo su come strutturare le applicazioni in tre parti utilizzando la programmazione ad oggetti.]]></description>
			<content:encoded><![CDATA[<p><strong>Programmare il Web seguendo MVC </strong></p>
<p>Qualcuno di voi appena ha letto l&#8217;acronimo MVC si sará subito posto qualche domanda&#8230; alcuni non l&#8217;avranno nemmeno sentito nominare&#8230; <strong>MVC</strong> stá per <a title="Model View Controller" href="http://it.wikipedia.org/wiki/Model-View-Controller" target="_blank">Model View Controller</a> in italiano <strong>Modello-Vista-Controllore </strong>é un <a title="Design Pattern" href="http://it.wikipedia.org/wiki/Design_pattern" target="_blank">design pattern</a> architetturale <em>three tier</em>, originariamente impiegato nel linguaggio <em>smalltalk</em>, (ora portato in tutti i linguaggi ad oggetti), ovvero un metodo su come strutturare le applicazioni in tre parti utilizzando la programmazione ad oggetti.</p>
<p>Il compito di questa strutturazione é quello di rendere indipendenti, disaccoppiando le parti software tra loro, adibite al controllo, all&#8217;accesso ai dati e alle viste di presentazione degli stessi.<br />
Il pattern é basato quindi sulla separazione dei compiti fra  le classi che interpretano tre ruoli principali:</p>
<ul>
<li>Il <strong>modello</strong> gestisce i dati e fornisce i metodi per accedervi in modo astratto e consistente, solitamente la progettazione del modello è guidata sostanzialmente dalla struttura del database e quindi sostanzialmente dalle modalità di accesso ad esso;</li>
<li>La <strong>vista </strong>si incarica di visualizzare i dati o un porzione di essi, forniti dal controllore attraverso un opportuno modello, in base ad una specifica formattazione rappresentante un certo contesto applicativo, che potrá essere un lista di record, una form per l&#8217;inserimento e la modifica, un grafico, o qualsiasi rappresentazione si vuole dare a questi dati;</li>
<li>Il <strong>controllore</strong> é il &#8220;motore&#8221; dell&#8217;applicazione, riceve i comandi dall&#8217;utente, generalmente attraverso la vista utilizzando i propri metodi e li utilizza per richiamare in modo adeguato gli altri due componenti, permettendo quindi al modello di estrarre i dati, che vengono passati per la visualizzazione alle opportune viste. In pratica il controllere si occupa di rimappare le azioni effettuate dall&#8217;utente alle risposte dell&#8217;applicazione, che lavoreranno sui modelli e le viste in modo adeguato.</li>
</ul>
<p><a title="MVC Modello Vista Controllore" href="http://www.programmazione-web.com/wp-content/uploads/2008/03/ash-mvc-architecture1.gif"></a></p>
<p style="text-align: center"><a title="MVC Modello Vista Controllore" href="http://www.programmazione-web.com/wp-content/uploads/2008/03/ash-mvc-architecture1.gif"><img src="http://www.programmazione-web.com/wp-content/uploads/2008/03/ash-mvc-architecture1.gif" alt="MVC Modello Vista Controllore" /></a></p>
<p style="text-align: center"><a title="MVC Modello Vista Controllore" href="http://www.programmazione-web.com/wp-content/uploads/2008/03/ash-mvc-architecture1.gif"> </a></p>
<p><a title="MVC Modello Vista Controllore" href="http://www.programmazione-web.com/wp-content/uploads/2008/03/ash-mvc-architecture1.gif"></a><strong>Questo approccio ha numerevoli vantaggi:</strong></p>
<ul>
<li>Indipendenza giá citata delle varie componenti, che permette di lavorare separatamente in team (con competenze diverse) alle parti software astraendone al meglio il funzionamento.</li>
<li>Possibilitá  di scrivere viste e controllori diversi utilizzando lo stesso modello di acceso ai dati e quindi riutilizzare parte del lavoro giá fatto.</li>
<li>Avere il controllore separato dal resto dell&#8217;applicazione rende la sua progettazione piú semplice permettendo di concentrare gli sforzi sulla logica del funzionamento.</li>
<li>Obbliga gli sviluppatori a rispettare uno standard nella stesura  del progetto, che ne facilita poi la comprensione e le successive implementazioni, soprattutto utilizzabile in progetti di medie/grandi dimensioni.</li>
<li>Software più flessibile, mantenibile ed aggiornabile nel tempo.</li>
</ul>
<p><strong>Ha anche alcuni svantaggi:</strong></p>
<ul>
<li>Adatto soprattutto a progetti medio/grandi.</li>
<li>Architettura sostanzialmente complessa.</li>
<li>Flessibilitá dipendente dal framework utilizzato.</li>
</ul>
<p>Per iniziare ad addentrarsi in questo metodo, esistono tantissimi <a title="Framework" href="http://it.wikipedia.org/wiki/Framework" target="_blank">framework</a> open-source per utilizzare il pattern di sviluppo MVC, come potete vedere da <a title="MVC Frameworks Written in PHP" href="http://www.phpwact.org/php/mvc_frameworks" target="_blank">questa lista</a>. Alcuni di essi sono piuttosto famosi come <a title="Zend Framework" href="http://framework.zend.com/" target="_blank">Zend Framework</a>, <a title="Code Igniter Framework" href="http://codeigniter.com/" target="_blank">CodeIgniter</a>, <a title="Kohana Php framework" href="http://kohanaphp.com" target="_blank">Kohana Php</a>, <a title="CakePHP MVC framework" href="http://www.cakephp.org/" target="_blank">CakePhp</a>, <a title="Symfony MVC framework" href="http://www.symfony-project.org/" target="_blank">Symfony</a>, <a title="Php MVC framework" href="http://www.phpmvc.net/" target="_blank">PHPMVC</a> ecc.. e sicuramente alcuni di voi li hanno utilizzati o almeno sentiti nominare.</p>
<p>Il piú é riuscire a capire quale framework MVC sia il piu&#8217; adatto per ridurre e migliorare il nostro lavoro e rendere le nostre applicazoni piú snelle e ben organizzate, facilitandone in futuro il mantenimento e le aggiunte di funzionalitá.</p>
<p>Sicuramente nessuno puó sapere a priori quale sia il migliore per il vostro utilizzo, é una scelta abbastanza soggettiva, a parte che deve ricadere sui framework che supportano PHP5.. Ognuno di noi deve capire le sue necessitá e provarli sulla propria pelle o meglio sui propri progetti e magari poi portare le proprie esperienze su questo blog!</p>
<p> <img src='http://www.programmazione-web.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Riferimenti e spunti:<br />
</strong><a title="Model View Controller" href="http://it.wikipedia.org/wiki/Model-View-Controller" target="_blank">http://it.wikipedia.org/</a><br />
<a title="Introduzione ai framework MVC" href="http://www.phpday.it/site/phpday-2006/talks/developer/ferrante-enriques-introduzione-ai-framework-mvc/" target="_blank">http://www.phpday.it</a></p>
<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.programmazione-web.com%2Fprogrammare-web-seguendo-mvc.php&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:80px;" allowTransparency="true"></iframe>]]></content:encoded>
			<wfw:commentRss>http://www.programmazione-web.com/programmare-web-seguendo-mvc.php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

