﻿<?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; MVC</title>
	<atom:link href="http://www.alexandre-julien.com/tag/mvc/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>Zend Framework tutoriel #2 : Layouts et design-pattern MVC</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-tutoriel-2-layouts-et-design-pattern-mvc/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-tutoriel-2-layouts-et-design-pattern-mvc</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-tutoriel-2-layouts-et-design-pattern-mvc/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 20:07:21 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Controller]]></category>
		<category><![CDATA[Framework]]></category>
		<category><![CDATA[Layouts]]></category>
		<category><![CDATA[Model]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[View]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=413</guid>
		<description><![CDATA[Bien que l&#8217;on puisse utiliser Zend Framework comme une simple bibliothèque de classes, ce dernier propose des moyens et outils pour construire sa propre architecture.
Pour cela Zend propose une structure très standard et très connue des développeurs, le design-pattern MVC (Modèle Vue  [...]]]></description>
			<content:encoded><![CDATA[<p>Bien que l&#8217;on puisse utiliser Zend Framework comme une simple bibliothèque de classes, ce dernier propose des moyens et outils pour construire sa propre architecture.</p>
<p>Pour cela Zend propose une structure très standard et très connue des développeurs, le <strong>design-pattern MVC (Modèle Vue Contrôleur).</strong></p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/mvc.jpg"><img class="aligncenter size-full wp-image-415" title="Pattern MVC Model View Controller" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/mvc.jpg" alt="Pattern MVC Model View Controller" width="527" height="288" /><span id="more-413"></span></a></p>
<p style="text-align: left;">Petit rappel sur le modèle <strong>MVC</strong> : il consiste à séparer les trois parties fondamentales d&#8217;une application finale.</p>
<p style="text-align: left;">La première regroupe les <strong><span style="color: #3366ff;">traitements et l&#8217;intégritée</span></strong> des données. Elle s&#8217;occupe généralement des <strong><span style="color: #3366ff;">interactions avec la base de données</span></strong> avec une couche d&#8217;abstraction que nous verrons dans un prochain tutoriel.</p>
<p style="text-align: left;">La <strong><span style="color: #ff0000;">vue</span></strong> n&#8217;est autre que la partie interface graphique de l&#8217;application, c&#8217;est l&#8217;interface avec l&#8217;utilisateur et elle ne doit exercer aucun traitement.</p>
<p style="text-align: left;">Le <span style="color: #ff0000;"><strong>contrôleur</strong></span> est l&#8217;intermédiaire entre les 2 autres couches, il récupère les actions de d&#8217;utilisateurs et déclenche les traitements à effectuer.</p>
<p style="text-align: left;">Voici la couche Vue de notre application Zend de départ, on remarque qu&#8217;elle contient exclusivement le code HTML et le CSS ainsi que des variables  qui ne servent qu&#8217;à afficher des données :</p>
<p style="text-align: left;"><img class="aligncenter size-medium wp-image-417" title="ViewScreen" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ViewScreen-300x187.png" alt="ViewScreen" width="300" height="187" /></p>
<p style="text-align: left;">La couche contrôleur se comporte sous la forme d&#8217;une classe dérivée de <strong><span style="color: #3366ff;">Zend_Controller_Action</span></strong>, elle doit être nommé sous la forme NomController et il en est de même pour le fichier qui la contient. Dans notre <strong><span style="color: #3366ff;">IndexController</span></strong>, nous avons 2 méthodes par défaut : init() et <strong>indexAction()</strong>. La méthode <strong>init()</strong> est l&#8217;action à exécuter par défaut avant n&#8217;importe quelle autre action. On peut y mettre des traitements pour récupérer des variables en paramètres ou en session par exemple. La méthode IndexAction() est la méthode centrale du contrôleur, il s&#8217;agit de la page par défaut. Les vues du contrôleur doivent être regroupées dans un même répertoire et doivent porter le même nom que l&#8217;action avec l&#8217;extension *.phtml pour les templates.</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ControllerScreen.png"><img class="aligncenter size-medium wp-image-418" title="ControllerScreen" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/ControllerScreen-300x187.png" alt="ControllerScreen" width="300" height="187" /></a></p>
<p style="text-align: left;">Les urls fonctionnent de la façon suivante : <strong><span style="color: #ff0000;">racine/index.php/contrôleur/action</span></strong></p>
<p style="text-align: left;">Maintenant que nous sommes à l&#8217;aise avec le contrôleur et la vue, nous allons mettre en place un template principal qui sera la base graphique de notre application : il s&#8217;agit d&#8217;un layout.</p>
<p style="text-align: left;">On commence d&#8217;abord à paramètrer notre application, pour cela on se rend dans le application.ini dans le répertoire configs :</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_ApplicationINI.png"><img class="aligncenter size-medium wp-image-421" title="Layout_ApplicationINI" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_ApplicationINI-300x187.png" alt="Layout_ApplicationINI" width="300" height="187" /></a></p>
<p style="text-align: left;">On y définit le répertoire, où nous allons placer nos fichiers de mise en page, par convention on choisira le répertoire application/layouts/scripts.</p>
<p style="text-align: left;">En suite nous allons modifier le Bootstrap et surcharger la méthode _initDoctype() qui définiera le doctype de notre page Web.</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_Bootstrap.png"><img class="aligncenter size-medium wp-image-422" title="Layout_Bootstrap" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout_Bootstrap-300x187.png" alt="Layout_Bootstrap" width="300" height="187" /></a></p>
<p style="text-align: left;">Nous pouvons maintenant créer le<strong><span style="color: #ff0000;"> layouts.phtml</span></strong> dans le répertoire <strong><span style="color: #ff0000;">/layours/scripts</span></strong> et y insérer les balises de contenue.</p>
<p style="text-align: left;">On pourra étendre ce layout à plusieurs fichiers comme un header, un footer, une sidebar par exemple.</p>
<p style="text-align: left;"><a href="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout.png"><img class="aligncenter size-medium wp-image-424" title="Layout" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/Layout-300x187.png" alt="Layout" width="300" height="187" /></a></p>
<p style="text-align: left;">C&#8217;est fini pour la structure MVC de Zend et la création de layouts, nous verrons dans le prochain tutoriel comment se comporte la couche modèle et les interactions avec la base de données et nous ferons notre première application CRUD (Create Read Upload Delete).</p>
<p style="text-align: left;">
<p style="text-align: left;">
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-tutoriel-2-layouts-et-design-pattern-mvc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Framework : des tutoriaux avec vidéos très prochainement sur le Blog d&#039;Alex</title>
		<link>http://www.alexandre-julien.com/php/zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex</link>
		<comments>http://www.alexandre-julien.com/php/zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 19:53:46 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Framework PHP]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://www.alexandre-julien.com/?p=346</guid>
		<description><![CDATA[ L&#8217;ascension spectaculaire du framework de Zend notamment due à sa notoriété de &#171;&#160;standard&#160;&#187; mène à envisager une grosse utilisation future de cette plateforme de travail sponsorisée par Zend.
Le blog d&#8217;Alex vous proposera très prochainement des tutoriaux complets sur Zend Framework sous forme  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-348" title="Zend Framework" src="http://www.alexandre-julien.com/wp-content/uploads/2009/07/banner_zf_logo1-300x178.jpg" alt="Zend Framework" width="300" height="178" /> L&#8217;ascension spectaculaire du framework de Zend notamment due à sa notoriété de &laquo;&nbsp;standard&nbsp;&raquo; mène à envisager une grosse utilisation future de cette plateforme de travail sponsorisée par Zend.</p>
<p>Le blog d&#8217;Alex vous proposera très prochainement des <span style="color: #ff0000;"><strong>tutoriaux complets</strong></span> sur Zend Framework sous forme d&#8217;<span style="color: #ff0000;"><strong>articles</strong></span> et de <span style="color: #ff0000;"><strong>podcasts vidéos</strong></span>.</p>
<p><span id="more-346"></span></p>
<p>En effet, Zend Framework est un <strong>framework PHP 5 orienté objet</strong> basé sur une grande bibilothèque de <strong>classes</strong> et de <strong>librairies</strong> fournissant des facilités de développement.</p>
<p>Contrairement à ses &laquo;&nbsp;concurrents&nbsp;&raquo; comme CakePHP, Symfony, Copix, Jelix &#8230; Zend ne fournit pas de façon native une structure et une architecture de de développement, en revanche il nous fournit les moyens de la construire. Souvent critiqué par son manque de rigueur et son architecture trop exhaustive, il n&#8217;en reste pas moins qu&#8217;il est souvent plébiscité par les entreprises et il est actuellement très utilisé par les SSII. Il est actuellement le framework PHP le plus utilisé en France avec le grand Symfony (beaucoup plus rigoureux mais extrèmement professionnel et robuste).</p>
<p>La philosophie du Zend Framework est d&#8217;offrir un ensemble d&#8217;outils de développement d&#8217;application Web tout en offrant un maximum de flexibilité au niveau architectural. Il s&#8217;appuit sur les fonctionnalités standard que l&#8217;on retrouve dans de nombreux frameworks :</p>
<p>- <span style="color: #3366ff;">design-pattern MVC</span> (Modèle Vue Controlleur)<br />
- <span style="color: #3366ff;">couche d&#8217;abstraction à la base de données</span> sous forme d&#8217;un système de DAO (Database Access Object) pour effectuer des requêtes dynamiques vers les bases de données et ce de façon générique (compatible avec Mysql, Oracle, Postgre, MS-SQL, SQL-Lite, IBM-DB2)<br />
- système de <span style="color: #3366ff;">cache</span> pour optimiser les calculs et les transactions avec les bases de données<br />
- des outils pour le <span style="color: #3366ff;">développement RAD</span> (Rapid Application Development)<br />
- <span style="color: #3366ff;">internationalisation I18N</span> pour la création et la gestion d&#8217;application totalement multilingues<br />
- un <span style="color: #3366ff;">système d&#8217;authentification</span>, d&#8217;autorisation et de gestion des sessions<br />
- un framework pour propulser ou exploiter des <span style="color: #3366ff;">Web Services</span><br />
- des fonctionnalités avancées pour l&#8217;exploitation des <span style="color: #3366ff;">emails</span> et la génération de <span style="color: #3366ff;">PDF</span><br />
- un <span style="color: #3366ff;">système de recherche</span> puissant<br />
- des créations de <span style="color: #3366ff;">formulaires</span> avec des fonctions de filtres, validateurs, &#8230;<br />
- un grand nombre d&#8217;<span style="color: #3366ff;">APIs</span> comme Google App, Amazon, &#8230;<br />
- un générateur de javascript basé sur le <span style="color: #3366ff;">framework Dojo </span>ainsi que des libraries pour <span style="color: #3366ff;">jQuery</span> depuis la version 1.7 avec ZendX</p>
<p>L&#8217;autre argument fort de PHP est qu&#8217;il est soutenu par Zend, l&#8217;entreprise à but commercial qui propulse PHP, cela rassure souvent les entreprises de savoir qu&#8217;il existe des entités commerciales derrière les technologies (cf succès de Sun et IBM avec Java et Microsoft .NET).<br />
Il aura pour vocation de se placer au même rang que les grands framework &laquo;&nbsp;standard&nbsp;&raquo; des autres langages tel un (Spring, Struts pour Java ou un Ruby on Rails pour Ruby).</p>
<p><strong>C&#8217;est pour ces raisons, que je vais prochainement diffuser des tutoriaux sous forme écrite et aussi sous forme vidéo podcast visant à donner un petit coup de pouce aux personnes débutants sur ce framework. Il s&#8217;agira principalement d&#8217;application simples et basique comme un CRUD mettant en pratique les principales fonctionnalités du Zend Framework, à savoir le design-pattern MVC, le routing avec le url_rewriting, les formulaires, les interactions avec les bases de données, les sessions et authentifications, &#8230;</strong></p>
<p>En espérant que ces tutoriaux aideront un maximum de personnes, je compte sur votre aide pour commenter mes publications.</p>
<p>A très bientôt.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;">
<li class="toclevel-1"><a href="http://en.wikipedia.org/wiki/Zend_Framework#References"><span class="tocnumber">9</span> <span class="toctext">References</span></a></li>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/php/zend-framework-des-tutoriaux-avec-videos-tres-prochainement-sur-le-blog-dalex/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP .NET MVC : Enfin le MVC chez Microsoft</title>
		<link>http://www.alexandre-julien.com/microsoft/100/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=100</link>
		<comments>http://www.alexandre-julien.com/microsoft/100/#comments</comments>
		<pubDate>Tue, 24 Mar 2009 15:40:29 +0000</pubDate>
		<dc:creator>Alexandre JULIEN</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Design-patterns]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://jackncoke.free.fr/?p=100</guid>
		<description><![CDATA[Microsoft a publié la version finale de son nouveau Framework ASP .NET MVC.
Comme son nom l&#8217;indique, le framework offre la possibilité de développer des applications ASP.NET avec le design pattern Modèle-Vue-Contrôleur qui est déjà largement utilisé dans les frameworks orientés Web comme Spring,  [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="ASP .NET MVC" src="http://bloggingabout.net/resized-image.ashx/__size/500x400/__key/CommunityServer.Components.PostAttachments/00.00.00.85.60/Microsoft-.NET-logo-white.png" alt="Microsoft ASP .NET" width="275" height="177" />Microsoft a publié la version finale de son nouveau Framework ASP .NET MVC.</p>
<p>Comme son nom l&#8217;indique, le framework offre la possibilité de développer des applications ASP.NET avec le design pattern Modèle-Vue-Contrôleur qui est déjà largement utilisé dans les frameworks orientés Web comme Spring, Struts (J2EE), Symfony, Copix, Zend, Ruby on Rails &#8230;</p>
<p>Ce nouveau composant du Framework .NET commence à devenir très populaire car le modèle MVC tend à devenir un standard pour les architectures d&#8217;applications Web. En effet, seul JSF et autre framework peu connu de J2EE utilise un design pattern comme celui de ASP.NET.</p>
<p>Cela pourrait reconcilier et familiariser grand nombre de développeurs adeptent du modèle MVC&#8230;</p>
<p><span id="more-100"></span></p>
<p>Petit rappel sur le design pattern MVC :</p>
<p><img title="Design Pattern MVC" src="http://c-maneu.developpez.com/tutorial/web/php/symfony/intro/images/mvc.jpg" alt="Design Pattern MVC" width="815" height="446" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.alexandre-julien.com/microsoft/100/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/16 queries in 0.215 seconds using disk: basic
Object Caching 1074/1108 objects using disk: basic

Served from: www.alexandre-julien.com @ 2012-02-18 13:31:28 -->
