
<?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>Waanser &#187; Framework</title>
	<atom:link href="http://www.waanser.com/category/php/framework/feed" rel="self" type="application/rss+xml" />
	<link>http://www.waanser.com</link>
	<description>Un blog utilisant WordPress</description>
	<lastBuildDate>Wed, 07 Jul 2010 21:54:44 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Plateforme Php: CodeIgniter &amp; Smarty</title>
		<link>http://www.waanser.com/php/framework/codeigniter/255-plateforme-php-partie-1-codeigniter-et-smarty.html</link>
		<comments>http://www.waanser.com/php/framework/codeigniter/255-plateforme-php-partie-1-codeigniter-et-smarty.html#comments</comments>
		<pubDate>Fri, 01 May 2009 22:38:27 +0000</pubDate>
		<dc:creator>tilkc</dc:creator>
				<category><![CDATA[CodeIgniter]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=255</guid>
		<description><![CDATA[Dans ce tutoriel nous allons donc intégrer Smarty pour CodeIgniter afin de faciliter le développement d&#8217;une application WEB. Installation Nous allons télécharger WampServeur, CodeIgniter et Smarty. Pour WampServeur, suivez les instructions d&#8217;installation. Pour CodeIgniter et Smarty il suffit de dezipper les fichiers. Dans WampServeur nous allons créer notre dossier de base de notre site C:/wamp/www/tutorielwaanser [...]]]></description>
			<content:encoded><![CDATA[<p>Dans ce tutoriel nous allons donc intégrer Smarty pour CodeIgniter afin de faciliter le développement d&#8217;une application WEB.<br />
<span id="more-255"></span></p>
<hr />
<h1>Installation</h1>
<p>Nous allons télécharger WampServeur, CodeIgniter et Smarty.</p>
<p>Pour <a title="Téléchargement de WampServeur" href="http://www.wampserver.com/download.php" target="_blank">WampServeur</a>, suivez les instructions d&#8217;installation.<br />
Pour <a title="Téléchargement de CodeIgniter" href="http://codeigniter.com/downloads/" target="_blank">CodeIgniter</a> et <a title="Téléchargement de Smarty" href="http://www.smarty.net/" target="_blank">Smarty</a> il suffit de dezipper les fichiers.</p>
<p>Dans WampServeur nous allons créer notre dossier de base de notre site<br />
C:/wamp/www/tutorielwaanser</p>
<hr />
<h1>Intégration de Smarty</h1>
<p>Dans le fichier index.php ajouter la constante :<strong> WEBSITE_PATH</strong></p>
<pre class="brush: php">
if (strpos($system_folder, &#039;/&#039;) === FALSE) {

if (function_exists(&#039;realpath&#039;) AND @realpath(dirname(__FILE__)) !== FALSE)
{
$system_folder = realpath(dirname(__FILE__)).&#039;/&#039;.$system_folder;
}
} else {
// Swap directory separators to Unix style for consistency
$system_folder = str_replace(&quot;\\&quot;, &quot;/&quot;, $system_folder);
}

define(&#039;WEBSITE_PATH&#039;, realpath(dirname(__FILE__)).&#039;/&#039;.$application_folder );
</pre>
<p>Dans le fichier <strong>system/application/config/config.php</strong> modifier la variable :</p>
<pre class="brush: php">
$config[&#039;subclass_prefix&#039;] = &#039;WAANSER_&#039;;
</pre>
<p><strong>Créer les arborescences suivantes :<br />
- system/smarty/libs </strong>et copier  les dossiers<strong> Internals et plugins de Smarty</strong><strong><br />
</strong></p>
<p><strong>system/application/smarty/plugins<br />
system/application/smarty/tpl</strong></p>
<p><strong>system/application/tmp/smarty/cache<br />
system/application/tmp/smarty/templates_c</strong></p>
<p>Renommer le fichier <strong>Smarty.class.php en Smarty.php</strong><br />
<strong>Copier les fichier Smarty.php, Smarty_Compiler.class.php et Config_File.class.php</strong> dans le dossier <strong>system/libraries</strong></p>
<hr />Dans le fichier <strong>system/libraries/Smarty.php</strong> couper les constantes et copier les dans le fichier <strong>application/config/constants.php</strong></p>
<pre class="brush: php">
//  ******* Smarty ********
define(&#039;DIR_SEP&#039;, DIRECTORY_SEPARATOR);
define(&#039;SMARTY_DIR&#039;, BASEPATH.&#039;smarty&#039;.DIRECTORY_SEPARATOR);
define(&#039;SMARTY_CORE_DIR&#039;, BASEPATH.&#039;smarty/libs/internals&#039; . DIRECTORY_SEPARATOR);

define(&#039;SMARTY_PHP_PASSTHRU&#039;,   0);
define(&#039;SMARTY_PHP_QUOTE&#039;,      1);
define(&#039;SMARTY_PHP_REMOVE&#039;,     2);
define(&#039;SMARTY_PHP_ALLOW&#039;,      3);
</pre>
<p>Ensuite nous devons créer les libraries <strong>WAANSER_controller</strong> et <strong>WAANSER_smarty </strong>dans le dossier <strong>system\application\libraries</strong></p>
<pre class="brush: php">

class WAANSER_Controller extends Controller {

/**
* @desc	for template
* @var 	obj smarty
*/
public $oMySmarty = null;

public function Controller() {

parent::Controller();

$this-&gt;loadSmarty();
}

public function loadSmarty() {

$this-&gt;oMySmarty = &amp;amp;amp;amp;amp;amp;load_class(&#039;Smarty&#039;);
}

}
</pre>
<p>Ce fichier va nous permettre d&#8217;étendre le contrôleur d&#8217;origine, pour récupérer tous le processus de chargement des classes, et nous ajoutons un attribut $oMySmarty qui sera un objet de la classe Smarty.</p>
<p>Avec cet objet on pourra changer de générateur de template.<br />
On peut, même si c&#8217;est moche <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   utiliser le générateur de templates par défaut en même temps que le générateur Smarty.</p>
<pre class="brush: php">

class WAANSER_Smarty extends Smarty {

/**
* @desc	class constructor
* @version	1.0.0
* @date	20090307
*/
public function __construct() {

parent::Smarty();
$this-&gt;setParams();
}

/**
* @desc 	initialise les variables pour smarty
* @version 1.0.0
* @date	20090307
*/

public function setParams() {
$this-&gt;template_dir = APPPATH.&#039;smarty/tpl&#039;;
$this-&gt;compile_dir = APPPATH.&#039;tmp/smarty/templates_c&#039;;
$this-&gt;plugins_dir = array(APPPATH.&#039;smarty/libs/plugins&#039;, APPPATH.&#039;smarty/plugins&#039;);
}

}

?&gt;
</pre>
<p>Il nous reste a changer le fichier welcome dans le dossier <strong>system\application\controllers</strong>, il suffit juste de changer l&#8217;appel au fichier parent.</p>
<pre class="brush: php">

class Welcome extends WAANSER_Controller {

function Welcome()
{
parent::Controller();
}

function index()
{
$this-&gt;oMySmarty-&gt;assign(&#039;TEST_WAANSER&#039;, &#039;Smarty est OK&#039;);
$this-&gt;oMySmarty-&gt;display(&#039;welcome.tpl&#039;);
//$this-&gt;load-&gt;view(&#039;welcome_message&#039;);
}
}
</pre>
<p>Et de lui ajouter une variable avec la methode <strong>assign </strong>et de lui indiquer le template a afficher avec la methode <strong>display</strong>.</p>
<p>Ensuite ajouter le fichier <strong>welcome.tpl</strong> dans le dossier <strong>system\application\smarty\tpl</strong></p>
<pre class="brush: php">

&lt;p&gt;{$TEST_WAANSER}&lt;/p&gt;
</pre>
<p>Au prochain Tuto <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/codeigniter/255-plateforme-php-partie-1-codeigniter-et-smarty.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Code igniter et la base de données</title>
		<link>http://www.waanser.com/php/framework/1337-code-igniter-et-la-base-de-donnees.html</link>
		<comments>http://www.waanser.com/php/framework/1337-code-igniter-et-la-base-de-donnees.html#comments</comments>
		<pubDate>Tue, 31 Mar 2009 17:01:10 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1337</guid>
		<description><![CDATA[Nous allons voir comment interagir avec une base de données avec code igniter. Dans ce tutoriel nous reprendrons l&#8217;exemple de cet article. Création du formulaire Pour créer notre formulaire, nous allons faire appel au helper (form). Un helper est une librairie de code igniter. Dans le controleur ecoleCtr, nous allons charger la vue ajoutEleve. public [...]]]></description>
			<content:encoded><![CDATA[<p>Nous allons voir comment interagir avec une base de données avec code igniter.<br />
Dans ce tutoriel nous reprendrons l&#8217;exemple de cet <a href="http://www.waanser.com/php/1080-un-simple-select-avec-code-igniter.html">article</a>.</p>
<h2>Création du formulaire </h2>
<p>Pour créer notre formulaire, nous allons faire appel au helper (form). </p>
<p><a href="http://media.waanser.com/2009/03/code_igniter6.png"><img src="http://media.waanser.com/2009/03/code_igniter6.png" alt="code_igniter" title="code_igniter6" class="alignnone size-full wp-image-1338" /></a></p>
<p>Un <strong>helper </strong>est une librairie de code igniter.</p>
<p>Dans le controleur ecoleCtr, nous allons charger la vue ajoutEleve.</p>
<pre class="brush: php">
    public function __construct()
    {
        parent::__construct();
        $this-&gt;load-&gt;helper(&#039;form&#039;);
    }
    public function ajoutEleve()
    {
		$this-&gt;load-&gt;view(&#039;ajoutEleve&#039;);
    }
</pre>
<p>Maintenant dans la vue ajoutEleve nous allons utiliser la commande <strong>form_open</strong> pour construire le formulaire.</p>
<p>la synthaxe : form_open(méthode du contrôleur où seront envoyées les données du formulaire); </p>
<p>Pour nous ça va être :</p>
<pre class="brush: html">
&lt;?=form_open(&#039;ecoleCtr/insertEleve&#039;);?&gt;

&lt;p&gt;nom : &lt;input type=&quot;text&quot; name=&quot;nom&quot;/&gt;&lt;/p&gt;
&lt;p&gt;prenom : &lt;input type=&quot;text&quot; name=&quot;prenom&quot;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;envoyer&quot;/&gt;&lt;/p&gt;
</pre>
<p>Attention  les noms de champs doivent être les même que ceux de la base.<br />
Cela va permettre d&#8217;insérer les données dans la base plus facilement.</p>
<h2>Envoi et traitement des données</h2>
<p>Stocker les données avec Code Ingiter se fait très rapidement <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>On va utiliser la méthode <strong>insert</strong> de la librairie <strong>db</strong>.</p>
<pre class="brush: php">
    public function insertEleve()
    {
		$this-&gt;db-&gt;insert(&#039;user&#039;,$_POST);
    }
</pre>
<p>Un fois que vous validez votre formulaire si vous tombez sur cette adresse :</p>
<p>http://example.com/index.php/eleveCtr/eleve_insert</p>
<p>C&#8217;est que vous avez oublier comme moi de remplir :</p>
<pre class="brush: php">
$config[&#039;base_url&#039;]	= &quot;http://localhost/ecole&quot;;
</pre>
<p>dans system-> application -> config -> config.php</p>
<p><u><strong>Redirection</strong></u></p>
<p>On va rediriger notre utilisateur à la page où il y a la liste d&#8217;élève.</p>
<p>Avec Code Igniter pour faire des redirections on a besoin du <strong>helper url</strong></p>
<pre class="brush: php">
       $this-&gt;load-&gt;helper(&#039;url&#039;);
</pre>
<p>La méthode <strong>redirect(<em>chemin</em>,<em>type</em>);</strong> s&#8217;occupe de la redirection.</p>
<p>Pour nous ça sera :</p>
<pre class="brush: php">
redirect(&#039;/ecoleCtr/listeEleve&#039;, &#039;refresh&#039;);
</pre>
<h2>Modification Update avec CI</h2>
<p>Maintenant que nous savons insérer des données nous allons apprendre à les modifier <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Retournons dans notre vue <strong>listeEleve.php</strong> <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ecole -> system -> application -> views-> listeEleve.php</p>
<p>Pour chaque élève, on va ajouter un lien vers un formulaire pour modifier les informations de cet élève.</p>
<p><u><strong>Les liens avec anchor</strong></u></p>
<p>La syntaxe n&#8217;est pas compliqué<strong> anchor(<em>url</em>,<em>texte</em>)</strong></p>
<p>Donc dans notre exemple nous allons rediriger vers la méthode <strong>modifEleve </strong>de <strong>ecoleCtr</strong>;</p>
<pre class="brush: php">
&lt;td&gt;&lt;?=anchor(&#039;ecoleCtr/modifEleve/&#039;.$oEleve-&gt;id, &#039;Modifier&#039;);?&gt;&lt;/td&gt;
</pre>
<p>Rendez vous dans le modèle</p>
<p>ecole -> system -> application -> models -> ecoleMod.php</p>
<p>On va modifier notre fonction :</p>
<pre class="brush: php">
    public function getEnfant($aRestriction = null)
    {
    	if (is_array($aRestriction))
    	{
	    	foreach ($aRestriction as $sKey =&gt; $sValue)
	    	{
	    		$this-&gt;db-&gt;where($sKey, $sValue);
	    	}
    	}
    	$oEleve=$this-&gt;db-&gt;get(&#039;eleve&#039;);
    	return $oEleve-&gt;result();
    }
</pre>
<p><strong>La clause $this->db->where</strong></p>
<p>La clause $this->db->where va nous permettre de créer nos requête de projections.<br />
Le premier paramètre est l&#8217;attribut de la table et le second est la valeur.<br />
Par exemple :<br />
$oEleve=$this->db->get(&#8216;eleve&#8217;);<br />
$this->db->where(&#8216;nom&#8217;, &#8216;paul&#8217;); </p>
<p>donnera SELECT * FROM eleve WHERE nom = paul</p>
<p>On s&#8217;est occupé du modèle, on va pouvoir redescendre au contrôleur <img src='http://www.waanser.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .<br />
Bon là rien de nouveau :</p>
<pre class="brush: php">
    public function modifEleve()
    {
    	$this-&gt;load-&gt;model(&#039;ecoleMod&#039;);
    	$iIdEleve = $this-&gt;uri-&gt;segment(3);
		$aEleve = $this-&gt;ecoleMod-&gt;getEnfant(array(&#039;id&#039;=&gt;$iIdEleve));
		$aData[&#039;nom&#039;] = $aEleve[0]-&gt;nom;
		$aData[&#039;prenom&#039;] = $aEleve[0]-&gt;prenom;
		$aData[&#039;id&#039;] = $aEleve[0]-&gt;id;
		$this-&gt;load-&gt;view(&#039;modifEleve&#039;,$aData);
    }
</pre>
<p>Pareil pour la vue <strong>modifEleve</strong>, on est sur du terrain connu</p>
<pre class="brush: html">
&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;Modification d&#039;un eleve&lt;/h1&gt;

&lt;?=form_open(&#039;ecoleCtr/updateEleve/&#039;.$id);?&gt;

&lt;p&gt;nom : &lt;input type=&quot;text&quot; name=&quot;nom&quot; value =&quot;&lt;?=$nom?&gt;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;prenom : &lt;input type=&quot;text&quot; name=&quot;prenom&quot; value =&quot;&lt;?=$prenom?&gt;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type=&quot;submit&quot; value=&quot;envoyer&quot;/&gt;&lt;/p&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>La clause $this->db->update</strong></p>
<p>pour faire un update avec un code igniter on a besoin de la méthode<strong>where </strong> et <strong>update</strong>.</p>
<p><strong>$this->db->where(<em>attribut</em>,<em>valeur</em>)</strong></p>
<p>Faites bien attention à cette méthode, une erreur et Code Igniter modifie tous les champs de la table.<br />
(et oui ça m&#8217;est arrivé ^^)</p>
<p><strong>$this->db->update(<em>table</em>,<em>valeurs</em>)</strong></p>
<p>Notre méthode updateEleve va ressembler à ça :</p>
<pre class="brush: php">
    public function updateEleve()
    {
    	$this-&gt;db-&gt;where(&#039;id&#039;, $this-&gt;uri-&gt;segment(3));
		$this-&gt;db-&gt;update(&#039;eleve&#039;,$_POST);
		 redirect(&#039;/ecoleCtr/listeEleve&#039;, &#039;refresh&#039;);
    }
</pre>
<p>Voila ce tutoriel est terminé, votre base de données n&#8217;a plus qu&#8217;à bien se tenir.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/1337-code-igniter-et-la-base-de-donnees.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>un simple select avec Code Igniter</title>
		<link>http://www.waanser.com/php/framework/1080-un-simple-select-avec-code-igniter.html</link>
		<comments>http://www.waanser.com/php/framework/1080-un-simple-select-avec-code-igniter.html#comments</comments>
		<pubDate>Tue, 17 Mar 2009 11:19:30 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Framework]]></category>
		<category><![CDATA[BDD]]></category>
		<category><![CDATA[code propre]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1080</guid>
		<description><![CDATA[Code igniter possède une librairie qui permet de manipuler les bases de données assez facilement. Dans cet article nous allons voir comment utiliser cette librairie. Les préparatifs Pour illustrer cet article, nous allons créer un site très simple pour une école (avec l&#8217;utilisation de Code Igniter). Comme nous allons manipuler une base de données, je [...]]]></description>
			<content:encoded><![CDATA[<p>Code igniter possède une librairie qui permet de manipuler les bases de données assez facilement.<br />
Dans cet article nous allons voir comment utiliser cette librairie.</p>
<h2>Les préparatifs</h2>
<p>Pour illustrer cet article, nous allons créer un site très simple pour une école (avec l&#8217;utilisation de Code Igniter).<br />
<br/><br />
Comme nous allons manipuler une base de données, je vous invite à créer une base de données école et à exécuter ce <a href='http://media.waanser.com/2009/03/ecole.sql'>script sql</a>. (La structure et les données sont toutes prêtes <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )<br />
<br/><br />
<strong><u>Configuration de Code Igniter pour la connexion à la BDD</u></strong><br />
<br/><br />
Pour configurer la connexion de la base de données, il faut modifier le fichier database.php.<br />
Pour le trouver, suivez le fil d&#8217;ariane ci-dessous:</p>
<p>ecole -> system -> application -> config -> database.php</p>
<div id="attachment_1086" class="wp-caption alignleft" style="width: 239px"><a href="http://media.waanser.com/2009/03/code_igniter.png"><img src="http://media.waanser.com/2009/03/code_igniter.png" alt="code igniter" title="code_igniter" width="229" height="269" class="size-full wp-image-1086" /></a><p class="wp-caption-text">code igniter</p></div>
<p><br/><br />
 	<strong>ecole </strong>: notre racine<br />
 	<strong>systeme </strong>: Code Igniter<br />
	<strong>application </strong>: le site web<br />
	<strong>config </strong>: le dossier de configuration<br />
<br/><br />
	<strong>database.php</strong> : le fichier de configuration pour la connexion à la base de données</li>
<p><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/></p>
<p>La configuration du fichier est très intuitive. Voilà, ce que j&#8217;ai mis :</p>
<pre class="brush: php">
$db[&#039;default&#039;][&#039;hostname&#039;] = &quot;localhost&quot;;
$db[&#039;default&#039;][&#039;username&#039;] = &quot;root&quot;;
$db[&#039;default&#039;][&#039;password&#039;] = &quot;&quot;;
$db[&#039;default&#039;][&#039;database&#039;] = &quot;ecole&quot;;
$db[&#039;default&#039;][&#039;dbdriver&#039;] = &quot;mysql&quot;;
</pre>
<p><br/></p>
<h2>Le chargement automatique de librairie avec Code igniter</h2>
<p><br/><br />
On peut définir les librairies qui vont se charger automatiquement dans nos contrôleurs et vues.<br />
Pour ceci, il faut se tourner vers le fichier autoload.php qui se trouve dans le dossier config.</p>
<p>ecole -> system -> application -> config -> autoload.php</p>
<p>Dans notre exemple, pour manipuler la base de données nous allons nous servir de la librairie <strong>database</strong>.</p>
<pre class="brush: php">
$autoload[&#039;libraries&#039;] = array(&#039;database&#039;);
</pre>
<p>C&#8217;est pratique quand on est feignant comme moi <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . </p>
<p>Si la connexion se passe bien, dans la page d&#8217;accueil (pour ma part <a href="http://localhost/ecole/">http://localhost/ecole/</a>) vous devriez voir apparaître: </p>
<p><a href="http://media.waanser.com/2009/03/code_igniter2.png"><img src="http://media.waanser.com/2009/03/code_igniter2.png" alt="code igniter" title="code_igniter2" class="alignnone size-full wp-image-1104" /></a></p>
<p>Si vous voyez un message d&#8217;erreur &laquo;&nbsp;<em>A Database Error Occurred Unable to connect to your database server using the provided settings.</em>&nbsp;&raquo; comme ceci :</p>
<p><a href="http://media.waanser.com/2009/03/code_igniter1.png"><img src="http://media.waanser.com/2009/03/code_igniter1.png" alt="code igniter" title="code_igniter1" class="alignnone size-full wp-image-1103" /></a></p>
<p>C&#8217;est que la connexion s&#8217;est mal passée.<br />
Il faut que vous vérifiez vos identifiants de connexion, ainsi que le bon fonctionnement de votre serveur de base de données (mysql, postgres &#8230;)<br />
<br/></p>
<h2>Notre premier select avec l&#8217;objet DB</h2>
<p><br/><br />
Comme nous travaillons dans un environnement <strong>MVC</strong>, on va traiter nos requêtes dans la partie : <strong>Modèle</strong>.<br />
Dans le framework Code Igniter, il faut se positionner dans le dossier <strong>models </strong> et créer un fichier ecoleMod.php<br />
Si vous êtes perdus dans tous ces dossiers, suivez le guide juste en dessous :p</p>
<p>ecole -> system -> application -> models -> ecoleMod.php</p>
<p>Voici la structure type que nous allons adopter pour <strong>ecoleMod.php</strong><br />
<br/></p>
<pre class="brush: php">
class ecoleMod extends Model {
    public function __construct()
    {
        parent::__construct();
    }
    //notre fonction
    public function getEnfant()
    {
    }
}
</pre>
<p>Pour compliquer notre travail, dans un premier temps nous allons faire appel à notre modèle <strong>ecoleMod</strong> situé dans le contrôleur par défaut : <strong>welcome.php</strong>.</p>
<p>ecole -> system -> application -> controllers -> welcome.php</p>
<p>Dans index, il suffit de mettre :</p>
<pre class="brush: php">
function index()
	{
		$this-&gt;load-&gt;model(&#039;ecoleMod&#039;);
		$this-&gt;ecoleMod-&gt;getEnfant();
         }
</pre>
<p>Pour accéder à notre contrôleur, il suffit d&#8217;aller sur <a href="http://localhost/ecole">http://localhost/ecole</a>.</p>
<p>Voilà, nous pouvons commencer <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
<br/><br/><br />
Pour manipuler la base de données, nous allons utiliser un objet très complet : <strong>db</strong>. De plus, nous allons voir ensemble les principales méthodes. Attention c&#8217;est très compliqué (<em>non je plaisante :p</em>)</p>
<p><strong><u>Notre première requête</u></strong></p>
<p>Nous allons faire une fonction qui renvoie la liste d&#8217;élève de notre classe.</p>
<p>Il y a 2 méthodes que l&#8217;on peut utiliser:</p>
<p>1 &#8211; Méthode passe partout. </p>
<p>2 &#8211; Méthode propre à la commande <strong>SELECT</strong> du <strong>SQL</strong>, qui peut être appliquée selon deux méthodes distinctes.<br/></p>
<p>- Ma méthode passe partout <strong>query</strong><br />
La méthode query permet d&#8217;exécuter toutes les requêtes. Voici la syntaxe :<br />
$this->db->query(Larequete);<br />
Pour nous cela sera :</p>
<pre class="brush: php">
$oEleve = $this-&gt;db-&gt;query(&#039;SELECT id, nom, prenom FROM eleve&#039;);
</pre>
<p>- La méthode <strong>get</strong> propre aux requêtes SELECT.</p>
<p>Si elle n&#8217;a pas de restrictions, cette méthode réclame qu&#8217;un seul paramètre : <u>le nom de la table</u><br />
$oEleve=$this->db->get(&#8216;<em>NOM_DE_LA_TABLE</em>&#8216;);<br />
Pour récupérer les élèves, cela donne :</p>
<pre class="brush: php">
$oEleve=$this-&gt;db-&gt;get(&#039;eleve&#039;);
</pre>
<p>Il est préférable d&#8217;utiliser cette commande, parce qu&#8217;elle permet de construire les requêtes plus<br />
proprement. Aussi cela peut faciliter la relecture du code.:)<br />
<br/><br />
<em><strong>$oEleve</strong>, qu&#8217;es ce que c&#8217;est ?</em></p>
<p>C&#8217;est un objet où sont stockées les informations que la requête renvoie. Si vous avez une base de données mysql, vous aurez un objet du type <strong>CI_DB_mysql_result</strong>.</p>
<p><u><strong>result_array()</strong></u>;</p>
<p>Pour récupérer les informations de cet objet, nous allons faire appel à la méthode <strong>result_array()</strong>. Elle renvoie le résultat de la requête sous forme de tableau.</p>
<pre class="brush: php">
$oEleve=$this-&gt;db-&gt;get(&#039;eleve&#039;);
echo &quot;&lt;pre&gt;&quot;;
var_dump($oEleve-&gt;result_array());
echo &quot;&lt;/pre&gt;&quot;;
</pre>
<p>Voici un extrait de résultats que renvoie <strong>result_array()</strong>.</p>
<div id="attachment_1142" class="wp-caption alignnone" style="width: 215px"><a href="http://media.waanser.com/2009/03/code_igniter3.png"><img src="http://media.waanser.com/2009/03/code_igniter3.png" alt="code igniter" title="code_igniter3" width="205" height="308" class="size-full wp-image-1142" /></a><p class="wp-caption-text">code igniter</p></div>
<p><u><strong>result()</strong></u>;</p>
<p>Un autre méthode intéressante à voir : <strong>result()</strong>.Elle renvoie le résultat de la requête sous forme de <strong>stdclass</strong>.</p>
<p> <strong>stdclass</strong> est une classe native de PHP. On peux affecter toutes sortes de propriété à cette classe passe partout. Pratique <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Pour notre exemple, pour récupérer les données vous pouvez utiliser cette boucle :</p>
<pre class="brush: php">
foreach ($oEleve-&gt;result() as $row)
{
	echo $row-&gt;id;
	echo $row-&gt;nom;
	echo $row-&gt;prenom;
}
</pre>
<p><br/><br />
Au final la fonction <strong>getEnfant</strong> de notre modèle <strong>ecoleMod</strong> va donner :</p>
<pre class="brush: php">
    public function getEnfant()
    {
    	$oEleve=$this-&gt;db-&gt;get(&#039;eleve&#039;);
    	return $oEleve-&gt;result();
    }
</pre>
<p><br/><br />
Vous voyez le code est vraiment compliqué ! <img src='http://www.waanser.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /><br />
<br/></p>
<h2>Du Modèle à la Vue en passant par le Contrôleur</h2>
<p><br/><br />
C&#8217;est là que nous allons nous motiver pour respecter une structure propre avec Code Igniter.</p>
<p>Nous allons créer notre contrôleur <strong>ecoleCtrl</strong> dans ce chemin :</p>
<p>ecole -> system -> application -> controllers -> welcome.php</p>
<p>Voici la structure de notre contrôleur :</p>
<pre class="brush: php">
class ecoleCtr extends Controller {
    public function __construct()
    {
        parent::__construct();
    }
    public function listeEleve()
    {
    }
}
</pre>
<p><br/><br />
Attaquons nous à notre fonction <strong>listeEleve()</strong>.<br />
Déjà il faut inclure notre modèle <strong>ecoleMod </strong> : $this-&gt;load-&gt;model(&#8216;ecoleMod&#8217;);<br />
Nous allons faire appel à notre méthode <strong>getEnfant()</strong> avec :<br />
$aData['aEleve'] = $this-&gt;ecoleMod-&gt;getEnfant();</p>
<p>Voici notre belle fonction <strong>listeEleve</strong></p>
<pre class="brush: php">
    public function listeEleve()
    {
    	$this-&gt;load-&gt;model(&#039;ecoleMod&#039;);
	$aData[&#039;aEleve&#039;] = $this-&gt;ecoleMod-&gt;getEnfant();
    }
</pre>
<p><br/><br />
Voici le lien de notre contrôleur ; <a href='http://localhost/ecole/index.php/ecoleCtr/listeEleve'>http://localhost/ecole/index.php/ecoleCtr/listeEleve</a>.</p>
<p><strong><u>La vue</u></strong></p>
<p>On va pouvoir finaliser les traîtements de nos élèves en les affichant dans notre vue<strong> listeEleve.php	</strong> <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>ecole -> system -> application -> views-> listeEleve.php</p>
<p>Voici l&#8217;arborescence que vous devriez avoir.</p>
<div id="attachment_1165" class="wp-caption alignnone" style="width: 351px"><a href="http://media.waanser.com/2009/03/code_igniter4.png"><img src="http://media.waanser.com/2009/03/code_igniter4.png" alt="code igniter" title="code_igniter4" width="341" height="373" class="size-full wp-image-1165" /></a><p class="wp-caption-text">code igniter</p></div>
<p>Nous allons pouvoir traiter notre vue. Il n&#8217;y a rien de nouveau ça reste traditionnel.</p>
<pre class="brush: html">
&lt;html&gt;
&lt;body&gt;
&lt;h1&gt;Bienvenue&lt;/h1&gt;
&lt;table&gt;
&lt;tr&gt;&lt;th&gt;Id&lt;/th&gt;&lt;th&gt;Nom&lt;/th&gt;&lt;th&gt;Prenom&lt;/th&gt;&lt;/tr&gt;
&lt;?php  foreach ($aEleve as $oEleve):	?&gt;
&lt;tr&gt;
	&lt;td&gt;&lt;?=$oEleve-&gt;id?&gt;&lt;/td&gt;
	&lt;td&gt;&lt;?=$oEleve-&gt;nom?&gt;&lt;/td&gt;
	&lt;td&gt;&lt;?=$oEleve-&gt;prenom?&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;?php endforeach;?&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Ce qui va donner :</p>
<div id="attachment_1168" class="wp-caption alignnone" style="width: 180px"><a href="http://media.waanser.com/2009/03/code_igniter5.png"><img src="http://media.waanser.com/2009/03/code_igniter5.png" alt="eh voila le chef d&#039;oeuvre !" title="code_igniter5" width="170" height="226" class="size-full wp-image-1168" /></a><p class="wp-caption-text">eh voila le chef d'oeuvre !</p></div>
<p>A travers toutes ces étapes on a pu voir les principales fonctions qui servent à récupérer les infomations de la base de données. Voici le <a href='http://media.waanser.com/2009/03/ecole_ci.rar'>pack</a> qui continent tout le code source du site ecole.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/1080-un-simple-select-avec-code-igniter.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Cake PHP + Smarty = un gâteau aux smarties</title>
		<link>http://www.waanser.com/php/framework/1067-cake-php-smarty-un-gateau-aux-smarties.html</link>
		<comments>http://www.waanser.com/php/framework/1067-cake-php-smarty-un-gateau-aux-smarties.html#comments</comments>
		<pubDate>Mon, 16 Mar 2009 16:00:26 +0000</pubDate>
		<dc:creator>dedeweb</dc:creator>
				<category><![CDATA[Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=1067</guid>
		<description><![CDATA[Dans ce tutoriel, nous allons voir comment utiliser smarty avec cake php pour ne plus avoir des templates moches en .ctp Installation de smarty dans cake php : Vous avez bien entendu téléchargé smarty depuis le site officiel ainsi que cake php. Dans monProjet/vendors, créez le dossier smarty. Dedans, vous y mettrez: Vous trouverez ces [...]]]></description>
			<content:encoded><![CDATA[<p>Dans ce tutoriel, nous allons voir comment utiliser smarty avec cake php pour ne plus avoir des templates moches en .ctp<br />
<span id="more-1067"></span></p>
<h2>Installation de smarty dans cake php :</h2>
<p>Vous avez bien entendu téléchargé smarty depuis le site officiel ainsi que cake php.</p>
<p>Dans monProjet/vendors, créez le dossier <strong>smarty</strong>. Dedans, vous y mettrez:</p>
<div id="attachment_1068" class="wp-caption alignnone" style="width: 191px"><a href="http://media.waanser.com/2009/03/cakephp_smarty.png"><img class="size-full wp-image-1068" title="cakephp_smarty" src="http://media.waanser.com/2009/03/cakephp_smarty.png" alt="cakephp smarty" width="181" height="85" /></a><p class="wp-caption-text">cakephp smarty</p></div>
<p>Vous trouverez ces fichiers et dossiers dans <span style="text-decoration: underline;">le package smarty</span> que vous avez téléchargé.</p>
<p>Dans<strong> app/views</strong>, vous créerez ce fichier <strong>smart.php</strong>, il contiendra le script suivant :</p>
<pre class="brush: php">
/**
* Include Smarty. By default expects it at ( VENDORS.&#039;smarty&#039;.DS.&#039;Smarty.class.php&#039; )
*/

/**
* CakePHP Smarty view class
*
* This class will allow using Smarty with CakePHP
*
* @version      1.1.0.0
* @package      cake
* @subpackage   cake.app.views
* @since        CakePHP v 1.2
*/
class SmartyView extends View
{
/**
* SmartyView constructor
*
* @param  $controller instance of calling controller
*/
function __construct (&amp;amp;$controller)
{
parent::__construct($controller);
App::import(&#039;Vendor&#039;, &#039;Smarty&#039;, array(&#039;file&#039; =&gt; &#039;smarty&#039;.DS.&#039;Smarty.class.php&#039;));
$this-&gt;Smarty = &amp;amp;new Smarty();
// requires views be in a &#039;smarty&#039; subdirectory, you can remove this limitation if you aren&#039;t using other inherited views that use .tpl as the extension
//$this-&gt;subDir = &#039;smarty&#039;.DS;
$this-&gt;ext= &#039;.tpl&#039;;
$this-&gt;Smarty-&gt;plugins_dir[] = VIEWS.&#039;smarty_plugins&#039;.DS;
$this-&gt;Smarty-&gt;compile_dir = TMP.&#039;smarty&#039;.DS.&#039;compile&#039;.DS;
$this-&gt;Smarty-&gt;cache_dir = TMP.&#039;smarty&#039;.DS.&#039;cache&#039;.DS;
$this-&gt;Smarty-&gt;error_reporting = &#039;E_ALL &amp;amp; ~E_NOTICE&#039;;
$this-&gt;Smarty-&gt;debugging = true;
}

/**
* Overrides the View::_render()
* Sets variables used in CakePHP to Smarty variables
*
* @param string $___viewFn
* @param string $___data_for_view
* @param string $___play_safe
* @param string $loadHelpers
* @return rendered views
*/
function _render($___viewFn, $___data_for_view, $___play_safe = true, $loadHelpers = true)
{
if ($this-&gt;helpers != false &amp;amp;&amp;amp; $loadHelpers === true)
{
$loadedHelpers =  array();
$loadedHelpers = $this-&gt;_loadHelpers($loadedHelpers, $this-&gt;helpers);

foreach(array_keys($loadedHelpers) as $helper)
{
$replace = strtolower(substr($helper, 0, 1));
$camelBackedHelper = preg_replace(&#039;/\w/&#039;, $replace, $helper, 1);

${$camelBackedHelper} =&amp;amp; $loadedHelpers[$helper];
if(isset(${$camelBackedHelper}-&gt;helpers) &amp;amp;&amp;amp; is_array(${$camelBackedHelper}-&gt;helpers))
{
foreach(${$camelBackedHelper}-&gt;helpers as $subHelper)
{
${$camelBackedHelper}-&gt;{$subHelper} =&amp;amp; $loadedHelpers[$subHelper];
}
}
$this-&gt;loaded[$camelBackedHelper] = (${$camelBackedHelper});
$this-&gt;Smarty-&gt;assign_by_ref($camelBackedHelper, ${$camelBackedHelper});
}
}

$this-&gt;register_functions();

foreach($___data_for_view as $data =&gt; $value)
{
if(!is_object($data))
{
$this-&gt;Smarty-&gt;assign($data, $value);
}
}
$this-&gt;Smarty-&gt;assign_by_ref(&#039;view&#039;, $this);
return $this-&gt;Smarty-&gt;fetch($___viewFn);
}

/**
* Returns layout filename for this template as a string.
*
* @return string Filename for layout file (.ctp).
* @access private
*/
function _getLayoutFileName() {
if (isset($this-&gt;webservices) &amp;amp;&amp;amp; !is_null($this-&gt;webservices)) {
$type = strtolower($this-&gt;webservices) . DS;
} else {
$type = null;
}

if (isset($this-&gt;plugin) &amp;amp;&amp;amp; !is_null($this-&gt;plugin)) {
if (file_exists(APP . &#039;plugins&#039; . DS . $this-&gt;plugin . DS . &#039;views&#039; . DS . &#039;layouts&#039; . DS . $this-&gt;layout . $this-&gt;ext)) {
$layoutFileName = APP . &#039;plugins&#039; . DS . $this-&gt;plugin . DS . &#039;views&#039; . DS . &#039;layouts&#039; . DS . $this-&gt;layout . $this-&gt;ext;
return $layoutFileName;
}
}
$paths = Configure::getInstance();

foreach($paths-&gt;viewPaths as $path) {
if (file_exists($path . &#039;layouts&#039; . DS . $this-&gt;subDir . $type . $this-&gt;layout . $this-&gt;ext)) {
$layoutFileName = $path . &#039;layouts&#039; . DS . $this-&gt;subDir . $type . $this-&gt;layout . $this-&gt;ext;
return $layoutFileName;
}
}

// added for .ctp viewPath fallback
foreach($paths-&gt;viewPaths as $path) {
if (file_exists($path . &#039;layouts&#039; . DS  . $type . $this-&gt;layout . &#039;.ctp&#039;)) {
$layoutFileName = $path . &#039;layouts&#039; . DS . $type . $this-&gt;layout . &#039;.ctp&#039;;
return $layoutFileName;
}
}

if($layoutFileName = fileExistsInPath(LIBS . &#039;view&#039; . DS . &#039;templates&#039; . DS . &#039;layouts&#039; . DS . $type . $this-&gt;layout . &#039;.ctp&#039;)) {
} else {
$layoutFileName = LAYOUTS . $type . $this-&gt;layout.$this-&gt;ext;
}
return $layoutFileName;
}

/**
* Returns filename of given action&#039;s template file (.tpl) as a string.
* CamelCased action names will be under_scored! This means that you can have
* LongActionNames that refer to long_action_names.ctp views.
*
* @param string $action Controller action to find template filename for
* @return string Template filename
* @access protected
*/
function _getViewFileName($name = null) {
$subDir = null;

if (!is_null($this-&gt;webservices)) {
$subDir = strtolower($this-&gt;webservices) . DS;
}
if (!is_null($this-&gt;subDir)) {
$subDir = $this-&gt;subDir . DS;
}

if ($name === null) {
$name = $this-&gt;action;
}

if (strpos($name, &#039;/&#039;) === false &amp;amp;&amp;amp; strpos($name, &#039;..&#039;) === false) {
$name = $this-&gt;viewPath . DS . $subDir . Inflector::underscore($name);
} elseif (strpos($name, &#039;/&#039;) !== false) {
if ($name{0} === &#039;/&#039;) {
if (is_file($name)) {
return $name;
}
$name = trim($name, &#039;/&#039;);
} else {
$name = $this-&gt;viewPath . DS . $subDir . $name;
}
if (DS !== &#039;/&#039;) {
$name = implode(DS, explode(&#039;/&#039;, $name));
}
} elseif (strpos($name, &#039;..&#039;) !== false) {
$name = explode(&#039;/&#039;, $name);
$i = array_search(&#039;..&#039;, $name);
unset($name[$i - 1]);
unset($name[$i]);
$name = &#039;..&#039; . DS . implode(DS, $name);
}

$paths = $this-&gt;_paths($this-&gt;plugin);
foreach ($paths as $path) {
if (file_exists($path . $name . $this-&gt;ext)) {
return $path . $name . $this-&gt;ext;
} elseif (file_exists($path . $name . &#039;.ctp&#039;)) {
return $path . $name . &#039;.ctp&#039;;
} elseif (file_exists($path . $name . &#039;.thtml&#039;)) {
return $path . $name . &#039;.thtml&#039;;
}
}

return $this-&gt;_missingView($paths[0] . $name . $this-&gt;ext, &#039;missingView&#039;);
}

/**
* checks for existence of special method on loaded helpers, invoking it if it exists
* this allows helpers to register smarty functions, modifiers, blocks, etc.
*/
function register_functions() {
foreach(array_keys($this-&gt;loaded) as $helper) {

if (method_exists($this-&gt;loaded[$helper], &#039;_register_smarty_functions&#039;)) {
$this-&gt;loaded[$helper]-&gt;_register_smarty_functions($this-&gt;Smarty);
}
}
}
}
</pre>
<p>Vous créerez aussi <strong>app_controller.php</strong> dans <strong>app/controllers</strong>, il contiendra :</p>
<pre class="brush: php">

class AppController extends Controller {

//pour utliser smarty en moteur de templates
var $view = &#039;Smarty&#039;;
}
</pre>
<h2>Configuration Smarty</h2>
<p>Les fichiers venant d&#8217;être créés vous servirons <span style="text-decoration: underline;">à configurer smarty et utiliser smarty </span>pour les vues (templates).</p>
<p>Utilisation :<br />
les lignes qui suivent servent à configurer smarty :</p>
<pre class="brush: php">
$this-&gt;ext= &#039;.tpl&#039;;
$this-&gt;Smarty-&gt;plugins_dir[] = VIEWS.&#039;smarty_plugins&#039;.DS;
$this-&gt;Smarty-&gt;compile_dir = TMP.&#039;smarty&#039;.DS.&#039;compile&#039;.DS;
$this-&gt;Smarty-&gt;cache_dir = TMP.&#039;smarty&#039;.DS.&#039;cache&#039;.DS;
$this-&gt;Smarty-&gt;error_reporting = &#039;E_ALL &amp;amp; ~E_NOTICE&#039;;
$this-&gt;Smarty-&gt;debugging = true;
</pre>
<p>Vous configurez ainsi  :</p>
<ul>
<li>le chemin des plugins smarty</li>
<li>le chemin des fichiers compilés</li>
<li> le chemin de cache smarty</li>
</ul>
<p>Vous devez créer les dossier <strong>smarty_plugins</strong>, <strong>compile</strong> (/app/tmp/smarty/compile) et <strong>cache</strong> (/app/tmp/smarty/cache) dans les répertoires correspondant aux différents chemins que vous aurez choisi.</p>
<p>Vous avez aussi configuré le débuggage et le système d&#8217;erreur smarty.</p>
<p>Dans l&#8217;exemple vu dans l&#8217;installation et l&#8217;utilisation de cake php, nous avons vu comment créer une page.</p>
<p>La méthode ne change pas, et la méthode d&#8217;assignation non plus.</p>
<p>Vous devez simplement créer les templates avec l&#8217;extension sélectionnée pour paramétrer smarty et dans le template, vous devez utiliser la syntaxe de smarty pour l&#8217;affichage.</p>
<p>Vous devez créer mapage.tpl et utiliser une syntaxe de ce type <strong>{$sMaVariableVue}</strong><br />
non pas <del datetime="2009-03-16T15:51:15+00:00">echo $sMaVariableVue; </del></p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/1067-cake-php-smarty-un-gateau-aux-smarties.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP c&#8217;est du gateau !</title>
		<link>http://www.waanser.com/php/framework/937-cakephp-cest-du-gateau.html</link>
		<comments>http://www.waanser.com/php/framework/937-cakephp-cest-du-gateau.html#comments</comments>
		<pubDate>Thu, 26 Feb 2009 08:42:17 +0000</pubDate>
		<dc:creator>dedeweb</dc:creator>
				<category><![CDATA[Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=937</guid>
		<description><![CDATA[Si vous avez bon appétit le framework CakePhp est fait pour vous ! Pour le mettre en place ce ne n&#8217;est vraiment pas compliqué, nous avons juste à suivre la recette pour faire un site solide. CakePHP : Qu&#8217;est ce que c&#8217;est ? CakePHP est un framework PHP gratuit, Open Source et reposant sur le [...]]]></description>
			<content:encoded><![CDATA[<p>Si vous avez bon appétit le framework CakePhp est fait pour vous ! <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Pour le mettre en place ce ne n&#8217;est vraiment pas compliqué, nous avons juste à suivre la recette pour faire un site solide.</p>
<p><span id="more-937"></span></p>
<h2>CakePHP : Qu&#8217;est ce que c&#8217;est ?</h2>
<p>CakePHP est un framework PHP gratuit, Open Source et reposant sur le modèle MVC. Il dispose de différents outils pour développer rapidement vos applications PHP, sans avoir à réinventer la roue pour chacune d&#8217;entre elles.</p>
<h2>Installation de CakePHP :</h2>
<p>Pour installer CakePHP, allez sur le site de CakePHP et téléchargez <a href="http://cakeforge.org/frs/?group_id=23&amp;release_id=434">la dernière version.</a></p>
<div id="attachment_938" class="wp-caption alignnone" style="width: 501px"><a href="http://media.waanser.com/2009/02/cakephp.png"><img class="size-full wp-image-938" title="cakephp" src="http://media.waanser.com/2009/02/cakephp.png" alt="cakephp" width="491" height="125" /></a><p class="wp-caption-text">cakephp</p></div>
<p>Décompresser, le dossier téléchargé dans votre répertoire web. Dans WampServer, il faut placer les différents éléments dans le répertoire<strong> www/monProjet/</strong>.</p>
<p>Votre projet sera accessible à l&#8217;adresse <strong>http://localhost/monProjet/</strong> et affichera l&#8217;écran suivant :</p>
<p><a href="http://media.waanser.com/2009/02/cakephp.jpg"><img class="alignnone size-full wp-image-940" title="cakephp" src="http://media.waanser.com/2009/02/cakephp.jpg" alt="cakephp" width="425" height="266" /></a></p>
<p>Vous vous demandez qu&#8217;est c&#8217;est que tout ça et comment faire. C&#8217;est ce que l&#8217;on va voir.</p>
<p>Cake PHP vous demande de changer la valeur du paramètre « Security.salt », cette valeur correspond au grain de sel, un paramètre pour améliorer la sécurité.<br />
Il vous demande aussi de configurer le fichier de base de données.<br />
Pour éditer la page, il vous demande de créer home.ctp et default.ctp.</p>
<h2>Organisation et configuration de cakePHP</h2>
<p>CakePHP est organisé de la manière suivante :</p>
<ul>
<li><strong>Le dossier app </strong> : contiendra les fichiers de votre application.</li>
<li><strong>Le dossier cake </strong>: contient les fichiers propres de cakePHP, c&#8217;est le noyau du système. Il n&#8217;est pas conseillé de les modifier.</li>
<li><strong>Le dossier vendors</strong> : contiendra les plugins de cakePHP.</li>
</ul>
<p>Pour configurer cakePHP, il faudra modifier certains fichiers présents dans le dossier <strong>app.</strong> Les fichiers de configuration sont dans <strong>app/config.</strong><br />
Pour Modifier le paramètre <em>« Security.salt »,</em> il faut modifier le fichier <strong>core.php,</strong> à la ligne suivante :</p>
<p>Ligne 151 : Configure::write(&#8216;Security.salt&#8217;, &#8216;DyhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi&#8217;);</p>
<p>Il est suffisant de modifier certaines lettres ou chiffres au hasard de la chaine incompréhensible suivante « DyhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi ».</p>
<div id="attachment_951" class="wp-caption alignnone" style="width: 487px"><a href="http://media.waanser.com/2009/02/cakephp2.png"><img class="size-full wp-image-951" title="cakephp2" src="http://media.waanser.com/2009/02/cakephp2.png" alt="cakephp" width="477" height="142" /></a><p class="wp-caption-text">cakephp</p></div>
<p>Pour configurer la connection à la base de données, il faut renommer le fichier suivant <em>« database.php.default </em>» en «<em> database.php </em>» et modifier les lignes suivantes :<br />
Lignes 81 à 89 :</p>
<pre class="brush: php">
var $default = array(
&#039;driver&#039; =&gt; &#039;mysql&#039;,
&#039;persistent&#039; =&gt; false,
&#039;host&#039; =&gt; &#039;localhost&#039;,
&#039;login&#039; =&gt; &#039;user&#039;,
&#039;password&#039; =&gt; &#039;password&#039;,
&#039;database&#039; =&gt; &#039;database_name&#039;,
&#039;prefix&#039; =&gt; &#039;&#039;,
);
</pre>
<p>CakePHP vous demande de créer ces fichiers  «<em> home.ctp</em> » et « <em>default.ctp</em> ». Ces Fichiers sont les vues utilisées par cakePHP, ils affichent donc vos page web. Ils faut créer le fichier «<em> home.ctp</em> » dans<strong> app/views/pages</strong> et « <em>default.ctp</em> » dans<strong> app/views/layouts</strong>.</p>
<p>Votre navigateur vous affiche maintenant une page blanche.</p>
<h2>Ajouter du contenu</h2>
<p>Organisation des vues :<br />
layouts : contenant des pages, son contenu sera :</p>
<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Ma page&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php echo $content_for_layout; ?&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<ul> <strong>pages : contenu de votre page</strong></ul>
<p>Donc dans <strong>default.ctp</strong> vous aurez la structure html globale de votre page et dans<strong> home.ctp </strong>vous aurez votre page d&#8217;accueil de votre site.<br />
Les fichiers ctp ont du contenu mêlant php et html. Pour le php, on fait juste de l&#8217;affichage de variables assignées dans le controller ou appel à des fonctions d&#8217;affichage. Je vous le concède, ce n&#8217;est pas super.</p>
<ul> <strong>Gestion du contenu :</strong></ul>
<p>Pour le moment, il n&#8217;y a pas d&#8217;assignations de faites, le contenu n&#8217;est pas dynamique. Il faut les faire dans le controller. Les vues contenues dans pages sont gérées par le fichier<strong> pages_controller.php.</strong><br />
Les fichiers controller sont des classes qui étendent la classe<strong> AppController.</strong><br />
Pour avoir du contenu dynamique dans le dossier pages de views, il faut modifier le fichier<strong> routes.php</strong> dans <strong>app/config.</strong> Ce fichier définit la home page de votre site (son controller, sa méthode et la vue) et définit le controller et la méthode à utiliser pour un dossier donné dans views.</p>
<p>Nous allons commenter la ligne suivante :<br />
<strong>Router::connect(&#8216;/pages/*&#8217;, array(&#8216;controller&#8217; =&gt; &#8216;pages&#8217;, &#8216;action&#8217; =&gt; &#8216;display&#8217;));</strong></p>
<p>Dans views le dossier contenant votre page est pages, votre controller sera donc pages_controller.php et la classe sera PagesController</p>
<pre class="brush: php">
class PagesController extends AppController {

/**
* définir le nom du contrôleur
*
* @var string
* @access public
*/
var $name = &#039;Pages&#039;;

/**
* les assistants peuvent vous aider à créer des formulaires, des fonctionnalités
* AJAX, de paginer les données du modèle ou à délivrer des flux RSS
*
* @var array
* @access public
*/
var $helpers = array(&#039;Html&#039;);

/**
* modèle à utliser
*
* @var array
* @access public
*/
var $uses = array();

function display() {
$path = func_get_args();

$count = count($path);
if (!$count) {
$this-&gt;redirect(&#039;/&#039;);
}
$page = $subpage = $title = null;

if ( !is_null($path[0])) {
$page = $path[0];
}
if (!is_null($path[1])) {
$subpage = $path[1];

if ( !is_null($path[$count - 1])) {
$title = Inflector::humanize($path[$count - 1]);
}
$this-&gt;set(compact(&#039;page&#039;, &#039;subpage&#039;, &#039;title&#039;));
$this-&gt;render(join(&#039;/&#039;, $path));
}
function mapage() {

//votre traitement
$sMavariable = &#039;Voici ma page&#039;;
//Mon assignation
$this-&gt;set(&#039;sMaVariableVue&#039;,$sMavariable);
}
}
</pre>
<p>Votre variable sera assignée dans la view de même nom que la méthode c&#8217;est à dire dans mapage.ctp<br />
Votre fichier <strong>views/pages/mapage.ctp </strong> sera :</p>
<pre class="brush: php">
&lt;?php echo $sTitrePage; ?&gt;
</pre>
<p>Bien sûr, vous pouvez utiliser du code html pour afficher votre contenu.<br />
Voilà votre première page est créée, si vous avez des questions n&#8217;hésitez pas à poster un commentaire <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/937-cakephp-cest-du-gateau.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Code Igniter la base</title>
		<link>http://www.waanser.com/php/framework/22-code-igniter-la-base.html</link>
		<comments>http://www.waanser.com/php/framework/22-code-igniter-la-base.html#comments</comments>
		<pubDate>Thu, 08 Jan 2009 21:51:23 +0000</pubDate>
		<dc:creator>roul</dc:creator>
				<category><![CDATA[Framework]]></category>

		<guid isPermaLink="false">http://www.waanser.com/?p=22</guid>
		<description><![CDATA[CodeIgniter est un Framework Php, il est très simple d&#8217;utilisation, il permet de créer des applications très rapidement, tout en respectant le model MVC. Pour commencer, il faut télécharger CodeIgniter sur le site www.CodeIgniter.com. Normalement vous avez un fichier compressé CodeIgniter_xx.xx.xx.zip. L&#8217;installation Code Igniter Nous allons ensuite créer notre dossier pour notre site web (dans [...]]]></description>
			<content:encoded><![CDATA[<p>CodeIgniter est un Framework Php, il est très simple d&#8217;utilisation, il permet de créer des applications très rapidement, tout en respectant le <a href="http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur" target="_blank">model MVC</a>.</p>
<p>Pour commencer, il faut télécharger CodeIgniter sur le site <a href="http://codeigniter.com/downloads/" target="_blank">www.CodeIgniter.com</a>.</p>
<p>Normalement vous avez un fichier compressé CodeIgniter_xx.xx.xx.zip.</p>
<hr/>
<h2>L&#8217;installation Code Igniter</h2>
<div class="article_text">Nous allons ensuite créer notre dossier pour notre site web (dans le dossier www ). Je l’appellerai « monsite ». Il faut décompresser le fichier CodeIgniter_1.6.2.zip.</p>
<p>Puis, Il faut récupérer son contenu et le glisser tout simplement dans votre dossier « monsite ».<br/><br />
Voila, il est installé ! Pour voir si CI fonctionne bien, il faut aller sur ces urls :</p>
<ul>
<li><a href="http://localhost/monsite">http://localhost/monsite</a></li>
<li><a href="http://localhost/monsite/index.php/welcome">http://localhost/monsite/index.php/welcome</a></li>
<li><a href="http://localhost/monsite/index.php/welcome/index">http://localhost/monsite/index.php/welcome/index</a></div>
</li>
</ul>
<p>Et voila ce que votre navigateur doit afficher :</p>
<div id="attachment_26" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-26" title="code igniter installation" src="http://media.waanser.com/2008/12/ci_1.png" alt="code igniter installation" width="600" height="300" /><p class="wp-caption-text">code igniter installation</p></div>
<p>Super tout fonctionne ! <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<hr/>
<h3>L&#8217; arborescence</h3>
<p><br/><br />
On va aller sur le dossier www pour voir l’arborescence de votre site. La racine de l&#8217;arborescence de Code Igniter soit rassembler à cela :</p>
<div id="attachment_29" class="wp-caption alignnone" style="width: 124px"><img class="size-full wp-image-29" title="arborescence code igniter" src="http://media.waanser.com/2008/12/ci_2.png" alt="arborescence code igniter" width="114" height="86" /><p class="wp-caption-text">arborescence code igniter</p></div>
<p>Nous allons nous intéresser au dossier system.</p>
<div id="attachment_31" class="wp-caption alignnone" style="width: 156px"><img class="size-full wp-image-31" title="arborescence code igniter system" src="http://media.waanser.com/2008/12/archi_system.jpg" alt="arborescence code igniter system" width="146" height="287" /><p class="wp-caption-text">arborescence code igniter system</p></div>
<p>Maintenant nous allons sur le dossier application. C’est ici que nous allons développer notre site web.</p>
<div id="attachment_34" class="wp-caption alignnone" style="width: 128px"><img class="size-full wp-image-34" title="arborescence code igniter scenario" src="http://media.waanser.com/2008/12/archi_application.jpg" alt="arborescence code igniter scenario" width="118" height="196" /><p class="wp-caption-text">arborescence code igniter scenario</p></div>
<p>Il y a deux dossiers importants :<br />
-	controllers où sont stockés les contrôleurs<br />
-	views où sont stockées les vues</p>
<hr/>
<strong>Bon comment ça marche tout ça ??</strong><br />
<br/><br />
En fait, le contrôleur assure le traitement de données, pour ensuite les donner à la vue. La vue se charge ensuite de traiter l&#8217;affichage.</p>
<hr/>
<h2>La Base de Code Igniter</h2>
<p>On va commencer par construire une page d’accueil toute banale.</p>
<p>Il faut aller dans ce fameux dossier <em>controllers </em> pour créer notre premier contrôleur.<br />
Nommons le accueil.php. (le nom du contrôleur doit être en minuscule)</p>
<p>Un contrôleur est une simple classe php.</p>
<p><strong>Le nom du contrôleur doit systématiquement commencer par une majuscule</strong>. Ce contrôleur(accueil.php) doit aussi hériter de la classe mère de Code Igniter qui est Controller. Cela sert à charger toute les fonctions de Code Igniter.</p>
<p>Dans acceuil.php, nous allons créer une fonction index qui va afficher un message.</p>
<pre class="brush: php">
class Accueil extends Controller {

function index(){
echo &quot;Salut, cela fonctionne bien &quot;;
}
}
</pre>
<p>Allons voir si ce code marche.:) Pour cela, rien de plus simple, il suffit d’ouvrir le navigateur et de saisir l’adresse suivante :<br />
<a href="http://localhost/monsite/index.php/accueil/index">http://localhost/monsite/index.php/accueil/index</a></p>
<hr/>
<h2>Composition de l&#8217;url de Code Igniter</h2>
<p>Pour trouver l’adresse url de notre fonction.</p>
<hr/>
Il faut déjà taper l’adresse de notre site soit :<br />
<strong>http://localhost/monsite/index.php</strong><br />
Puis le nom du contrôleur :<br />
<strong>/accueil</strong><br />
Et enfin le nom de la fonction<br />
<strong>/index</strong></p>
<hr/>
Donc normalement vous voyez votre navigateur afficher :<br />
« Salut, cela fonctionne bien »</p>
<p>Bon la on a triché un peu <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . On a affiché un message a partir du contrôleur, alors que l&#8217;affichage des données doit être le rôle de la vue (<em>views</em> pour CI)&#8230;</p>
<h2>La vue de Code Igniter</h2>
<p>Donc nous allons dans le dossier views du dossier application.<br />
Nous allons créer notre vue « accueil_view.php ».</p>
<p>Voila l’arborescence que l’on doit avoir :</p>
<div id="attachment_35" class="wp-caption alignnone" style="width: 206px"><img class="size-full wp-image-35" title="arborescence code igniter" src="http://media.waanser.com/2008/12/arbo_ci.png" alt="arborescence code igniter" width="196" height="306" /><p class="wp-caption-text">arborescence code igniter</p></div>
<p>Personne ne s’est trompé de dossier ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
On peu continuer.</p>
<p>Le rôle de notre vue accueil_view.php c’est d’afficher la page d&#8217;accueil.<br />
Nous allons donc coder une page html toute basic</p>
<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;&lt;title&gt;Accueil&lt;title&gt;&lt;/head&gt;
&lt;body&gt;&lt;h1&gt;Bienvenue !&lt;/h1&gt;&lt;/body&gt;
&lt;/html&gt;
</pre>
<hr/>
<h2>Le contrôleur de Code Igniter</h2>
<p>Maintenant faut indiquer à notre contrôleur, le chemin de notre vue pour qu’il fasse appel à elle.<br />
On retourne donc dans notre contrôleur accueil.<br />
On va utiliser cette commande :<br />
$this-&gt;load-&gt;view([nom de la vue]);</p>
<p>Donc vous l’avez deviné ! Nous on faire écrire :<br />
$this-&gt;load-&gt;view(&laquo;&nbsp;accueil_view.php&nbsp;&raquo;);</p>
<pre class="brush: php">
class Accueil extends Controller {

function index(){

$this-&gt;load-&gt;view(&quot;accueil_view.php&quot;);
}

}
</pre>
<p>En plus que faire appel à la vue, notre contrôleur va définir l’entête de la page et son titre. Pour cela rien de plus simple : On met les données nécessaires dans un tableau associatif (on va le nommer $aTableau),</p>
<p>Pour l’entête :<br />
$aTableau['entete']=&#8217;Accueil&#8217;;</p>
<p>Pour le titre :<br />
$aTableau['titre']=&#8217;Bienvenue&#8217;;</p>
<hr/>
Maintenant il faut attacher le tableau associatif à la vue.<br />
Pour cela, onva modifier l&#8217;appel de la commande load-&gt;view(),<br />
pour ajouter un nouvel attribut qui sera le nom de notre tableau associatif</p>
<p>C&#8217;est-à-dire :<br />
Au lieu de faire cette appel<br />
$this-&gt;load-&gt;view(&laquo;&nbsp;accueil_view.php&nbsp;&raquo;);<br />
On fait ceele-ci<br />
$this-&gt;load-&gt;view(&laquo;&nbsp;accueil_view.php&nbsp;&raquo;,$aTableau);</p>
<hr/>
Notre code source doit normalement ressembler à sa :</p>
<pre class="brush: php">
class Accueil extends Controller {
function index(){
$aTableau[&#039;sEntete&#039;]=&#039;Accueil&#039;;
$aTableau[&#039;sTitre&#039;]=&#039;Bienvenue&#039;;
$this-&gt;load-&gt;view(&quot;accueil_view.php&quot;,$aTableau);
}
}
</pre>
<p>Maintenant que le contrôleur envoie les données à la vue.<br />
La vue va faire son boulot à son tour. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
C&#8217;est-à-dire elle va l’afficher !</p>
<p>Pour cela on remplace le texte par les balises php.</p>
<pre class="brush: html">
&lt;html&gt;
&lt;head&gt;&lt;title&gt;&lt;?php echo $sEntete ?&gt;&lt;title&gt;&lt;/head&gt;
&lt;body&gt;&lt;h1&gt;&lt;?php echo $sTitre ?&gt;&lt;/h1&gt;&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>On utilise la commande traditionnelle echo pour afficher texte.<br />
Et pour choisir la donnée à affichée on récupère la clé du tableau associatif et on ajoute un $. (comme une variable php).</p>
<p>Normalement notre page reste la même.</p>
<hr/>
<h2>L&#8217;affichage de tableau dans Code Igniter</h2>
<p>Maintenant on va afficher un tableau dans notre page d’accueil. <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Pour cela il faut créer notre tableau dans le contrôleur. ( dans cet exmeple, on va dire que l’on va lister un groupe d’amis.)</p>
<pre class="brush: php">
$aTableau[&#039;aListeAmis&#039;]=array(&#039;Jean&#039;,&#039;Sophie&#039;,&#039;Pascal&#039;,&#039;Agnes&#039;);
</pre>
<p>Maintenant on va afficher la liste de nos amis sur la vue. Pour cela on utilisera la commande foreach.</p>
<pre class="brush: php">
&lt;?php foreach($aListeAmis as $sAmi): ?&gt;
&lt;?php echo $sAmi ?&gt;
&lt;br /&gt;
&lt;?php endforeach; ?&gt;
</pre>
<p>Tout le monde a bien suivit ?</p>
<hr/>
<h2>La gestion d&#8217;url par Code Igniter</h2>
<p>On va attaquer un autre élément important présent dans tous les sites web ; les liens hypertext.</p>
<p>Comme vous pouvez l’imaginez CI utilise une librairie pour manipuler ces liens. Pour cela, il a besoin qu’on lui indique la racine url de notre site (http://localhost/monsite). Il faut aller dans les fichiers de configurations de Code Igniter. On sa donc faire un saut dans le dossier application pour aller dans le dossier config et enfin ouvrir le fichier config.php.</p>
<div id="attachment_36" class="wp-caption alignnone" style="width: 204px"><img class="size-full wp-image-36" title="arborescence code igniter config" src="http://media.waanser.com/2008/12/ci_config.png" alt="arborescence code igniter config" width="194" height="364" /><p class="wp-caption-text">arborescence code igniter config</p></div>
<p>Vous avez bien suivit le plan ? <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Comme vous le constatez, les paramètres de configuration de CI sont stockés dans un tableau associatif. Normalement au début du  fichier php vous devez voir une variable $config['base_url'].<br />
C’est ici que l’on va définir le chemin de notre site web.</p>
<hr/>
<p>Par défaut :<br />
$config['base_url']	= &laquo;&nbsp;http://127.0.0.1/CodeIgniter/&nbsp;&raquo;;</p>
<p>Nous allons remplacer par :<br />
$config['base_url']	= &laquo;&nbsp;http://localhost/monsite&nbsp;&raquo;;</p>
<p>Voila, notre code igniter est configuré pour manipuler les liens <img src='http://www.waanser.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>On va retourner dans notre contrôleur.</p>
<p>Comme on utilise la librairie qui manipule les urls, il faut la charger.</p>
<p>La commande pour charger la librairie c’est :</p>
<p>$this-&gt;load-&gt;helper(&#8216;url&#8217;);</p>
<hr/>
Maintenant que c’est charger on va pourvoir retourner dans la vue pour créer enfin notre lien hypertext.</p>
<p>Comme on a fait une seul page, on va rediriger notre lien sur cette même page.<br />
Nous allons utiliser la commande anchor.<br />
Voici le code :</p>
<p>La commande anchor à besoin de deux paramètre :<br />
1.	l’adresse du lien<br />
2.	le texte du lien</p>
<h2>Pour alléger la vue</h2>
<p>Pour l’affichage, on peut remplacer le traditionnel &lt;?php echo $sAmi ?&gt;<br />
Par &lt;?=$sAmi?&gt;</p>
<p>Ce qui donne au final :</p>
<pre class="brush: php">
&lt;html&gt;
&lt;head&gt;&lt;title&gt;&lt;?=$sEntete?&gt;&lt;title&gt;&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;&lt;?=$sTitre?&gt;&lt;/h1&gt;
&lt;br/&gt;
&lt;?php foreach($aListeAmis as $sAmi):?&gt;
&lt;?=$sAmi?&gt;
&lt;br /&gt;
&lt;?php endforeach;?&gt;
&lt;?=anchor(&#039;accueil/index&#039;,&#039;lien&#039;);?&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.waanser.com/php/framework/22-code-igniter-la-base.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
