﻿<?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>Alexandre JULIEN &#187; tuto</title>
	<atom:link href="http://www.alexandre-julien.com/tag/tuto/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alexandre-julien.com</link>
	<description>Industrialisation des développements, PHP, .NET, jQuery, HTML5, Web, …</description>
	<lastBuildDate>Sun, 22 Jan 2012 20:26:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Joomla! API Framework MVC 1.5 : création d&#039;une application (tuto CRUD)</title>
		<link>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud</link>
		<comments>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 19:38:00 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[Joomla]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[cmf]]></category>
		<category><![CDATA[CMS]]></category>
		<category><![CDATA[component]]></category>
		<category><![CDATA[composant]]></category>
		<category><![CDATA[crud]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[tuto]]></category>
		<category><![CDATA[tutoriel]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=790</guid>
		<description><![CDATA[
Voici un tutorial pour créer une application &#171;&#160;composant&#160;&#187; sur Joomla! grâce à la nouvelle API basé sur Joomla framework MVC 1.5
Le gros avantage de la version 1.5 par rapport à la version 1.0, c&#8217;est qu&#8217;elle propose une API bien mieux construire et rend beaucoup plus agréable le développement  [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-logo-vert-color1.png"><img class="aligncenter size-full wp-image-794" title="Joomla! Api" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-logo-vert-color1.png" alt="Joomla! Api" width="500" height="342" /></a></p>
<p>Voici un tutorial pour créer une application &laquo;&nbsp;composant&nbsp;&raquo; sur Joomla! grâce à la nouvelle API basé sur Joomla framework MVC 1.5</p>
<p>Le gros avantage de la version 1.5 par rapport à la version 1.0, c&#8217;est qu&#8217;elle propose une API bien mieux construire et rend beaucoup plus agréable le développement d&#8217;applications. Le nouveau framework est basé sur le design-pattern MVC bien que la couche modèle est quelque peu inutile, étant donné que Joomla 1.5 ne fonctionne avec rien d&#8217;autre que MySQL, cela dit, on a le choix entre les drivers &laquo;&nbsp;mysql&nbsp;&raquo; ou &laquo;&nbsp;mysqli&nbsp;&raquo;.</p>
<p>Nous illustrerons une application simple qui saisie des utilisateurs dans une table et qui les affiche sous la forme d&#8217;une liste. Cette application nous permettra de voir d&#8217;une façon pragmatique la structure des applications Joomla! et les fonctions de base du framework : création d&#8217;une classe modèle (ajout, mise à jour, suppression et requêtes en base de données), création d&#8217;un controller avec les actions de base (une action pour création et édition et une autre pour le listing), gestion des templates, redirections et notifications des erreurs et succès.</p>
<p>Télécharger Joomla! 1.5.x : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/Joomla_1.5.15-Stable-Full_Package1.zip">Joomla_1.5.15</a></p>
<p>Télécharger l&#8217;application : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/com_crud.zip">Joomla! Crud Tutoriel</a></p>
<p><span id="more-790"></span></p>
<p>Voici ci-dessous la hiérarchie de notre application, il s&#8217;agit d&#8217;un répertoire à créer dans le dossier &laquo;&nbsp;components&nbsp;&raquo; de Joomla! :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-component-hierarchy1.png"><img class="aligncenter size-full wp-image-798" title="joomla! component hierarchy" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/joomla-component-hierarchy1.png" alt="joomla! component hierarchy" width="198" height="254" /></a></p>
<p>Voici le script SQL correspondant à la table &laquo;&nbsp;jos_crud_users&nbsp;&raquo; qui contient les données :</p>
<pre class="brush: sql; title: ; notranslate">

--
-- Structure de la table `jos_crud_users`
--

CREATE TABLE IF NOT EXISTS `jos_crud_users` (
 `user_id` int(11) NOT NULL AUTO_INCREMENT,
 `user_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 `user_lastname` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 `user_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
 PRIMARY KEY (`user_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
</pre>
<p>Voici le premier fichier à créer, &laquo;&nbsp;crud.php&nbsp;&raquo; il s&#8217;agit du fichier d&#8217;entrée qui est exécuté dès qu&#8217;un utilisateur visite l&#8217;application :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * components/com_crud/crud.php
 * @link http://www.alexandre-julien.com
 * @author Alexandre JULIEN
 */

// Pas d'accès direct à la page
defined( '_JEXEC' ) or die( 'Restricted access' );

// Requiert la classe des contrôleurs

require_once( JPATH_COMPONENT.DS.'controller.php' );

// Requiert un contrôleur spécifique si demander
if($controller = JRequest::getVar('controller')) {
 $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
 if (file_exists($path)) {
 require_once $path;
 } else {
 $controller = '';
 }
}

// Instanciation du contrôleur
$classname    = 'CrudController'.$controller;
$controller   = new $classname( );

// Execute la tâche demandée
$controller-&gt;execute( JRequest::getVar( 'task' ) );

// Redirection si elle est sollicitée par le contrôleur
$controller-&gt;redirect();
?&gt;
</pre>
<p>Voici maintenant le contrôleur, chaque méthode correspond à une tâche accessible par l&#8217;url : &laquo;&nbsp;index.php?option=com_crud&amp;task=lamethode&nbsp;&raquo;</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license GNU / GPL
 * @author Alexandre JULIEN
 */

// No direct access

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport('joomla.application.component.controller');

/**
 * Hello World Component Controller
 *
 * @package    Joomla.Tutorials
 * @subpackage Components
 */
class CrudController extends JController
{
 /**
 * Méthode d'affichage
 *
 * @access    public
 */
 function display()
 {
 $model = $this-&gt;getModel();
 $view = $this-&gt;getView('list', 'html');
 $view-&gt;users = $model-&gt;getAllUsers();
 $view-&gt;display();
 }

 /**
 * Formulaire de création d'un utilisateur
 * @return unknown_type
 */
 function add()
 {
 $view =&amp; $this-&gt;getView('edit', 'html');
 $view-&gt;display();
 }

 /**
 * Formulaire d'édition d'un utilisateur
 * @return unknown_type
 */
 function edit()
 {
 if (isset($_GET) &amp;&amp; isset($_GET['id']))
 {
 $view = $this-&gt;getView ('edit', 'html');
 $model =&amp; $this-&gt;getModel();
 $view-&gt;data = $model-&gt;getUser($_GET['id']);
 $view-&gt;display();
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'identifiant est manquant&quot;, 'error');
 }
 }

 /**
 * Sauvegarde d'un utilisateur
 * @return unknown_type
 */
 function save()
 {
 if (isset($_POST))
 {
 $model =&amp; $this-&gt;getModel();
 if (isset($_POST['id']) &amp;&amp; $model-&gt;getUser($_POST['id']))
 {
 $model-&gt;updateUser($_POST);
 }
 else
 {
 $model-&gt;addUser($_POST);
 }
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;Les modifications ont bien été enregistrées&quot;, 'message');
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;Les données sont manquantes&quot;, 'error');
 }
 }

 /**
 * Suppression d'un utilisateur
 * @return unknown_type
 */
 function delete()
 {
 if (isset($_GET) &amp;&amp; isset($_GET['id']))
 {
 $model =&amp; $this-&gt;getModel();
 $model-&gt;removeUser($_GET['id']);
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'utilisateur a bien été supprimé&quot;, 'message');
 }
 else
 {
 $this-&gt;setRedirect('index.php?option=com_crud', &quot;L'identifiant est manquant&quot;, 'error');
 }
 }
}
?&gt;
</pre>
<p>La couche modèle qui gère les transactions avec la base de données dans le fichiers &laquo;&nbsp;models/crud.php&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * Crud modèle pour le composant Crud
 *
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license    GNU/GPL
 * @author Alexandre JULIEN
 */

// Pas d'accès direct

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.model' );

/**
 * Modèle Crud
 *
 * @package    Joomla.Crud
 * @subpackage Components
 */
class CrudModelCrud extends JModel
{
 /**
 * Retourne tous les enregistrements de la table
 * @return unknown_type
 */
 function getAllUsers()
 {
 $query = 'SELECT * FROM #__crud_users';
 return $this-&gt;_getList ($query);
 }

 /**
 * Retourne l'enregistrement en fonction de l'identifiant de l'utilisateur
 * @param $user_id
 * @return unknown_type
 */
 function getUser ($user_id)
 {
 $query = 'SELECT * FROM #__crud_users WHERE user_id = '.(int)$user_id;
 $result = $this-&gt;_getList ($query);
 return $result[0];
 }

 /**
 * Ajoute un enregistrement
 * @param $values
 * @return unknown_type
 */
 function addUser ($values)
 {
 $db =&amp; JFactory::getDBO();

 $row = new stdClass();
 $row-&gt;user_name = $values['user_name'];
 $row-&gt;user_lastname = $values['user_lastname'];
 $row-&gt;user_email = $values['user_email'];

 $db-&gt;insertObject ('#__crud_users', $row);
 }

 /**
 * Met à jour un enregistrement
 * @param $values
 * @return unknown_type
 */
 function updateUser ($values)
 {
 $db =&amp; JFactory::getDBO();

 $row = new stdClass();
 $row-&gt;user_id = $values['user_id'];
 $row-&gt;user_name = $values['user_name'];
 $row-&gt;user_lastname = $values['user_lastname'];
 $row-&gt;user_email = $values['user_email'];

 $db-&gt;updateObject ('#__crud_users', $row, 'user_id');
 }

 /**
 * Supprime un enregistrement
 * @param $id
 * @return unknown_type
 */
 function removeUser ($id)
 {
 $db =&amp; JFactory::getDBO();
 $query = 'DELETE FROM #__crud_users WHERE user_id = '.(int)$id;
 $db-&gt;setQuery($query);
 return $this-&gt;query();
 }
}
?&gt;
</pre>
<p>Voici un exemple de fichier &laquo;&nbsp;View.html.php&nbsp;&raquo;, il s&#8217;agit de celui de l&#8217;écran de listing :</p>
<pre class="brush: php; title: ; notranslate">

&lt;?php
/**
 * @package    Joomla.Crud
 * @subpackage Components
 * @link http://www.alexandre-julien.com
 * @license   GNU/GPL
 * @author Alexandre JULIEN
 */

// Pas d'accès direct

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.application.component.view');

/**
 * HTML View pour afficher la liste des utilisateurs
 *
 * @package    Crud
 */

class CrudViewList extends JView
{
 function display($tpl = null)
 {
 $this-&gt;assignRef('data', $this-&gt;users);
 parent::display($tpl);
 }
}
?&gt;
</pre>
<p>Le template de la vue &laquo;&nbsp;edit&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// Pas d'accès direct

defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;h1&gt;Edition d'un utilisateur&lt;/h1&gt;
&lt;form name=&quot;utilisateur&quot; method=&quot;POST&quot;
	action=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=save') ?&gt;&quot;&gt;
&lt;input type=&quot;hidden&quot; name=&quot;user_id&quot; value=&quot;&lt;?php echo $this-&gt;data-&gt;user_id ?&gt;&quot; /&gt;
&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;Prénom de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_name&quot;
				value=&quot;&lt;?php if (isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_name; } ?&gt;&quot; /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;Nom de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_lastname&quot;
				value=&quot;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_lastname; } ?&gt;&quot; /&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;th&gt;Email de l'utilisateur&lt;/th&gt;
			&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;user_email&quot;
				value=&quot;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_email; } ?&gt;&quot;&gt;&lt;/input&gt;&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

&lt;br /&gt;
&lt;br /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Enregistrer&quot; /&gt;&lt;/form&gt;
</pre>
<p>Le template de la vue &laquo;&nbsp;list&nbsp;&raquo; :</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php

// Pas d'accès direct

defined('_JEXEC') or die('Restricted access'); ?&gt;

&lt;h1&gt;Liste des utilisateurs&lt;/h1&gt;

&lt;table&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;th&gt;Nom&lt;/th&gt;
			&lt;th&gt;Prénom&lt;/th&gt;
			&lt;th&gt;Adresse e-mail&lt;/th&gt;
			&lt;th&gt;Actions&lt;/th&gt;
		&lt;/tr&gt;
		&lt;?php foreach ($this-&gt;data as $key =&gt; $value) { ?&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_lastname ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_name ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;?php echo $value-&gt;user_email ?&gt;&lt;/td&gt;
			&lt;td&gt;&lt;a
				href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=edit&amp;id='.(int)$value-&gt;user_id) ?&gt;&quot;&gt;
			Editer &lt;/a&gt; | &lt;a
				href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=delete&amp;id='.(int)$value-&gt;user_id) ?&gt;&quot;&gt;Supprimer&lt;/a&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;?php } ?&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;br /&gt;
&lt;a href=&quot;&lt;?php echo JRoute::_('index.php?option=com_crud&amp;task=add') ?&gt;&quot;&gt;
Créer un utilisateur &lt;/a&gt;
</pre>
<p>On pourra également créer un package Joomla! qui automatisera l&#8217;installation des fichiers et des tables SQL grâce à un fichier de configuration d&#8217;installation &laquo;&nbsp;hello.xml&nbsp;&raquo; :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;!DOCTYPE install SYSTEM &quot;http://www.joomla.org/xml/dtd/1.5/component-install.dtd&quot;&gt;
&lt;install type=&quot;component&quot; version=&quot;1.5.0&quot;&gt;
  &lt;name&gt;crud&lt;/name&gt;
  &lt;!-- Les éléments suivants sont optionnels  --&gt;
  &lt;creationDate&gt;2009 09 21&lt;/creationDate&gt;
  &lt;author&gt;Alexandre JULIEN&lt;/author&gt;
  &lt;authorEmail&gt;mail@alexandre.julien.com&lt;/authorEmail&gt;
  &lt;authorUrl&gt;http://www.alexandre-julien.com&lt;/authorUrl&gt;
  &lt;copyright&gt;Le blog d'Alex&lt;/copyright&gt;
  &lt;license&gt;GNU / GPL&lt;/license&gt;
  &lt;!--  Version du composant --&gt;
  &lt;version&gt;stable 1.0&lt;/version&gt;
  &lt;!-- Description du Composant --&gt;
  &lt;description&gt;Petit tutoriel CRUD pour illustrer Joomla! MVC Framework&lt;/description&gt;

  &lt;!-- Fichiers d'installation --&gt;
  &lt;files folder=&quot;site&quot;&gt;
    &lt;filename&gt;crud.php&lt;/filename&gt;
    &lt;filename&gt;controller.php&lt;/filename&gt;
    &lt;filename&gt;models/crud.php&lt;/filename&gt;
    &lt;filename&gt;views/edit/view.html.php&lt;/filename&gt;
    &lt;filename&gt;views/edit/tmpl/default.php&lt;/filename&gt;
    &lt;filename&gt;views/list/view.html.php&lt;/filename&gt;
    &lt;filename&gt;views/list/tmpl/default.php&lt;/filename&gt;
  &lt;/files&gt;
  &lt;install&gt;
    &lt;sql&gt;
      &lt;file charset=&quot;uft8&quot; driver=&quot;mysql&quot;&gt;install.sql&lt;/file&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysqli&quot;&gt;install.sql&lt;/file&gt;
    &lt;/sql&gt;
  &lt;/install&gt;
  &lt;uninstall&gt;
    &lt;sql&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysql&quot;&gt;uninstall.sql&lt;/file&gt;
      &lt;file charset=&quot;utf8&quot; driver=&quot;mysqli&quot;&gt;uninstall.sql&lt;/file&gt;
    &lt;/sql&gt;
  &lt;/uninstall&gt;
  &lt;administration&gt;
    &lt;!-- Administration Menu Section --&gt;
    &lt;menu&gt;Joomla! CRUD&lt;/menu&gt;

    &lt;!-- Fichiers de la partie administration --&gt;
    &lt;files folder=&quot;admin&quot;&gt;
      &lt;filename&gt;index.html&lt;/filename&gt;
      &lt;filename&gt;install.sql&lt;/filename&gt;
      &lt;filename&gt;uninstall.sql&lt;/filename&gt;
    &lt;/files&gt;
  &lt;/administration&gt;
&lt;/install&gt;
</pre>
<p>Voici des &laquo;&nbsp;screenshots&nbsp;&raquo; de notre application finale :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/add_joomla1.png"><img class="aligncenter size-full wp-image-806" title="Joomla Crud Tuto MVC" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/add_joomla1.png" alt="Joomla Crud Tuto MVC" width="595" height="353" /></a><br />
<a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/list_joomla.png"><img class="aligncenter size-full wp-image-807" title="List Joomla Tuto MVC" src="http://www.alexandre-julien.com/wp-content/uploads/2009/09/list_joomla.png" alt="List Joomla Tuto MVC" width="594" height="383" /></a></p>
<p>L&#8217;application est disponible ici dans cette archive : <a href="http://www.alexandre-julien.com/wp-content/uploads/2009/09/crud.zip">Tutoriel Joomla! CRUD (installation package)</a></p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 5658px; width: 1px; height: 1px;">&lt;?php</p>
<p>// Pas d&#8217;accÃ¨s direct</p>
<p>defined(&#8216;_JEXEC&#8217;) or die(&#8216;Restricted access&#8217;); ?&gt;</p>
<p>&lt;h1&gt;Edition d&#8217;un utilisateur&lt;/h1&gt;<br />
&lt;form name=&nbsp;&raquo;utilisateur&nbsp;&raquo; method=&nbsp;&raquo;POST&nbsp;&raquo;<br />
action=&nbsp;&raquo;&lt;?php echo JRoute::_(&#8216;index.php?option=com_crud&amp;task=save&#8217;) ?&gt;&nbsp;&raquo;&gt;<br />
&lt;input type=&nbsp;&raquo;hidden&nbsp;&raquo; name=&nbsp;&raquo;user_id&nbsp;&raquo; value=&nbsp;&raquo;&lt;?php echo $this-&gt;data-&gt;user_id ?&gt;&nbsp;&raquo; /&gt;<br />
&lt;table&gt;<br />
&lt;tbody&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;PrÃ©nom de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_name&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if (isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_name; } ?&gt;&nbsp;&raquo; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;Nom de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_lastname&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_lastname; } ?&gt;&nbsp;&raquo; /&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;tr&gt;<br />
&lt;th&gt;Email de l&#8217;utilisateur&lt;/th&gt;<br />
&lt;td&gt;&lt;input type=&nbsp;&raquo;text&nbsp;&raquo; name=&nbsp;&raquo;user_email&nbsp;&raquo;<br />
value=&nbsp;&raquo;&lt;?php if(isset($this-&gt;data)) { echo $this-&gt;data-&gt;user_email; } ?&gt;&nbsp;&raquo;&gt;&lt;/input&gt;&lt;/td&gt;<br />
&lt;/tr&gt;<br />
&lt;/tbody&gt;<br />
&lt;/table&gt;</p>
<p>&lt;br /&gt;<br />
&lt;br /&gt;<br />
&lt;input type=&nbsp;&raquo;submit&nbsp;&raquo; value=&nbsp;&raquo;Enregistrer&nbsp;&raquo; /&gt;&lt;/form&gt;</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/joomla/joomla-api-framework-mvc-1-5-creation-dune-application-tuto-crud/feed/</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>50 plugins, techniques et tutoriaux jQuery par Smashing Magazine</title>
		<link>http://www.alexandre-julien.com/javascript/jquery-javascript/50-plugins-techniques-et-tutoriaux-jquery-par-smashing-magazine/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=50-plugins-techniques-et-tutoriaux-jquery-par-smashing-magazine</link>
		<comments>http://www.alexandre-julien.com/javascript/jquery-javascript/50-plugins-techniques-et-tutoriaux-jquery-par-smashing-magazine/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 07:12:31 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[smashing magazine]]></category>
		<category><![CDATA[top 50]]></category>
		<category><![CDATA[tuto]]></category>
		<category><![CDATA[tutoriaux]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=567</guid>
		<description><![CDATA[
Le magazine Smashing vient de publier un article très intéressant sur jQuery.  Il regroupe une cinquantaine de tutoriaux sur des plugins jQuery indispensables.
Avoir absolument à cette adresse : http://www.smashingmagazine.com/2009/08/23/50-useful-new-jquery-techniques/
]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/08/screen.PNG"><img class="aligncenter size-medium wp-image-569" title="jQuery 50 Tutos" src="http://www.alexandre-julien.com/wp-content/uploads/2009/08/screen-300x278.PNG" alt="jQuery 50 Tutos" width="300" height="278" /></a></p>
<p>Le magazine Smashing vient de publier un article très intéressant sur jQuery.  Il regroupe une cinquantaine de tutoriaux sur des plugins jQuery indispensables.</p>
<p>Avoir absolument à cette adresse : <a title="Smashing Magazine" href="http://www.smashingmagazine.com/2009/08/23/50-useful-new-jquery-techniques/">http://www.smashingmagazine.com/2009/08/23/50-useful-new-jquery-techniques/</a><img src="file:///C:/DOCUME%7E1/Romain/LOCALS%7E1/Temp/moz-screenshot.png" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/javascript/jquery-javascript/50-plugins-techniques-et-tutoriaux-jquery-par-smashing-magazine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework #1 premier tutoriel : installation et création d&#039;un premier projet</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 14:05:10 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[installation]]></category>
		<category><![CDATA[tuto]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=369</guid>
		<description><![CDATA[Voici le premier tutoriel consacré au framework PHP5, pour cette première partie nous nous contenteront uniquement de réaliser une première installation du Framework dans sa version 1.8.4.

Pour mettre votre première application en oeuvre, il vous faudra tout d&#8217;abord un serveur Apache et PHP5, il  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-375" title="ZendSuccess" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendSuccess-300x200.png" alt="ZendSuccess" width="300" height="200" />Voici le premier tutoriel consacré au framework PHP5, pour cette première partie nous nous contenteront uniquement de réaliser une première installation du Framework dans sa version 1.8.4.</p>
<p><span id="more-369"></span></p>
<p>Pour mettre votre première application en oeuvre, il vous faudra tout d&#8217;abord un serveur Apache et PHP5, il existe un grand nombre de solution pour vous faciliter son installation. Je conseille fortement les projets comme <a title="Wamp" href="http://www.wampserver.com/" target="_blank">WAMP</a> (Windows), <a title="Mamp" href="http://www.mamp.info">MAMP</a> (Mac) ou <a title="Xampp" href="http://www.apachefriends.org">XAMPP</a> (multi-plateforme). Les utilisateurs Linux utiliseront plutôt les paquets DEB et RPM fournient avec leur distribution ou une compilation à partir des sources pour les utilisateurs avancés.</p>
<p>Vérifier bien que votre installation fonctionne et que votre version de PHP est égale ou supérieur à la version 5.2.4, cela est nécessaire pour la version de Zend que nous utiliseront.</p>
<p>Tout d&#8217;abord il nous faut télécharger le framework sur <a href="http://framework.zend.com">le site de Zend</a>, pour cela il faut impérativement créer un compte. Ensuite télécharger soit la version complète soit la version light du framework sachant que la version complète comporte quasiment que des exemples et une intégration du framework javascript Dojo.</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendFrameworkWebSite.png"><img class="aligncenter size-medium wp-image-380" title="ZendFrameworkWebSite" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendFrameworkWebSite-300x187.png" alt="ZendFrameworkWebSite" width="300" height="187" /></a></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/DownloadingZendFrameworkFull.png"><img class="aligncenter size-medium wp-image-382" title="DownloadingZendFrameworkFull" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/DownloadingZendFrameworkFull-300x187.png" alt="DownloadingZendFrameworkFull" width="300" height="187" /></a></p>
<p>Une fois le framework télécharger, il faudra créer un répertoire qui contiendra le framework et qui sera plus tard rélier à Apache. Dans notre exemple, on crée un dossier ZendFramework dans le workspace d&#8217;Eclipse. Il vous suffit de décompresser le contenu de l&#8217;archive téléchargée sur Zend dans le répertoire cible :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ExtractZendFrameworkToEclipseWorkspace.png"><img class="aligncenter size-medium wp-image-387" title="ExtractZendFrameworkToEclipseWorkspace" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ExtractZendFrameworkToEclipseWorkspace-300x187.png" alt="ExtractZendFrameworkToEclipseWorkspace" width="300" height="187" /></a></p>
<p>Il vous faudra ensuite utiliser la version CLI de PHP (Command Line Interface) pour générer les fichiers de notre premier projet grâce au ZendTools. Cette étape nécessite une configuration particulière si vous êtes sur Windows puisqu&#8217;il vous faudra créer une variable d&#8217;environnement pour éxécuter PHP. Les utilisateurs UNIX quant à eux pourront directement éxécuter l&#8217;application zf.php en CLI.</p>
<p>Pour faire cela, il suffit d&#8217;ouvrir une console et  de se rendre dans le répertoire &laquo;&nbsp;/bin&nbsp;&raquo; du framework. On constate qu&#8217;il y a deux fichiers exécutables le premier en .bat pour les utilisateurs Windows et le second en &laquo;&nbsp;.sh&nbsp;&raquo; pour les utilisateurs de systèmes UNIX.</p>
<p>Lorsque vous executez le script une première fois vous pourrez voir les fonctions que propose le ZendTool :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy.png"><img class="aligncenter size-medium wp-image-388" title="Hierarchy" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy-300x187.png" alt="Hierarchy" width="300" height="187" /></a></p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfFirst.png"><img class="aligncenter size-medium wp-image-389" title="zfTools" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfFirst-300x187.png" alt="zfTools" width="300" height="187" /></a></p>
<p>Pour créer notre premier projet que nous nommeront ZendBlog nous allons éxecutez la ligne de commande suivante :</p>
<p>&laquo;&nbsp;zf create project ZendBlog&nbsp;&raquo;</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfCreateProject.png"><img class="aligncenter size-full wp-image-391" title="zfCreateProject" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/zfCreateProject.png" alt="zfCreateProject" width="482" height="72" /></a></p>
<p>Nous avons générer notre première application, regardons la structure de cette dernière. En effet, elle comporte :</p>
<p>- un répertoire &laquo;&nbsp;controller&nbsp;&raquo; contenant les controlleurs du design-patterns MVC<br />
- un répertoire &laquo;&nbsp;views&nbsp;&raquo; contenant les templates PHP.<br />
- un répertoire &laquo;&nbsp;library&nbsp;&raquo; qui devra contenir les librairies du framework Zend<br />
- un répertoire &laquo;&nbsp;public&nbsp;&raquo; contenant l&#8217;index.php qui sera la page principale de notre application et qui devra être la page accessible à Apache.<br />
- un répertoire &laquo;&nbsp;test&nbsp;&raquo; contenant les tests unitaires de l&#8217;application.<br />
- un répertoire &laquo;&nbsp;model&nbsp;&raquo; pour les classes correspondantes à la couche d&#8217;abstraction à la base de données.</p>
<p style="text-align: center;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy1.png"><img class="aligncenter size-medium wp-image-392" title="ZendFrameworkStructure" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Hierarchy1-300x187.png" alt="Hierarchy" width="300" height="187" /></a></p>
<p>Il vous faudra ensuite intégrer le répertoire Zend fournit avec l&#8217;archive dans le répertoire library de l&#8217;application sans cela,  rien ne pourra fonctionner et vous aurez l&#8217;erreur suivante sur votre application :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/PublicIndexWithFramework.png"><img class="aligncenter size-medium wp-image-395" title="PublicIndexWithoutFramework" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/PublicIndexWithFramework-300x187.png" alt="PublicIndexWithoutFramework" width="300" height="187" /></a></p>
<p>Une fois le framework installé, votre premier projet a été crée, il ne vous reste plus qu&#8217;à accéder à votre page &laquo;&nbsp;index.php&nbsp;&raquo; dans le répertoire &laquo;&nbsp;/public&nbsp;&raquo; et vous aurez le résultat suivant :</p>
<p><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendSuccess1.png"><img class="aligncenter size-medium wp-image-394" title="ZendSuccess" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ZendSuccess1-300x200.png" alt="ZendSuccess" width="300" height="200" /></a></p>
<p>Voilà, c&#8217;est fini pour cette première partie, nous verrons prochainement comment fonctionne le modèle MVC sur le framework Zend et nous commenceront à génerer des &laquo;&nbsp;Layouts&nbsp;&raquo; pour mieux distinguer nos couches de présentations.</p>
<p>A très bientôt.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-premier-tutoriel-installation-et-creation-dun-premier-projet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/9 queries in 0.650 seconds using disk: basic
Object Caching 987/997 objects using disk: basic

Served from: www.alexandre-julien.com @ 2012-02-18 13:37:29 -->
