Developing an MVC Component/Using the database/fr: Difference between revisions
From Joomla! Documentation
No edit summary |
Updating to match new version of source page |
||
| Line 2: | Line 2: | ||
{{:J3.1:Developing an MVC Component/fr}} | {{:J3.1:Developing an MVC Component/fr}} | ||
==Introduction== | ==Introduction== | ||
<div class="mw-translate-fuzzy"> | |||
Ce didacticiel fait partie de la série de didacticiels sur le [[S:MyLanguage/J3.2:Developing an MVC Component|Développement d'un Composant MVC pour Joomla! 3.x]]. Vous êtes invité à lire les articles précédents de cette série avant de lire celui-ci. | Ce didacticiel fait partie de la série de didacticiels sur le [[S:MyLanguage/J3.2:Developing an MVC Component|Développement d'un Composant MVC pour Joomla! 3.x]]. Vous êtes invité à lire les articles précédents de cette série avant de lire celui-ci. | ||
</div> | |||
There are also 3 videos associated with this step in the tutorial, covering [https://www.youtube.com/watch?v=JWS_3rx8RzY the Database Setup], [https://www.youtube.com/watch?v=rKEHDeFGlGM Displaying the message (using JTable)] and [https://www.youtube.com/watch?v=uEDNyG6pSEk Admin message selection (and JDatabase)]. | |||
== Utiliser la base de données == | == Utiliser la base de données == | ||
| Line 17: | Line 21: | ||
`id` INT(11) NOT NULL AUTO_INCREMENT, | `id` INT(11) NOT NULL AUTO_INCREMENT, | ||
`greeting` VARCHAR(25) NOT NULL, | `greeting` VARCHAR(25) NOT NULL, | ||
`published` tinyint(4) NOT NULL, | `published` tinyint(4) NOT NULL DEFAULT '1', | ||
PRIMARY KEY (`id`) | PRIMARY KEY (`id`) | ||
) | ) | ||
| Line 122: | Line 126: | ||
== Ajouter un nouveau type de champ == | == Ajouter un nouveau type de champ == | ||
<div class="mw-translate-fuzzy"> | |||
Pour le moment, nous avons utilisé un [[S:MyLanguage/J3.3:Developing an MVC Component/Adding a menu type to the site part| type de champ encodé en dur pour les messages]]. Nous devons utiliser notre base de données pour choisir le message. | Pour le moment, nous avons utilisé un [[S:MyLanguage/J3.3:Developing an MVC Component/Adding a menu type to the site part| type de champ encodé en dur pour les messages]]. Nous devons utiliser notre base de données pour choisir le message. | ||
</div> | |||
Modifiez le fichier <tt>site/views/helloworld/tmpl/default.xml</tt> et ajoutez ces lignes : | Modifiez le fichier <tt>site/views/helloworld/tmpl/default.xml</tt> et ajoutez ces lignes : | ||
| Line 153: | Line 159: | ||
Cela introduit un nouveau type de champ et indique à Joomla! de rechercher la définition du champ dans le dossier <tt>/administrator/components/com_helloworld/models/fields</tt>. | Cela introduit un nouveau type de champ et indique à Joomla! de rechercher la définition du champ dans le dossier <tt>/administrator/components/com_helloworld/models/fields</tt>. | ||
<div class="mw-translate-fuzzy"> | |||
A l'aide de votre gestionnaire de fichiers et éditeur préférés, ajoutez un fichier ''site/models/helloworld.php'' contenant : | A l'aide de votre gestionnaire de fichiers et éditeur préférés, ajoutez un fichier ''site/models/helloworld.php'' contenant : | ||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
Le nouveau type de champ affiche une liste déroulante des messages à choisir. Vous pouvez voir le résultat pour l'élément helloworld dans le gestionnaire des menus. | |||
</div> | |||
<span id="admin/models/fields/helloworld.php"> | <span id="admin/models/fields/helloworld.php"> | ||
| Line 218: | Line 229: | ||
</span> | </span> | ||
<div class="mw-translate-fuzzy"> | |||
== Afficher le message sélectionné == | == Afficher le message sélectionné == | ||
</div> | |||
<span class="mw-translate-fuzzy">Lors de la création/mise à jour d'un lien de menu de ce composant, Joomla! stocke l'identifiant du message. Le modèle <tt>HelloWorldModelHelloWorld</tt> doit maintenant calculer le message en fonction de cet identifiant et des données stockées dans la base de données.</span> | |||
<div class="mw-translate-fuzzy"> | |||
Modifiez le fichier <tt>site/models/helloworld.php</tt> : | Modifiez le fichier <tt>site/models/helloworld.php</tt> : | ||
</div> | |||
<div class="mw-translate-fuzzy"> | |||
Le modèle demande le message à la ''TableHelloWorld''. Cette classe de table doit être définie dans le fichier <tt>admin/tables/helloworld.php</tt>. | |||
</div> | |||
<span id="site/models/helloworld.php"> | <span id="site/models/helloworld.php"> | ||
| Line 305: | Line 322: | ||
</span> | </span> | ||
<div class="mw-translate-fuzzy"> | |||
Vous ne devriez voir aucune différence, mais si vous accédez à la base de données, vous devriez voir une table nommée ''jos_helloworld'' contenant deux colonnes : id et greeting. Ainsi que deux entrées: ''Hello World!'' et ''Good bye World''. | |||
</div> | |||
<span id="admin/tables/helloworld.php"> | <span id="admin/tables/helloworld.php"> | ||
| Line 342: | Line 361: | ||
</span> | </span> | ||
<div class="mw-translate-fuzzy"> | |||
== Empaqueter le composant == | |||
</div> | |||
= | <span class="mw-translate-fuzzy">Contenu de votre répertoire de code</span> | ||
<div class="mw-translate-fuzzy"> | |||
Créez un fichier compressé de ce répertoire ou téléchargez directement l'[https://github.com/scionescire/Joomla-3.2-Hello-World-Component/archive/step-6-using-the-database.zip archive] et installez-le en utilisant le gestionnaire des extensions Joomla. Vous pouvez ajouter un élément de menu pour ce composant à l'aide du gestionnaire de menus dans le backend. | |||
</div> | |||
* ''[[#helloworld.xml|helloworld.xml]]'' | * ''[[#helloworld.xml|helloworld.xml]]'' | ||
| Line 375: | Line 398: | ||
* ''[[#admin/tables/helloworld.php|admin/tables/helloworld.php]]'' | * ''[[#admin/tables/helloworld.php|admin/tables/helloworld.php]]'' | ||
<div class="mw-translate-fuzzy"> | |||
Merci de créer un pull request ou un rapport d'anomalie sur https://github.com/joomla/Joomla-3.2-Hello-World-Component pour toute incohérence dans le code ou pour modifier le code source de cette page. | |||
</div> | |||
{{notice| | {{notice|<div class="mw-translate-fuzzy"> | ||
S:MyLanguage/J3.x:Developing_an_MVC_Component/Adding a variable request in the menu type|Préc. : Ajouter une requête de variable dans le type de menu | |||
</div>}} | |||
== Contributors == | == Contributors == | ||
| Line 385: | Line 412: | ||
<div class="row"> | <div class="row"> | ||
<div class="large-6 columns">{{Basic button|S:MyLanguage/J3.x:Developing_an_MVC_Component/ | <div class="large-6 columns">{{Basic button|<div class="mw-translate-fuzzy"> | ||
<div class="large-6 columns">{{Basic button| | S:MyLanguage/J3.x:Developing_an_MVC_Component/Basic backend|Suiv. : Backend de base | ||
</div>|class=expand success}}</div> | |||
<div class="large-6 columns">{{Basic button|<div class="mw-translate-fuzzy"> | |||
[[Category:Joomla! 3.x/fr|Joomla! 3.x]] | [[Category:Joomla! 3.x/fr|Joomla! 3.x]] | ||
[[Category:Joomla! 3.0/fr|Joomla! 3.0]] | [[Category:Joomla! 3.0/fr|Joomla! 3.0]] | ||
| Line 400: | Line 426: | ||
[[Category:Tutorials/fr|Didacticiels]] | [[Category:Tutorials/fr|Didacticiels]] | ||
[[Category:Tutorials in a Series/fr|Didacticiels en série]] | [[Category:Tutorials in a Series/fr|Didacticiels en série]] | ||
</div>|class=expand}}</div> | |||
</div> | |||
<noinclude> | |||
[[Category:Joomla! 3.x]] | |||
[[Category:Joomla! 3.0]] | |||
[[Category:Joomla! 3.1]] | |||
[[Category:Joomla! 3.2]] | |||
[[Category:Joomla! 3.3]] | |||
[[Category:Joomla! 3.4]] | |||
[[Category:Beginner Development]] | |||
[[Category:Component Development]] | |||
[[Category:Tutorials]] | |||
[[Category:Tutorials in a Series]] | |||
</noinclude> | </noinclude> | ||
Revision as of 09:53, 13 August 2017
Les articles de cette série
Ajout d'un type de menu à la partie site
Ajout d'un modèle à la partie site
Ajout d'une requête de variable dans le type de menu
Utilisation de la base de données
Backend de base
Ajout de la gestion des langues
Ajout d'actions en backend
Ajout de décorations pour le backend
Ajout de vérifications
Ajout de catégories
Ajout de configuration
Ajout d'un fichier script installation/désinstallation/mise à jour
Ajout d'un formulaire de frontend
Utilisation du filtre de langues
- Ajouter une fenêtre modale
- Ajout d'associations
- Ajout de Checkout
- Ajout d'un filtre
- Ajout de niveaux
- Ajout de versions
- Ajout de tags
- Ajout d'accès
- Ajout d'un processus de traitement
- Ajout d'un cache
- Ajout d'un fil d'actualité
Ajout d'un serveur de mise à jour
Ceci est une série qui regroupe plusieurs articles pour devenir un didacticiel sur la façon de développer un Composant pour Joomla!
suivant le principe Modèle-Vue-Contrôleur.
Commencez avec l'introduction, et naviguez dans les articles de cette série soit à l'aide des boutons de navigation en bas des articles, soit grâce au menu de droite : Les articles de cette série.
Introduction
Ce didacticiel fait partie de la série de didacticiels sur le Développement d'un Composant MVC pour Joomla! 3.x. Vous êtes invité à lire les articles précédents de cette série avant de lire celui-ci.
There are also 3 videos associated with this step in the tutorial, covering the Database Setup, Displaying the message (using JTable) and Admin message selection (and JDatabase).
Utiliser la base de données
Les composants gèrent généralement leur contenu à l'aide de la base de données. Lors de la procédure d'installation/désinstallation/mise à jour d'un composant, vous pouvez exécuter des requêtes SQL par l'utilisation de fichiers texte SQL.
A l'aide de votre gestionnaire de fichiers et éditeur préférés, créez deux fichiers nommés admin/sql/install.mysql.utf8.sql et admin/sql/updates/mysql/0.0.6.sql. Ils devraient tous les deux avoir le même contenu :
admin/sql/install.mysql.utf8.sql and admin/sql/updates/mysql/0.0.6.sql
DROP TABLE IF EXISTS `#__helloworld`;
CREATE TABLE `#__helloworld` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`greeting` VARCHAR(25) NOT NULL,
`published` tinyint(4) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
)
ENGINE =MyISAM
AUTO_INCREMENT =0
DEFAULT CHARSET =utf8;
INSERT INTO `#__helloworld` (`greeting`) VALUES
('Hello World!'),
('Good bye World!');
Le fichier install.mysql.utf8.sql sera exécuté lorsque vous installez le composant. Le fichier 0.0.6.sql est exécuté lorsque vous effectuez une mise à jour.
Remarque importante : Lorsque le composant est installé, les fichiers du dossier des mises à jour SQL (par exemple, admin/sql/updates/mysql) sont lus et le nom du dernier fichier, dans l'ordre alphabétique, est utilisé pour ajouter le numéro de version du composant à la table #__schemas. Cette valeur doit être présente dans ce tableau afin que la mise à jour automatique puisse exécuter la mise à jour des fichiers SQL pour les futures versions. C'est pourquoi il est judicieux de créer un fichier de mise à jour SQL pour chaque version (même s'il est vide ou ne comporte qu'un commentaire). Ainsi, la version #__schemas correspondra toujours à la version du composant.
Remarque importante : Lors de l'enregistrement des fichiers SQL en utf8, assurez-vous de bien les enregistrer en utf8 SANS BOM, sinon la requête échouera avec l'erreur MySQL #1064.
Voici le fichier d'installation. Il sera exécuté si vous respectez un ordre approprié dans votre fichier helloworld.xml.
helloworld.xml
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.2.0" method="upgrade">
<name>Hello World!</name>
<!-- The following elements are optional and free of formatting constraints -->
<creationDate>January 2014</creationDate>
<author>John Doe</author>
<authorEmail>john.doe@example.org</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.6</version>
<!-- The description is optional and defaults to the name -->
<description>Description of the Hello World component ...</description>
<install> <!-- Runs on install -->
<sql>
<file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!-- Runs on uninstall -->
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!-- Runs on update; New since J2.5 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
<folder>models</folder>
</files>
<administration>
<!-- Administration Menu Section -->
<menu link='index.php?option=com_helloworld'>Hello World!</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>helloworld.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
<!-- tables files section -->
<folder>tables</folder>
<!-- models files section -->
<folder>models</folder>
</files>
</administration>
</extension>
Faites de même avec le fichier de désinstallation :
A l'aide de votre gestionnaire de fichiers et éditeur préférés, ajoutez un fichier admin/sql/uninstall.mysql.utf8.sql contenant :
admin/sql/uninstall.mysql.utf8.sql
DROP TABLE IF EXISTS `#__helloworld`;
Ajouter un nouveau type de champ
Pour le moment, nous avons utilisé un type de champ encodé en dur pour les messages. Nous devons utiliser notre base de données pour choisir le message.
Modifiez le fichier site/views/helloworld/tmpl/default.xml et ajoutez ces lignes :
site/views/helloworld/tmpl/default.xml
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<layout title="COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_TITLE">
<message>COM_HELLOWORLD_HELLOWORLD_VIEW_DEFAULT_DESC</message>
</layout>
<fields
name="request"
addfieldpath="/administrator/components/com_helloworld/models/fields"
>
<fieldset name="request">
<field
name="id"
type="helloworld"
label="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_LABEL"
description="COM_HELLOWORLD_HELLOWORLD_FIELD_GREETING_DESC"
/>
</fieldset>
</fields>
</metadata>
Cela introduit un nouveau type de champ et indique à Joomla! de rechercher la définition du champ dans le dossier /administrator/components/com_helloworld/models/fields.
A l'aide de votre gestionnaire de fichiers et éditeur préférés, ajoutez un fichier site/models/helloworld.php contenant :
Le nouveau type de champ affiche une liste déroulante des messages à choisir. Vous pouvez voir le résultat pour l'élément helloworld dans le gestionnaire des menus.
admin/models/fields/helloworld.php
<?php
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
JFormHelper::loadFieldClass('list');
/**
* HelloWorld Form Field class for the HelloWorld component
*
* @since 0.0.1
*/
class JFormFieldHelloWorld extends JFormFieldList
{
/**
* The field type.
*
* @var string
*/
protected $type = 'HelloWorld';
/**
* Method to get a list of options for a list input.
*
* @return array An array of JHtml options.
*/
protected function getOptions()
{
$db = JFactory::getDBO();
$query = $db->getQuery(true);
$query->select('id,greeting');
$query->from('#__helloworld');
$db->setQuery((string) $query);
$messages = $db->loadObjectList();
$options = array();
if ($messages)
{
foreach ($messages as $message)
{
$options[] = JHtml::_('select.option', $message->id, $message->greeting);
}
}
$options = array_merge(parent::getOptions(), $options);
return $options;
}
}
Afficher le message sélectionné
Lors de la création/mise à jour d'un lien de menu de ce composant, Joomla! stocke l'identifiant du message. Le modèle HelloWorldModelHelloWorld doit maintenant calculer le message en fonction de cet identifiant et des données stockées dans la base de données.
Modifiez le fichier site/models/helloworld.php :
Le modèle demande le message à la TableHelloWorld. Cette classe de table doit être définie dans le fichier admin/tables/helloworld.php.
site/models/helloworld.php
<?php
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
/**
* HelloWorld Model
*
* @since 0.0.1
*/
class HelloWorldModelHelloWorld extends JModelItem
{
/**
* @var array messages
*/
protected $messages;
/**
* Method to get a table object, load it if necessary.
*
* @param string $type The table name. Optional.
* @param string $prefix The class prefix. Optional.
* @param array $config Configuration array for model. Optional.
*
* @return JTable A JTable object
*
* @since 1.6
*/
public function getTable($type = 'HelloWorld', $prefix = 'HelloWorldTable', $config = array())
{
return JTable::getInstance($type, $prefix, $config);
}
/**
* Get the message
*
* @param integer $id Greeting Id
*
* @return string Fetched String from Table for relevant Id
*/
public function getMsg($id = 1)
{
if (!is_array($this->messages))
{
$this->messages = array();
}
if (!isset($this->messages[$id]))
{
// Request the selected id
$jinput = JFactory::getApplication()->input;
$id = $jinput->get('id', 1, 'INT');
// Get a TableHelloWorld instance
$table = $this->getTable();
// Load the message
$table->load($id);
// Assign the message
$this->messages[$id] = $table->greeting;
}
return $this->messages[$id];
}
}
Vous ne devriez voir aucune différence, mais si vous accédez à la base de données, vous devriez voir une table nommée jos_helloworld contenant deux colonnes : id et greeting. Ainsi que deux entrées: Hello World! et Good bye World.
admin/tables/helloworld.php
<?php
/**
* @package Joomla.Administrator
* @subpackage com_helloworld
*
* @copyright Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// No direct access
defined('_JEXEC') or die('Restricted access');
/**
* Hello Table class
*
* @since 0.0.1
*/
class HelloWorldTableHelloWorld extends JTable
{
/**
* Constructor
*
* @param JDatabaseDriver &$db A database connector object
*/
function __construct(&$db)
{
parent::__construct('#__helloworld', 'id', $db);
}
}
Empaqueter le composant
Contenu de votre répertoire de code
Créez un fichier compressé de ce répertoire ou téléchargez directement l'archive et installez-le en utilisant le gestionnaire des extensions Joomla. Vous pouvez ajouter un élément de menu pour ce composant à l'aide du gestionnaire de menus dans le backend.
- helloworld.xml
- site/helloworld.php
- site/index.html
- site/controller.php
- site/views/index.html
- site/views/helloworld/index.html
- site/views/helloworld/view.html.php
- site/views/helloworld/tmpl/index.html
- site/views/helloworld/tmpl/default.xml
- site/views/helloworld/tmpl/default.php
- site/models/index.html
- site/models/helloworld.php
- admin/index.html
- admin/helloworld.php
- admin/sql/index.html
- admin/sql/install.mysql.utf8.sql
- admin/sql/uninstall.mysql.utf8.sql
- admin/sql/updates/index.html
- admin/sql/updates/mysql/index.html
- admin/sql/updates/mysql/0.0.1.sql
- admin/sql/updates/mysql/0.0.6.sql
- admin/models/index.html
- admin/models/fields/index.html
- admin/models/fields/helloworld.php
- admin/tables/index.html
- admin/tables/helloworld.php
Merci de créer un pull request ou un rapport d'anomalie sur https://github.com/joomla/Joomla-3.2-Hello-World-Component pour toute incohérence dans le code ou pour modifier le code source de cette page.