J3.x

Developing an MVC Component/Using the database/fr: Difference between revisions

From Joomla! Documentation

No edit summary
Created page with "Bien que garder les deux numéros de version en ordre soit une bonne idée, ce n’est pas une obligation. Joomla tire la version du schéma du nom du dernier fichier de mise..."
 
(61 intermediate revisions by 4 users not shown)
Line 2: Line 2:
{{:J3.1:Developing an MVC Component/fr}}
{{:J3.1:Developing an MVC Component/fr}}
==Introduction==
==Introduction==
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.3:Developing an MVC Component|Développement d'un Composant MVC pour Joomla! 3.3]]. Vous êtes invité à lire les articles précédents de cette série avant de lire celui-ci. Egalement, tout en faisant cette partie, vous êtes également encouragé à lire cet [[S:MyLanguage/Selecting_data_using_JDatabase|article]] sur les requêtes de base de données, sur la sélection de données dans une table de base de données et leur récupération dans plusieurs formats.
 
Il existe également 3 vidéos associées à cette étape dans le didacticiel, couvrant [https://www.youtube.com/watch?v=JWS_3rx8RzY la configuration de la base de données], [https://www.youtube.com/watch?v= rKEHDeFGlGM Affichage du message (à l'aide de JTable)] et [https://www.youtube.com/watch?v=uEDNyG6pSEk Sélection du message de l'administrateur (et JDatabase)].
 
{{#widget:YouTube|id=JWS_3rx8RzY}}
 
{{#widget:YouTube|id=rKEHDeFGlGM}}
 
{{#widget:YouTube|id=uEDNyG6pSEk}}


== Utiliser la base de données ==
== 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.
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.


Avec votre gestionnaire de fichiers et éditeur préférés, créer deux fichiers appelés <tt>admin/sql/install.mysql.utf8.sql</tt> et <tt>admin/sql/updates/mysql/0.0.6.sql</tt>. Ils devraient tous les deux avoir le même contenu :
A l'aide de votre gestionnaire de fichiers et éditeur préférés, créez deux fichiers nommés <tt>admin/sql/install.mysql.utf8.sql</tt> et <tt>admin/sql/updates/mysql/0.0.6.sql</tt>. Ils devraient tous les deux avoir le même contenu :


<span id="admin/sql/install.mysql.utf8.sql">
<span id="admin/sql/install.mysql.utf8.sql">
Line 17: Line 25:
`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 30: Line 38:
</source>
</source>
</span>
</span>
'''Note.''' Joomla recommande aujourd'hui de spécifier
<tt>ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;</tt>
au lieu de ce qui est en haut. InnoDB est le moteur de base de données MySQL le plus moderne (et désormais le moteur par défaut), remplaçant MyISAM. En outre, utf8mb4 prend en charge un plus grand nombre de jeux de caractères, y compris les emojis. Cependant, je n'ai pas testé toutes les étapes du didacticiel avec ce paramètre. Par conséquent, si vous l'utilisez et parcourez toute la série de didacticiels sans trouver de problème, envisagez de mettre à jour ce fichier et de le situer dans les autres étapes du didacticiel.
Notez également que si vous examinez une base de données Joomla, de nombreuses clés de tables de base de données possèdent un champ appelé 'titre' pour le type d'informations que nous stockons dans notre champ 'message d'accueil'. Il est généralement conseillé de suivre le modèle de Joomla et d'utiliser 'title' comme nom de champ, car lorsque nous essayons d'utiliser des fonctionnalités plus complexes (telles que les ACL et les associations), certaines des principales routines JavaScript de Joomla que nous souhaitons réutiliser s'attendent à la présence d'un 'titre'. (Un élément à prendre en compte lors de la prochaine mise à jour de cette série de didacticiels).
Vous constaterez souvent que la table de base de données possède un champ permettant de suivre l'état publié/non publié d'un élément. L'utilisation du nom 'state' dans Joomla n'est pas recommandée car cela peut entraîner des conflits, le nom 'published' est utilisé à la place.<br />
Remarque: Comment dire à Joomla de stocker la valeur du champ de formulaire publié dans un champ de base de données de noms différent? Nous faisons cela en utilisant la méthode [[S:MyLanguage/Column alias|setColumnAlias()]] (depuis 3.4.0).


Le fichier <tt>install.mysql.utf8.sql</tt> sera exécuté lorsque vous installez le composant. Le fichier ''0.0.6.sql'' est exécuté lorsque vous effectuez une mise à jour.
Le fichier <tt>install.mysql.utf8.sql</tt> 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 <code>#__schemas</code>. 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 <code>#__schemas</code> correspondra toujours à la version du composant.
Voici le fichier d'installation. Il sera exécuté si vous respectez un ordre approprié dans votre fichier <tt>helloworld.xml</tt>.


'''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.
'''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 <tt>helloworld.xml</tt>.


<span id="helloworld.xml">
<span id="helloworld.xml">
Line 43: Line 60:
<source lang="xml" highlight="13,17-26,58-61">
<source lang="xml" highlight="13,17-26,58-61">
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.2.0" method="upgrade">
<extension type="component" version="3.0" method="upgrade">


<name>Hello World!</name>
<name>Hello World!</name>
<!-- The following elements are optional and free of formatting constraints -->
<!-- The following elements are optional and free of formatting constraints -->
<creationDate>January 2014</creationDate>
<creationDate>January 2018</creationDate>
<author>John Doe</author>
<author>John Doe</author>
<authorEmail>john.doe@example.org</authorEmail>
<authorEmail>john.doe@example.org</authorEmail>
Line 112: Line 129:
Faites de même avec le fichier de désinstallation :
Faites de même avec le fichier de désinstallation :


Avec votre gestionnaire de fichiers et éditeur préférés ajouter un fichier <tt>admin/sql/uninstall.mysql.utf8.sql</tt> contenant:
A l'aide de votre gestionnaire de fichiers et éditeur préférés, ajoutez un fichier <tt>admin/sql/uninstall.mysql.utf8.sql</tt> contenant :


<span id="admin/sql/uninstall.mysql.utf8.sql">
<span id="admin/sql/uninstall.mysql.utf8.sql">
Line 120: Line 137:
</source>
</source>
</span>
</span>
== Numérotation des schémas ==
Votre composant a un numéro de version (spécifié dans la balise <tt><version></tt> dans votre fichier manifeste helloword.xml) et le schéma de base de données de votre composant a son propre numéro de version (basé sur les noms de fichier des fichiers de mise à jour SQL).
Joomla assure le suivi de la version du schéma de base de données de votre composant via un enregistrement dans sa table <tt>#__schemas</tt>. Ainsi, lorsque vous installez un composant pour la première fois, s'il existe un fichier appelé, par exemple, <tt>admin/sql/updates/mysql/0.0.6.sql</tt>, Joomla stockera la valeur <tt>0.0.6</tt> dans son enregistrement de schéma.
La prochaine fois que vous installerez une version plus récente de ce composant - il ne sera pas nécessaire que ce soit la version suivante, vous pourrez ignorer les versions - Joomla procédera comme suit:
* il récupérera la dernière version du schéma de la base de données du composant à partir de sa table <tt>#__</tt> - vous pourrez donc trouver dans notre exemple la valeur 0.0.6.
* il obtiendra les noms de fichiers de tous les fichiers du répertoire <tt>admin/sql/updates/mysql/</tt> et les organisera par ordre croissant.
* il traitera dans l'ordre les fichiers de mise à jour dont le nom de fichier est numériquement après la version actuelle du schéma. Il peut donc rechercher des fichiers nommés 0.0.7.sql, 0.0.9.sql et 0.0.10.sql, et les traiter dans l'ordre.
* il mettra à jour l'enregistrement de schéma pour qu'il porte le numéro du dernier fichier de mise à jour qu'il a traité, par exemple 0.0.10.
Si vous avez déjà publié des versions de votre composant lorsque vous introduisez l'utilisation de la base de données, comme nous l'avons simulé dans cette série de didacticiels, votre premier fichier de mise à jour doit avoir exactement le même contenu que le fichier d'installation. Si vous ne l'avez pas fait, alors il devrait être vide.
Bien que garder les deux numéros de version en ordre soit une bonne idée, ce n’est pas une obligation. Joomla tire la version du schéma du nom du dernier fichier de mise à jour numérique. C'est pourquoi il est recommandé de créer un fichier de mise à jour initial, même s'il est vide. Si vous souhaitez conserver vos numéros de schéma en phase avec les numéros de version de composant lorsque vous mettez à jour votre code mais pas le schéma de base de données, vous devez simplement inclure un fichier de mise à jour associé au nouveau numéro de version. Ce fichier de mise à jour sera également vide.
Lors des prochaines éditions de votre composant, le fichier d'installation de la base de données doit toujours contenir le schéma complet. Les fichiers de mise à jour ne doivent contenir que les modifications que vous avez apportées au schéma depuis la dernière mise à jour.


== Ajouter un nouveau type de champ ==
== Ajouter un nouveau type de champ ==
For the moment, we have used a [[S:MyLanguage/J3.3:Developing an MVC Component/Adding a menu type to the site part|hard coded field type for messages]]. We need to use our database for choosing the 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, et pour se faire, ilnous faut définir un type de champ personnalisé (que nous appelons ''helloworld'' ci-dessous) comme décrit [[S:MyLanguage/Creating_a_custom_form_field_type|ici]].


Modify the <tt>site/views/helloworld/tmpl/default.xml</tt> file and put these lines
Modifiez le fichier <tt>site/views/helloworld/tmpl/default.xml</tt> et ajoutez ces lignes :


<span id="site/views/helloworld/tmpl/default.xml">
<span id="site/views/helloworld/tmpl/default.xml">
Line 151: Line 186:
</span>
</span>


It introduces a new field type and tells Joomla to look for the field definition in the <tt>/administrator/components/com_helloworld/models/fields</tt> folder.
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>.


With your favorite file manager and editor put a file ''admin/models/fields/helloworld.php'' file containing:
Pour en savoir plus sur les requêtes de base de données, la sélection de données à partir d'une table de base de données et leur récupération dans plusieurs formats [[S:MyLanguage/Selecting_data_using_JDatabase|cliquez ici]].
A l'aide de votre gestionnaire de fichiers et éditeur préférés, ajoutez un fichier ''site/models/helloworld.php'' contenant :


<span id="admin/models/fields/helloworld.php">
<span id="admin/models/fields/helloworld.php">
Line 163: Line 199:
  * @subpackage  com_helloworld
  * @subpackage  com_helloworld
  *
  *
  * @copyright  Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
  * @copyright  Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
  * @license    GNU General Public License version 2 or later; see LICENSE.txt
  * @license    GNU General Public License version 2 or later; see LICENSE.txt
  */
  */
Line 218: Line 254:
</span>
</span>


The new field type displays a drop-down list of messages to choose from. You can see the result of this change in the menu manager section for the helloworld item.
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.


== Afficher le message sélectionné ==
== Afficher le message sélectionné ==
When a menu item of this component is created/updated, Joomla stores the identifier of the message. The <tt>HelloWorldModelHelloWorld</tt> model has now to compute the message according to this identifier and the data stored in the database.
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.  Pour ce faire, cela utilise la fonctionnalité [[S:Mylanguage/Using_the_the_JTable_JTable_class|JTable]], qui est une alternative à JDatabase si seules les opérations CRUD sur un seul enregistrement sont nécessaires.


Modifiez le fichier <tt>site/models/helloworld.php</tt> :
Modifiez le fichier <tt>site/models/helloworld.php</tt> :
Line 233: Line 269:
  * @subpackage  com_helloworld
  * @subpackage  com_helloworld
  *
  *
  * @copyright  Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
  * @copyright  Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
  * @license    GNU General Public License version 2 or later; see LICENSE.txt
  * @license    GNU General Public License version 2 or later; see LICENSE.txt
  */
  */
Line 305: Line 341:
</span>
</span>


The model now asks the ''TableHelloWorld'' to get the message. This table class has to be defined in <tt>admin/tables/helloworld.php</tt> file
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>.


<span id="admin/tables/helloworld.php">
<span id="admin/tables/helloworld.php">
Line 315: Line 351:
  * @subpackage  com_helloworld
  * @subpackage  com_helloworld
  *
  *
  * @copyright  Copyright (C) 2005 - 2015 Open Source Matters, Inc. All rights reserved.
  * @copyright  Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved.
  * @license    GNU General Public License version 2 or later; see LICENSE.txt
  * @license    GNU General Public License version 2 or later; see LICENSE.txt
  */
  */
Line 342: Line 378:
</span>
</span>


You shouldn't see any differences, but if you access the database you should see a table named ''jos_helloworld'' with two columns: id and greeting. And two entries: ''Hello World!'' and ''Good bye World''.
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''.


== Empaqueter le composant ==
== Empaqueter le composant ==
Line 379: Line 415:
{{notice|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.}}
{{notice|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.}}


== Contributors ==
==Contributeurs==
*[[User:cdemko|Christophe Demko]]
*[[User:cdemko|Christophe Demko]]
*[[User:oaksu|Ozgur Aksu]]
*[[User:oaksu|Ozgur Aksu]]
Line 390: Line 426:


<noinclude>
<noinclude>
[[Category:Joomla! 3.x/fr|Joomla! 3.x]]
[[Category:Joomla! 3.x{{#translation:}}]]
[[Category:Joomla! 3.0/fr|Joomla! 3.0]]
[[Category:Joomla! 3.0{{#translation:}}]]
[[Category:Joomla! 3.1/fr|Joomla! 3.1]]
[[Category:Joomla! 3.1{{#translation:}}]]
[[Category:Joomla! 3.2/fr|Joomla! 3.2]]
[[Category:Joomla! 3.2{{#translation:}}]]
[[Category:Joomla! 3.3/fr|Joomla! 3.3]]
[[Category:Joomla! 3.3{{#translation:}}]]
[[Category:Joomla! 3.4/fr|Joomla! 3.4]]
[[Category:Joomla! 3.4{{#translation:}}]]
[[Category:Beginner Development/fr|Développement pour débutants]]
[[Category:Beginner Development{{#translation:}}]]
[[Category:Component Development/fr|Développement de composants]]
[[Category:Component Development{{#translation:}}]]
[[Category:Tutorials/fr|Didacticiels]]
[[Category:Tutorials{{#translation:}}]]
[[Category:Tutorials in a Series/fr|Didacticiels en série]]
[[Category:Tutorials in a Series{{#translation:}}]]
</noinclude>
</noinclude>

Latest revision as of 21:37, 8 March 2019

Joomla! 
3.x
Didacticiel
Développement d'un composant MVC

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

  1. Ajout d'ACL

Ajout d'un fichier script installation/désinstallation/mise à jour

Ajout d'un formulaire de frontend

  1. Ajout d'une image
  2. Ajout d'un plan
  3. Ajout d'AJAX
  4. Ajout d'un alias

Utilisation du filtre de langues

  1. Ajouter une fenêtre modale
  2. Ajout d'associations
  3. Ajout de Checkout
  4. Ajout d'un filtre
  5. Ajout de niveaux
  6. Ajout de versions
  7. Ajout de tags
  8. Ajout d'accès
  9. Ajout d'un processus de traitement
  10. Ajout d'un cache
  11. Ajout d'un fil d'actualité

Ajout d'un serveur de mise à jour

  1. Adding Custom Fields
  2. Upgrading to Joomla4



Ceci est une série qui regroupe plusieurs articles pour devenir un didacticiel sur la façon de développer un Composant pour Joomla! Joomla 3.x 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.3. Vous êtes invité à lire les articles précédents de cette série avant de lire celui-ci. Egalement, tout en faisant cette partie, vous êtes également encouragé à lire cet article sur les requêtes de base de données, sur la sélection de données dans une table de base de données et leur récupération dans plusieurs formats.

Il existe également 3 vidéos associées à cette étape dans le didacticiel, couvrant la configuration de la base de données, rKEHDeFGlGM Affichage du message (à l'aide de JTable) et Sélection du message de l'administrateur (et 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!');

Note. Joomla recommande aujourd'hui de spécifier

ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci;

au lieu de ce qui est en haut. InnoDB est le moteur de base de données MySQL le plus moderne (et désormais le moteur par défaut), remplaçant MyISAM. En outre, utf8mb4 prend en charge un plus grand nombre de jeux de caractères, y compris les emojis. Cependant, je n'ai pas testé toutes les étapes du didacticiel avec ce paramètre. Par conséquent, si vous l'utilisez et parcourez toute la série de didacticiels sans trouver de problème, envisagez de mettre à jour ce fichier et de le situer dans les autres étapes du didacticiel.

Notez également que si vous examinez une base de données Joomla, de nombreuses clés de tables de base de données possèdent un champ appelé 'titre' pour le type d'informations que nous stockons dans notre champ 'message d'accueil'. Il est généralement conseillé de suivre le modèle de Joomla et d'utiliser 'title' comme nom de champ, car lorsque nous essayons d'utiliser des fonctionnalités plus complexes (telles que les ACL et les associations), certaines des principales routines JavaScript de Joomla que nous souhaitons réutiliser s'attendent à la présence d'un 'titre'. (Un élément à prendre en compte lors de la prochaine mise à jour de cette série de didacticiels).

Vous constaterez souvent que la table de base de données possède un champ permettant de suivre l'état publié/non publié d'un élément. L'utilisation du nom 'state' dans Joomla n'est pas recommandée car cela peut entraîner des conflits, le nom 'published' est utilisé à la place.
Remarque: Comment dire à Joomla de stocker la valeur du champ de formulaire publié dans un champ de base de données de noms différent? Nous faisons cela en utilisant la méthode setColumnAlias() (depuis 3.4.0).

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.

Voici le fichier d'installation. Il sera exécuté si vous respectez un ordre approprié dans votre fichier helloworld.xml.

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.

helloworld.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.0" method="upgrade">

	<name>Hello World!</name>
	<!-- The following elements are optional and free of formatting constraints -->
	<creationDate>January 2018</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`;

Numérotation des schémas

Votre composant a un numéro de version (spécifié dans la balise <version> dans votre fichier manifeste helloword.xml) et le schéma de base de données de votre composant a son propre numéro de version (basé sur les noms de fichier des fichiers de mise à jour SQL).

Joomla assure le suivi de la version du schéma de base de données de votre composant via un enregistrement dans sa table #__schemas. Ainsi, lorsque vous installez un composant pour la première fois, s'il existe un fichier appelé, par exemple, admin/sql/updates/mysql/0.0.6.sql, Joomla stockera la valeur 0.0.6 dans son enregistrement de schéma.

La prochaine fois que vous installerez une version plus récente de ce composant - il ne sera pas nécessaire que ce soit la version suivante, vous pourrez ignorer les versions - Joomla procédera comme suit:

  • il récupérera la dernière version du schéma de la base de données du composant à partir de sa table #__ - vous pourrez donc trouver dans notre exemple la valeur 0.0.6.
  • il obtiendra les noms de fichiers de tous les fichiers du répertoire admin/sql/updates/mysql/ et les organisera par ordre croissant.
  • il traitera dans l'ordre les fichiers de mise à jour dont le nom de fichier est numériquement après la version actuelle du schéma. Il peut donc rechercher des fichiers nommés 0.0.7.sql, 0.0.9.sql et 0.0.10.sql, et les traiter dans l'ordre.
  • il mettra à jour l'enregistrement de schéma pour qu'il porte le numéro du dernier fichier de mise à jour qu'il a traité, par exemple 0.0.10.

Si vous avez déjà publié des versions de votre composant lorsque vous introduisez l'utilisation de la base de données, comme nous l'avons simulé dans cette série de didacticiels, votre premier fichier de mise à jour doit avoir exactement le même contenu que le fichier d'installation. Si vous ne l'avez pas fait, alors il devrait être vide.

Bien que garder les deux numéros de version en ordre soit une bonne idée, ce n’est pas une obligation. Joomla tire la version du schéma du nom du dernier fichier de mise à jour numérique. C'est pourquoi il est recommandé de créer un fichier de mise à jour initial, même s'il est vide. Si vous souhaitez conserver vos numéros de schéma en phase avec les numéros de version de composant lorsque vous mettez à jour votre code mais pas le schéma de base de données, vous devez simplement inclure un fichier de mise à jour associé au nouveau numéro de version. Ce fichier de mise à jour sera également vide.

Lors des prochaines éditions de votre composant, le fichier d'installation de la base de données doit toujours contenir le schéma complet. Les fichiers de mise à jour ne doivent contenir que les modifications que vous avez apportées au schéma depuis la dernière mise à jour.

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, et pour se faire, ilnous faut définir un type de champ personnalisé (que nous appelons helloworld ci-dessous) comme décrit ici.

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.

Pour en savoir plus sur les requêtes de base de données, la sélection de données à partir d'une table de base de données et leur récupération dans plusieurs formats cliquez ici. A l'aide de votre gestionnaire de fichiers et éditeur préférés, ajoutez un fichier site/models/helloworld.php contenant :

admin/models/fields/helloworld.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 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;
	}
}

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.

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. Pour ce faire, cela utilise la fonctionnalité JTable, qui est une alternative à JDatabase si seules les opérations CRUD sur un seul enregistrement sont nécessaires.

Modifiez le fichier site/models/helloworld.php :

site/models/helloworld.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 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];
	}
}

Le modèle demande le message à la TableHelloWorld. Cette classe de table doit être définie dans le fichier admin/tables/helloworld.php.

admin/tables/helloworld.php

<?php
/**
 * @package     Joomla.Administrator
 * @subpackage  com_helloworld
 *
 * @copyright   Copyright (C) 2005 - 2018 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);
	}
}

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.

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.

General Information

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.

Contributeurs