Difference between revisions of "Manifest files/fr"

From Joomla! Documentation

(Created page with "Ce code ne fonctionne qu'avec {{JVer|4.0}} et les versions ultérieures")
 
(78 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
<noinclude><languages /></noinclude>
 
<noinclude><languages /></noinclude>
 
<noinclude>
 
<noinclude>
{{Joomla version|version=3.x}} {{Joomla version|version=2.5|time=and after|status=eos}}  
+
{{Joomla version|version=4.x}} {{Joomla version|version=3.x}} {{Joomla version|version=2.5|status=eos}}  
 
</noinclude>
 
</noinclude>
{{-}}
 
 
Avec Joomla, toutes les extensions proposent des fichiers manifestes. Ces fichiers recouvrent les informations générales concernant l'installation, ainsi que des paramètres pour la configuration de l'[[S:MyLanguage/extension|extension]] elle-même. Depuis Joomla! 2.5, il existe très peu de différences entre les différents formats de fichiers manifestes en fonction des différents [[S:MyLanguage/Extension types (technical definitions)|types d'extensions]] permettant ainsi à chaque type de bénéficier de la puissance de l'installateur Joomla.
 
Avec Joomla, toutes les extensions proposent des fichiers manifestes. Ces fichiers recouvrent les informations générales concernant l'installation, ainsi que des paramètres pour la configuration de l'[[S:MyLanguage/extension|extension]] elle-même. Depuis Joomla! 2.5, il existe très peu de différences entre les différents formats de fichiers manifestes en fonction des différents [[S:MyLanguage/Extension types (technical definitions)|types d'extensions]] permettant ainsi à chaque type de bénéficier de la puissance de l'installateur Joomla.
  
==Les conventions de nommage==
+
==Conventions de nommage==
Le fichier doit être nommé <tt>manifest.xml</tt> ou <tt><extension_name>.xml</tt> et situé dans le répertoire racine de l'installation du package.
+
Le fichier doit être nommé <tt>manifest.xml</tt> (pour les versions de Joomlaǃ 2.5 et 3) ou <tt><extension_name>.xml</tt> (pour les versions de Joomlaǃ 2.5, 3 et 4) et situé dans le répertoire racine du package d'installation.
 +
 
 +
Joomla 4.x : la correspondance automatique du namespace va échouer si un nom de fichier tel que <tt>manifest.xml</tt> est utilisé. Voir https://github.com/joomla/joomla-cms/issues/37750
 +
 
  
 
==Syntaxe==
 
==Syntaxe==
  
=== L'élément racine ===
+
===Élément à la racine===
La balise principale du fichier d'installation est :  
+
{{notice|La nouvelle balise <code><extension></code> remplace l'ancienne <code><install></install></code> de la version Joomla {{JVer|1.5}}}}
 +
 
 +
La balise principale du fichier d'installation est&nbsp;:
 
<source lang=xml><extension></extension></source>
 
<source lang=xml><extension></extension></source>
  
Ces balises ouvrantes et fermantes sont maintenant valables pour toutes les extensions. La nouvelle balise <code><extension></code> remplace les anciennes <code><install></install></code> depuis Joomla! 1.5. Les attributs suivants sont autorisés à l'intérieur de la balise :
+
La balise ouvrante et fermante est la même pour toutes les extensions. Les attributs suivants sont autorisés à l'intérieur de la balise&nbsp;:
  
 
{|class="wikitable"
 
{|class="wikitable"
Line 21: Line 25:
 
! style="width: 150px" | Attribut || style="width: 150px" | Valeurs || Applicable à || Description
 
! style="width: 150px" | Attribut || style="width: 150px" | Valeurs || Applicable à || Description
 
|-
 
|-
| type || <code>component</code><br /><code>file</code><br /><code>language</code><br /><code>library</code><br /><code>module</code><br /><code>package</code><br /><code>plugin</code><br /><code>template</code> || Toutes les extensions
+
| type || <code>component</code><br /><code>file</code><br /><code>language</code><br /><code>library</code><br /><code>module</code><br /><code>package</code><br /><code>plugin</code><br /><code>template</code><br/><code>element</code> || Toutes les extensions
 
| Cet attribut décrit à l'installateur le type de l'extension. En fonction de ce type, d'autres d'exigences supplémentaires s'appliqueront aux sous-balises.
 
| Cet attribut décrit à l'installateur le type de l'extension. En fonction de ce type, d'autres d'exigences supplémentaires s'appliqueront aux sous-balises.
 
|-
 
|-
 
| version
 
| version
 
| <code>2.5</code><br /><code>3.0</code> || Toutes les extensions
 
| <code>2.5</code><br /><code>3.0</code> || Toutes les extensions
| Chaîne de caractères qui identifie la version de Joomla! pour laquelle cette extension est développée.
+
| Chaîne de caractères qui identifie la version de Joomla! pour laquelle cette extension est développée. Ceci n'est pas utilisé dans le version {{JVer|3.x}} et a été retiré de la version {{JVer|4.0}} et des versions ultérieures.
 
|-
 
|-
 
| method
 
| method
Line 40: Line 44:
 
| Le nom du groupe indique pour quels groupes de plugins le nouveau plugin est disponible. Les groupes existants sont les noms de dossier du répertoire <tt>/plugins</tt>. Le programme d'installation va créer de nouveaux noms de dossier pour les noms de groupe qui n'existent pas encore.
 
| Le nom du groupe indique pour quels groupes de plugins le nouveau plugin est disponible. Les groupes existants sont les noms de dossier du répertoire <tt>/plugins</tt>. Le programme d'installation va créer de nouveaux noms de dossier pour les noms de groupe qui n'existent pas encore.
 
|}
 
|}
 
  
 
===Métadonnées===
 
===Métadonnées===
Line 56: Line 59:
 
<version> &ndash; the version number of the extension (e.g. 1.6.0)
 
<version> &ndash; the version number of the extension (e.g. 1.6.0)
 
<description> &ndash; the description of the component. This is a translatable field. (e.g. COM_BANNERS_XML_DESCRIPTION)
 
<description> &ndash; the description of the component. This is a translatable field. (e.g. COM_BANNERS_XML_DESCRIPTION)
 +
<element> &ndash; the internal name of the component. If omitted, name will be cleaned and used
 
</pre>
 
</pre>
  
Line 70: Line 74:
  
 
Les fichiers à copier dans le répertoire de frontend doivent être placés dans les balises <code><files></code>. Vous pouvez utiliser l'attribut <code>folder</code> en option pour spécifier un répertoire '''du package ZIP'''. Chaque fichier à copier doit être nommé par l'élément <code><filename></code>. Si vous souhaitez copier un dossier entier à la fois, vous pouvez le définir comme un <code><folder></code>.
 
Les fichiers à copier dans le répertoire de frontend doivent être placés dans les balises <code><files></code>. Vous pouvez utiliser l'attribut <code>folder</code> en option pour spécifier un répertoire '''du package ZIP'''. Chaque fichier à copier doit être nommé par l'élément <code><filename></code>. Si vous souhaitez copier un dossier entier à la fois, vous pouvez le définir comme un <code><folder></code>.
 +
 +
Pour les '''plugins''', le nom brut du plugin doit être placé dans l'attribut <code>plugin</code> de l'élément <code><filename></code> qui pointe vers le fichier contenant la classe du plugin. Par exemple, dans le cas d'un système de plugin appelé "exemple" (nom complet : <code>plg_system_exemple</code>), il faudra utiliser <code><filename plugin="exemple">exemple.php</filename></code>.
  
 
===Fichiers multimédias===
 
===Fichiers multimédias===
Line 83: Line 89:
 
Cet exemple permet de copier le fichier (<tt>/media/com_example_logo.png</tt>) et les dossiers ( <tt>/media/css/</tt> et <tt>/media/js/</tt> ) listés vers <tt>/media/com_example/</tt>, ainsi que la création du dossier <tt>com_example</tt> si nécessaire. Vous pouvez utiliser en option l'attribut <code>folder</code> pour spécifier un répertoire '''dans le package ZIP''' à partir duquel réaliser la (dans ce cas, <tt>media</tt>).
 
Cet exemple permet de copier le fichier (<tt>/media/com_example_logo.png</tt>) et les dossiers ( <tt>/media/css/</tt> et <tt>/media/js/</tt> ) listés vers <tt>/media/com_example/</tt>, ainsi que la création du dossier <tt>com_example</tt> si nécessaire. Vous pouvez utiliser en option l'attribut <code>folder</code> pour spécifier un répertoire '''dans le package ZIP''' à partir duquel réaliser la (dans ce cas, <tt>media</tt>).
  
Les extensions doivent stocker les éléments, dont elles ont besoin pour être accessible sur le web (JS, CSS, images, etc), dans <code>media</code>. Cette fonctionnalité a été ajoutée dans le cadre du projet de développement d'une interface multi-site et du placement éventuel de fichiers de code (PHP) en dehors des espaces web serveurs accessibles.
+
Les extensions doivent stocker les éléments, dont elles ont besoin pour être accessible sur le web (JS, CSS, images, etc), dans <code>media</code>. Cette fonctionnalité a été ajoutée dans le cadre du projet de développement d'une interface multi-site et du placement éventuel de fichiers de code (PHP) en dehors des espaces web serveurs accessibles.<br />Remarque: la section médias n'est pas analysé pour les extensions de type 'package'.
  
 
Ref:
 
Ref:
Line 103: Line 109:
 
Les fichiers à copier dans le répertoire de backend doivent être placés dans l'élément <code><files></code> sous <code><administration></code>. Vous pouvez utiliser l'attribut optionnel <code>folder</code> pour spécifier un répertoire à copier depuis le '''pack ZIP'''. Voir les ''fichiers frontend'' pour plus d'informations.
 
Les fichiers à copier dans le répertoire de backend doivent être placés dans l'élément <code><files></code> sous <code><administration></code>. Vous pouvez utiliser l'attribut optionnel <code>folder</code> pour spécifier un répertoire à copier depuis le '''pack ZIP'''. Voir les ''fichiers frontend'' pour plus d'informations.
  
====Liens de Menu et sous-menus====
+
====Liens de menu et sous-menus====
{{dablink|'''Note de version :''' avant Joomla! 3.4 il n'était pas nécessaire d'avoir une balise de menu dans votre fichier XML pour que le menu soit créé. Ce bug a été corrigé dans Joomla! 3.4 et ainsi, si aucun élément de menu a été créé, alors aucun élément du menu d'administration ne sera créé pour le composant.}}
+
{{dablink|'''Note de version :''' avant Joomla! 3.4, le fait de ne pas avoir de balise <code><nowiki><menu></nowiki></code> dans votre fichier XML avait pour conséquence l création d'un élément de menu. Cette anomalie a été corrigée dans Joomla! 3.4 et ainsi, si aucune balise <code><nowiki><menu></nowiki></code> n'est présente dans votre fichier manifest, aucun menu d'administration ne sera créé pour le composant.}}
  
 
<source lang="xml">
 
<source lang="xml">
Line 125: Line 131:
 
! style="width: 150px" | Attribut || Description
 
! style="width: 150px" | Attribut || Description
 
|-
 
|-
| link || Un lien vers lequel renvoyer l'utilisateur lorsque l'élément de menu est cliqué.
+
| link || Un lien vers lequel renvoyer l'utilisateur lorsque l'élément de menu est cliqué. Vous pouvez utiliser "view" à la place.
 
|-
 
|-
 
| img || Le chemin (relatif) à une image (16x16 pixels) qui apparait à côté de l'élément de menu.  
 
| img || Le chemin (relatif) à une image (16x16 pixels) qui apparait à côté de l'élément de menu.  
Line 132: Line 138:
 
| alt ||
 
| alt ||
 
|-
 
|-
| ''string'' || Un paramètre URL à ajouter au lien. Par exemple, <code><menu view="cpanel">COM_EXAMPLE</menu></code> dans le manifest XML com_example générerait l'URL de l'élément de menu <tt>index.php?option=com_example&view=cpanel</tt>.
+
| view || Un paramètre URL à ajouter au lien. Par exemple, <code><menu view="cpanel">COM_EXAMPLE</menu></code> dans le manifest XML com_example générerait l'URL de l'élément de menu <tt>index.php?option=com_example&view=cpanel</tt>. Vous pouvez utiliser "link" à la place.
 
|-
 
|-
 
|}
 
|}
Line 140: Line 146:
 
Le contenu de ce fichier devrait être :
 
Le contenu de ce fichier devrait être :
  
<source>
+
<source lang="ini">
 
COM_EXAMPLE="Example Component"
 
COM_EXAMPLE="Example Component"
 
COM_EXAMPLE_SUBMENU_ANOPTION="Another Option"
 
COM_EXAMPLE_SUBMENU_ANOPTION="Another Option"
Line 146: Line 152:
 
</source>
 
</source>
  
Veuillez noter que la chaîne de langue doit être placée entre des guillemets doubles, comme c'est le standard pour les traductions Joomla. Remarque : depuis Joomla! 1.6, le classement des éléments de menu des composants est basé sur la traduction de la clé présente dans le manifest XML. Cela signifie que l'ordre de tri sera correct, quelque soit le nom donné à votre clé de traduction et quelque soit la langue dans laquelle le site est affiché. Joomla! 1.6 a permis de corriger les erreurs dans l'agencement des menus de composants sous Joomla! 1.5.
+
Notez que les chaînes de caractères de langues doivent être contenues à l'intérieur de guillemets doubles, comme toutes les chaînes de traductions habituelles de Joomla!.
 +
 
 +
{{note|Joomla! 1.6 and later sorts the Component menu items based on the actual translation of the key you supply in your XML manifest. This means that the sorting order is correct no matter what you call your translation key and no matter which language the site is being displayed in. Essentially, Joomla! 1.6 fixed the wrong sorting of the Components menu experienced under Joomla! 1.5 for the majority (non-English speaking!) of Joomla! users.}}
 +
 
 +
=== Tableaux de bord ===
 +
{{notice|Ce code ne fonctionne qu'avec {{JVer|4.0}} et les versions ultérieures}}
 +
 
 +
Specifies the details for displaying a dashboard for the component in the Administrator area for the site.
 +
* It will make a dashboard icon appear next to the administrator menu item for the component
 +
* The dashboard icon will click through to display modules assigned to the cpanel-example administrator module position
 +
* The title and icon defined in the XML file will be used as the header and icon at the top of the component's dashboard page.
 +
 
 +
<source lang="xml">
 +
<dashboards>
 +
<dashboard title="COM_EXAMPLE_DASHBOARD_TITLE" icon="icon-lock">example</dashboard>
 +
</dashboards>
 +
</source>
  
 
===Configuration===
 
===Configuration===
{{warning|Les composants '''ne prennent pas en charge''' les définitions de configuration '''dans le manifeste'''. Ceci avait été mis en œuvre dans Joomla! 1.5. Ils est possible de définir les options de configuration pour différents niveaux à l'aide des [[S:MyLanguage/Component configuration metadata|métadonnées de configuration de composant]].}}
+
{{warning|<div class="mw-translate-fuzzy">
 +
Les composants '''ne prennent pas en charge''' les définitions de configuration '''dans le manifeste'''. Ceci avait été mis en œuvre dans Joomla! 1.5. Ils est possible de définir les options de configuration pour différents niveaux à l'aide des [[S:MyLanguage/Component configuration metadata|métadonnées de configuration de composant]].
 +
</div>}}
 +
<div class="mw-translate-fuzzy">
 
La balise <code><config></code>, enfant de la racine, décrit les options de configuration de l'extension. En cas de besoin, les options seront affichées par le gestionnaire concerné (gestionnaire de plugins, gestionnaire de modules ou gestionnaire de templates). '''Les options de configuration peuvent également être définies dans un fichier séparé nommé <code>config.xml</code>. Son élément racine doit être <code><config></code>.'''
 
La balise <code><config></code>, enfant de la racine, décrit les options de configuration de l'extension. En cas de besoin, les options seront affichées par le gestionnaire concerné (gestionnaire de plugins, gestionnaire de modules ou gestionnaire de templates). '''Les options de configuration peuvent également être définies dans un fichier séparé nommé <code>config.xml</code>. Son élément racine doit être <code><config></code>.'''
 +
</div>
  
 
Chaque groupe de champs <code><fieldset></code> peut contenir un ou plusieurs éléments <code><field></code> (champ), chacun représentant un seul [[S:MyLanguage/form field|champ de formulaire]] avec une étiquette. Consultez les [[S:MyLanguage/Standard form field types|types de champs pour formulaires standards]] pour une liste des types de champs autorisés et un exemple de définitions de champs de formulaire XML.
 
Chaque groupe de champs <code><fieldset></code> peut contenir un ou plusieurs éléments <code><field></code> (champ), chacun représentant un seul [[S:MyLanguage/form field|champ de formulaire]] avec une étiquette. Consultez les [[S:MyLanguage/Standard form field types|types de champs pour formulaires standards]] pour une liste des types de champs autorisés et un exemple de définitions de champs de formulaire XML.
 +
 +
=== Namespace ===
 +
{{notice|This code only works in {{JVer|4.0}} and later}}
 +
 +
Specify the namespace to be used for autoloading the plugin. The given namespace will autoload to the root directory of your extension by default however you can optionally add a "path" attribute to the namespace element to specify a subpath within your extensions root directory.
  
 
===SQL===
 
===SQL===
Line 171: Line 202:
 
Dans l'exemple ci-dessus, nous avons placé les fichiers SQL dans le répertoire <tt>admin/sql</tt> du paquet d'installation. Vous devez inclure le dossier <tt>sql</tt> dans les fichiers d'administration (tel que décrit dans "les fichiers backend").
 
Dans l'exemple ci-dessus, nous avons placé les fichiers SQL dans le répertoire <tt>admin/sql</tt> du paquet d'installation. Vous devez inclure le dossier <tt>sql</tt> dans les fichiers d'administration (tel que décrit dans "les fichiers backend").
  
Vous pouvez exécuter SQL lors de l'installation et/ou la désinstallation à l'aide des éléments <code><install></code> et <code><uninstall></code>. Une balise <code><sql></code> doit apparaître comme un enfant de ces éléments. <code><sql></code> peut contenir n'importe quel nombre d'éléments <code><file></code>, chacun devant définir un seul fichier SQL à exécuter. Leurs types de pilote de base de données sont décrits par l'attribut <code>driver</code>, leurs jeux de caractères par l'attribut <code>charset.
+
Vous pouvez exécuter SQL lors de l'installation et/ou la désinstallation à l'aide des éléments <code><install></code> et <code><uninstall></code>. Une balise <code><sql></code> doit apparaître comme un enfant de ces éléments. <code><sql></code> peut contenir n'importe quel nombre d'éléments <code><file></code>, chacun devant définir un seul fichier SQL à exécuter. Leurs types de pilote de base de données sont décrits par l'attribut <code>driver</code>, leurs jeux de caractères par l'attribut <code>charset</code>.
  
 +
<div class="mw-translate-fuzzy">
 
==== Mise à jour du schéma SQL====
 
==== Mise à jour du schéma SQL====
 +
</div>
 +
 +
Depuis la version 1.6, une balise <code><update></code> est disponible et vous permet de fournir une série de fichiers SQL pour mettre à jour le schéma actuel.
  
 
<source lang="xml">
 
<source lang="xml">
Line 184: Line 219:
 
</source>
 
</source>
  
Depuis la version 1.6, une balise <code><update></code> est disponible et vous permet de fournir une série de fichiers SQL pour mettre à jour le schéma actuel.
+
Par exemple, pour passer de la version <code>1.0.0</code> à la version <code>1.0.1</code> dans une base de données '''MySQL''', un fichier <code>1.0.1.sql</code> doit être créé dans le dossier <code>sql/updates/mysql</code> et la balise <code><version></code> du manifest doit être mis à jour :
 +
<source lang="xml">
 +
<version>1.0.1</version></source>
 +
 
 +
 
 +
La structure finale du dossier sql ressemblera à ceci (dans l'hypothèse d'une base de données '''MySQL''')
 +
<source lang="xml">
 +
sql
 +
|-->example.install.sql
 +
|-->example.uninstall.sql
 +
|-->updates
 +
    |-->mysql
 +
        |-->1.0.1.sql</source>
 +
 
 +
Des fichiers similaires doivent être créés pour les versions suivantes.
  
 +
<div class="mw-translate-fuzzy">
 
===Fichiers langue===
 
===Fichiers langue===
Dans Joomla! 1.5, les développeurs d'extensions devaient placer les fichiers de langue dans le fichier général de s langues de Joomla! à l'aide des balises &lt;langues&gt;...&lt;/langues&gt; comme indiqué ci-dessous. '''Cette méthode peut toujours être utilisée avec''' {{JVer|2.5,3.x}}.
+
</div>
 +
<div class="mw-translate-fuzzy">
 +
Dans Joomla! 1.5, les développeurs d'extensions devaient placer les fichiers de langue dans le dossier général des langues de Joomla! à l'aide des balises &lt;languages&gt;...&lt;/languages&gt; comme indiqué ci-dessous. '''Cette méthode peut toujours être utilisée avec la version''' {{JVer|3.x}}.
 +
</div>
  
 
<source lang="xml">
 
<source lang="xml">
<!-- Joomla! 1.5 language tag -->
+
<!-- Joomla! language tag -->
 
<languages folder="langfiles">
 
<languages folder="langfiles">
 
<language tag="en-GB">en-GB.com_example.ini</language>
 
<language tag="en-GB">en-GB.com_example.ini</language>
Line 196: Line 249:
 
</source>
 
</source>
  
Since Joomla! 1.6 it has been encouraged placing your extension's language files in your extension folder. Joomla! will then automatically load your extension's language files.
+
<div class="mw-translate-fuzzy">
 +
Depuis Joomla! 1.6, il vous est conseillé de placer les fichiers langue de votre extension dans le dossier même de votre extension. Joomla! chargera alors automatiquement les fichiers de langue depuis votre extension.
 +
</div>
  
By storing extension language files in the extension folder, you gain the benefit of isolating and protecting your extension's language files. For example, an administrator removes a language from their Joomla! installation. Your extension's language files will not be removed. They will remain in place and will be available if the language is installed again.
+
En plaçant les fichiers de langue dans le dossier de l'extension, vous permettez ainsi de les isoler et donc de les protéger. Par exemple, dans le cas ou un administrateur supprimerait une langue de son installation Joomlaǃ. Dans ce cas, les fichiers de langue de l'extension ne seront pas supprimés. Ils resteront alors en place et ne seront accessibles que si la langue est installée à nouveau.
  
The structure of the language folder for frontend and backend is the same. You put them in the language tag (e.g. '''en-GB''' ) of each language in your language folder i.e. '''language/en-GB/'''. You have to specify those folders in the front-end and back-end files too.
+
La structure du dossier de langue pour le frontend et le backend est identique. Il convient de les placer dans la balise <code>&lt;languages&gt;</code> (par exemple '''en-GB''') pour chaque langue et dans le dossier comme suit&nbsp;: '''language/en-GB/'''. Vous devez aussi spécifier ces dossiers pour le frontend et le backend.
  
In your manifest you simply include the ''''language'''' folder in your files section, the sub-directories for each language automatically be copied. Inside the <files> group you simply add a <folder> element alongside the items in the '''<files>''' group as shown in this example:
+
Dans votre manifest, il suffit simplement d'inclure votre dossier <tt><language></tt> dans la section fichiers. Les sous-répertoires pour chaque langue seront alors automatiquement copiés. À l'intérieur des groupes <code><files></code>, il vous suffit d'ajouter une balise <code><folder></code> à côté des éléments dans le groupe <tt><files></tt>, comme indiqué dans cet exemple&nbsp;:
  
 
<source lang="xml">
 
<source lang="xml">
Line 212: Line 267:
 
</source>
 
</source>
  
Il convient également de noter que les deux techniques peuvent fonctionner ensemble. Voici un exemple du noyau :
+
Notez que les deux techniques peuvent fonctionner ensemble. Voici un exemple du noyau&nbsp;:
  
 
<source lang="xml">
 
<source lang="xml">
Line 228: Line 283:
 
Les avantages pour cette solution sont les suivants :
 
Les avantages pour cette solution sont les suivants :
  
All ini files present in the core folder have precedence over the files in the extension language/ folder.
+
Tous les fichiers ''.ini'' présents dans le dossier du noyau ont la priorité sur les fichiers dans les dossiers langue des extensions.
For example a sys.ini file will always be loaded from core folders in back-end if it exists, except when installing an extension which contains a sys.ini file in a language folder. In that case and only that case, the sys.ini file in the extension folder will display its translated content at install time. This is very handy as a developer can have 2 sys.ini files with different contents. A description of the successful install as well as a tutorial in back-end for example.
+
Par exemple, s'il existe, un fichier <tt>sys.ini</tt> d'un dossier du noyau sera toujours chargé dans le backend, sauf lors de l'installation d'une extension qui contient son propre fichier <tt>sys.ini</tt> dans un dossier de langue. Dans ce cas et uniquement ce cas, le fichier <tt>sys.ini</tt> dans le dossier de l'extension affichera son contenu traduit au moment de l'installation. C'est très pratique car un développeur peut avoir deux fichiers <tt>sys.ini</tt> avec un contenu différent.
  
Also, it is much easier for a user needing an ini file for an extension that does not provide it in the language desired, to add it in the main folders. No risk for it to be deleted in case of uninstalling the extension by mistake or any other reason.
+
Il est également beaucoup plus facile pour un utilisateur ayant besoin de trouver le fichier <tt>.ini</tt> d'une extension qui n'est pas disponible dans sa langue de l'ajouter dans le dossier principal. Il n'y a aucun risque qu'il ne soit supprimé en cas de désinstallation par erreur de l'extension.
  
 
Veuillez consulter également :
 
Veuillez consulter également :
Line 237: Line 292:
 
*[[S:MyLanguage/Creating language packs for extensions in Joomla 2.5|Créer un pack langue pour une extension Joomla! 2.5]]
 
*[[S:MyLanguage/Creating language packs for extensions in Joomla 2.5|Créer un pack langue pour une extension Joomla! 2.5]]
  
During development you can turn on language debugging in the Joomla! global configuration. So you can investigate if a problems arises. As of 3.2, this is necessary to help debug as en-GB is '''always''' loaded first when not in debug mode to prevent displaying Constants.
+
Au cours du développement, vous pouvez activer le système de débogage de langue dans la configuration globale de Joomlaǃ. Vous pourrez découvrir si un problème est levé. Depuis {{JVer|3.2}}, cela est nécessaire afin d'aider à déboguer le en-GB qui est '''toujours''' chargé en premier lorsque l'on est pas en mode de débogage et ainsi empêcher l'affichage des constantes.
  
 
===Fichier de script===
 
===Fichier de script===
Line 245: Line 300:
 
</source>
 
</source>
  
An optional '''script file''' (PHP code that is run before, during and/or after installation, uninstallation and upgrading) can be defined using a <code><scriptfile></code> element. This file should contain a class named "<element_name>InstallerScript" where <element_name> is the name of your extension (e.g. com_componentname, mod_modulename, etc.). Plugins requires to state the group (e.g. plgsystempluginname). Library packages do not support scriptfiles. The structure of the class is as follows:
+
<div class="mw-translate-fuzzy">
 +
Un '''fichier de script''' (code PHP qui est exécuté avant, pendant et/ou après l'installation, la désinstallation ou la mise à jour) peut, en option, être défini à l'aide d'une balise <code><scriptfile></code>. Ce fichier doit contenir une classe nommée '<tt><element_name>InstallerScript''</tt> où <tt><element_name></tt> est le nom de votre extension (par exemple : com_nomducomposant, mod_nomdumodule, etc.). Pour les plugins, il convient de nommer également le groupe (par exemple : plgsystemnomduplugin). Les packages de bibliothèque ne prennent pas en charge les fichiers scripts. La structure de la classe sera comme suit :
 +
</div>
 +
 
 +
This file should contain a class named "<element_name>InstallerScript" where <element_name> is the name of your extension (e.g. com_componentname, mod_modulename, etc.). Plugins must state the group (e.g. plgsystempluginname).
 +
 
 +
In {{JVer|4.0}} and later the structure of the class is as follows:
  
 
<source lang="php">
 
<source lang="php">
 +
 +
<?php
 +
 +
use Joomla\CMS\Installer\InstallerAdapter;
  
 
class com_componentnameInstallerScript
 
class com_componentnameInstallerScript
Line 254: Line 319:
 
* Constructor
 
* Constructor
 
*
 
*
* @param  JAdapterInstance $adapter  The object responsible for running this script
+
* @param  InstallerAdapter $adapter  The object responsible for running this script
 
*/
 
*/
public function __construct(JAdapterInstance $adapter);
+
public function __construct(InstallerAdapter $adapter)
 +
{
 +
}
 
 
 
/**
 
/**
Line 262: Line 329:
 
*
 
*
 
* @param  string  $route  Which action is happening (install|uninstall|discover_install|update)
 
* @param  string  $route  Which action is happening (install|uninstall|discover_install|update)
* @param  JAdapterInstance $adapter  The object responsible for running this script
+
* @param  InstallerAdapter $adapter  The object responsible for running this script
 
*
 
*
 
* @return  boolean  True on success
 
* @return  boolean  True on success
 
*/
 
*/
public function preflight($route, JAdapterInstance $adapter);
+
public function preflight($route, InstallerAdapter $adapter)
 +
{
 +
return true;
 +
}
 
 
 
/**
 
/**
Line 272: Line 342:
 
*
 
*
 
* @param  string  $route  Which action is happening (install|uninstall|discover_install|update)
 
* @param  string  $route  Which action is happening (install|uninstall|discover_install|update)
* @param  JAdapterInstance $adapter  The object responsible for running this script
+
* @param  InstallerAdapter $adapter  The object responsible for running this script
 
*
 
*
 
* @return  boolean  True on success
 
* @return  boolean  True on success
 
*/
 
*/
public function postflight($route, JAdapterInstance $adapter);
+
public function postflight($route, $adapter)
 +
{
 +
return true;
 +
}
 
 
 
/**
 
/**
 
* Called on installation
 
* Called on installation
 
*
 
*
* @param  JAdapterInstance $adapter  The object responsible for running this script
+
* @param  InstallerAdapter $adapter  The object responsible for running this script
 
*
 
*
 
* @return  boolean  True on success
 
* @return  boolean  True on success
 
*/
 
*/
public function install(JAdapterInstance $adapter);
+
public function install(InstallerAdapter $adapter)
 +
{
 +
return true;
 +
}
 
 
 
/**
 
/**
 
* Called on update
 
* Called on update
 
*
 
*
* @param  JAdapterInstance $adapter  The object responsible for running this script
+
* @param  InstallerAdapter $adapter  The object responsible for running this script
 
*
 
*
 
* @return  boolean  True on success
 
* @return  boolean  True on success
 
*/
 
*/
public function update(JAdapterInstance $adapter);
+
public function update(InstallerAdapter $adapter)
 +
{
 +
return true;
 +
}
 
 
 
/**
 
/**
 
* Called on uninstallation
 
* Called on uninstallation
 
*
 
*
* @param  JAdapterInstance $adapter  The object responsible for running this script
+
* @param  InstallerAdapter $adapter  The object responsible for running this script
 
*/
 
*/
public function uninstall(JAdapterInstance $adapter);
+
public function uninstall(InstallerAdapter $adapter)
 +
{
 +
return true;
 +
}
 
}
 
}
  
 +
?>
 +
</source>
 +
 +
Note that since Joomla 3.6 Joomla has shipped a basic script that you can use instead of shipping your own from scratch '''JInstallerScript''' which contains various helper methods commonly used through the community.
 +
 +
=== Library Manifests ===
 +
{{notice|The section is based on {{JVer|4.0}} and later}}
 +
 +
A simple library manifest might look like this:
 +
<source lang="xml">
 +
<?xml version="1.0" encoding="utf-8"?>
 +
<extension type="library" method="upgrade" version="4.0">
 +
    <name>My Test library.</name>
 +
    <libraryname>mytest</libraryname>
 +
    <files>
 +
        <folder>Classes</folder>
 +
        <folder>language</folder>
 +
        <filename>mytest.php</filename>
 +
    </files>
 +
</extension></source>
 +
 +
This will install the library into the <tt>JPATH_SITE/libraries/mytest</tt> folder.
 +
 +
What if your company has several libraries and you want to group them together under folder <tt>JPATH_SITE/libraries/mycompany</tt>?
 +
 +
Simple - include your company name in the <tt>libraryname</tt> property of each library like this:
 +
 +
<source lang="xml">
 +
    <libraryname>mycompany/mylibrary1</libraryname>
 +
</source>
 +
 +
<source lang="xml">
 +
    <libraryname>mycompany/mylibrary2</libraryname>
 +
</source>
 +
 +
These libraries will then be installed in the <tt>JPATH_SITE/libraries/mycompany/mylibrary1</tt> and <tt>JPATH_SITE/libraries/mycompany/mylibrary2</tt> folders.
 +
 +
Uninstalling <tt>mylibrary1</tt> will still leave <tt>mylibrary2</tt> installed on your site.
 +
 +
When using <tt>script files</tt> with such company libraries the installer class name should look like this:
 +
<source lang="php">
 +
class mycompanymylibrary1InstallerScript
 +
</source>
 +
<source lang="php">
 +
class mycompanymylibrary2InstallerScript
 
</source>
 
</source>
  
 +
<div class="mw-translate-fuzzy">
 
=== Serveurs de mise à jour ===
 
=== Serveurs de mise à jour ===
 +
</div>
  
 
<source lang="xml">
 
<source lang="xml">
Line 315: Line 444:
 
</source>
 
</source>
  
Update servers can be defined in the <code><updateservers></code> element, a child of the root. This element may contain one or more <code><server></code> element, each describing a location to fetch updates from. Each <code><server></code> item can define the following attributes:
+
Les serveurs de mise à jour peuvent être définis dans les balises <code><updateservers></code> comme enfant de la racine. Cet élément peut contenir une ou plusieurs balises <code><server></code> chacune avec la description depuis laquelle chercher les mises à jour. Chaque rubrique <code><server></code> permet de définir les attributs suivants :
  
 
{| class="wikitable"
 
{| class="wikitable"
Line 327: Line 456:
 
|}
 
|}
  
 +
<div class="mw-translate-fuzzy">
 
Pour plus d'informations :
 
Pour plus d'informations :
 
* [[S:MyLanguage/J2.5:Developing a MVC Component/Adding an update server|Création d'une extension Joomla! - Ajout d'un serveur de mise à jour]]
 
* [[S:MyLanguage/J2.5:Developing a MVC Component/Adding an update server|Création d'une extension Joomla! - Ajout d'un serveur de mise à jour]]
 
* [[S:MyLanguage/J2.5:Managing Component Updates|Gestion des mises à jour de composants pour Joomla! 2.5]]
 
* [[S:MyLanguage/J2.5:Managing Component Updates|Gestion des mises à jour de composants pour Joomla! 2.5]]
 +
</div>
 +
 +
=== Supporting Download Keys ===
 +
 +
As of Joomla 4.0.0 users can enter their download keys in the Update Sites list. This gives them a single place to manage the download keys. When a user is going to update an extension, Joomla will check if there is a download key. If there is a download key, Joomla will add the download key to the update URL.
 +
 +
To support download keys you must include the <tt>dlid</tt> tag in the manifest file. The <tt>dlid</tt> tag takes 2 arguments:
 +
* prefix
 +
* suffix
 +
 +
The <tt>dlid</tt> tag will look like this in your manifest file:
 +
<source lang="xml">
 +
<dlid prefix="dlid=" suffix="&amp;dummy=my.zip"/>
 +
</source>
  
 +
The prefix will be added before the download key and the suffix after the download key. Using the example above the full query added to the download link will be:
 +
<source lang="php">
 +
dlid=KEY&amp;dummy=my.zip
 +
</source>
 +
 +
The key is added before the <tt>onInstallerBeforePackageDownload</tt> event is triggered, so the full URL will be passed to the event.
 +
 +
===Exemples===
 +
<div class="mw-translate-fuzzy">
 
== Exemples ==
 
== Exemples ==
Pour un exemple, veuillez consulter [https://github.com/joomla/joomla-cms/blob/2.5.x/administrator/components/com_banners/banners.xml le manifest pour le composant bannière de la version Joomla! 2.5].
+
Pour un exemple concret, veuillez consulter [https://github.com/joomla/joomla-cms/blob/3.6.4/administrator/components/com_banners/banners.xml le manifest pour le composant bannière de la version Joomla! 3.6.4].
 
+
</div>
The Joomla testing process uses several extensions to test whether the installer works correctly. The latest versions of the manifests of these extensions are:
 
  
* [http://svn.joomla.org/project/cms/development/trunk/tests/_data/installer_packages/com_alpha/alpha.xml com_alpha manifest]
+
D'autres exemples peuvent être trouvés dans le répertoire autonome des liens web&nbsp;:
* [http://svn.joomla.org/project/cms/development/trunk/tests/_data/installer_packages/mod_alpha/mod_alpha.xml mod_alpha manifest]
 
* [http://svn.joomla.org/project/cms/development/trunk/tests/_data/installer_packages/plg_system_alpha/alpha.xml plg_system_alpha manifest]
 
* [http://svn.joomla.org/project/cms/development/trunk/tests/_data/installer_packages/tpl_simple/templateDetails.xml tpl_simple manifest]
 
* [http://svn.joomla.org/project/cms/development/trunk/tests/_data/installer_packages/lng_xx-XX/xx-XX.xml lng_xx-XX manifest]
 
  
==Contributeurs==
+
<div class="mw-translate-fuzzy">
*[[User:akede|Alex Kempkens]]
+
* [https://github.com/joomla-extensions/weblinks/blob/master/src/administrator/components/com_weblinks/weblinks.xml manifest com_weblinks]
*[[User:dperaza|Daniel Peraza]]
+
* [https://github.com/joomla-extensions/weblinks/blob/master/src/modules/mod_weblinks/mod_weblinks.xml manifest mod_weblinks]
*[[User:nikosdion|Nicholas K. Dionysopoulos]]
+
* [https://github.com/joomla-extensions/weblinks/blob/master/src/plugins/search/weblinks/weblinks.xml manifest plg_search_weblinks]
*[[User:mrs.siam|Prasit Gebsaap]]
+
* [https://github.com/joomla/joomla-cms/blob/3.6.4/templates/protostar/templateDetails.xml manifest tpl_protostar (3.6.4)]
*[[User:cppl|Craig Phillips]]
+
* [https://github.com/joomla/joomla-cms/blob/3.6.4/administrator/language/en-GB/en-GB.xml manifest en-GB (3.6.4)]
 +
</div>
  
 
<noinclude>
 
<noinclude>
[[Category:Development/fr|Développement]]
+
[[Category:Development{{#translation:}}]]
[[Category:Extension development/fr|Développement d'extensions]]
+
[[Category:Extension development{{#translation:}}]]
[[Category:Specifications/fr|Spécifications]]
+
[[Category:Specifications{{#translation:}}]]
 
</noinclude>
 
</noinclude>

Latest revision as of 03:26, 4 September 2022

Other languages:
Bahasa Indonesia • ‎Deutsch • ‎English • ‎Nederlands • ‎español • ‎français • ‎italiano • ‎中文(台灣)‎
Joomla! 
4.x
Joomla! 
3.x
Joomla! 
2.5

Avec Joomla, toutes les extensions proposent des fichiers manifestes. Ces fichiers recouvrent les informations générales concernant l'installation, ainsi que des paramètres pour la configuration de l'extension elle-même. Depuis Joomla! 2.5, il existe très peu de différences entre les différents formats de fichiers manifestes en fonction des différents types d'extensions permettant ainsi à chaque type de bénéficier de la puissance de l'installateur Joomla.

Conventions de nommage

Le fichier doit être nommé manifest.xml (pour les versions de Joomlaǃ 2.5 et 3) ou <extension_name>.xml (pour les versions de Joomlaǃ 2.5, 3 et 4) et situé dans le répertoire racine du package d'installation.

Joomla 4.x : la correspondance automatique du namespace va échouer si un nom de fichier tel que manifest.xml est utilisé. Voir https://github.com/joomla/joomla-cms/issues/37750


Syntaxe

Élément à la racine

Info non-talk.png
General Information

La nouvelle balise <extension> remplace l'ancienne <install></install> de la version Joomla Joomla 1.5

La balise principale du fichier d'installation est :

<extension></extension>

La balise ouvrante et fermante est la même pour toutes les extensions. Les attributs suivants sont autorisés à l'intérieur de la balise :

Attribut Valeurs Applicable à Description
type component
file
language
library
module
package
plugin
template
element
Toutes les extensions Cet attribut décrit à l'installateur le type de l'extension. En fonction de ce type, d'autres d'exigences supplémentaires s'appliqueront aux sous-balises.
version 2.5
3.0
Toutes les extensions Chaîne de caractères qui identifie la version de Joomla! pour laquelle cette extension est développée. Ceci n'est pas utilisé dans le version Joomla 3.x et a été retiré de la version Joomla 4.0 et des versions ultérieures.
method install
upgrade
Toutes les extensions La valeur par défaut install sera également utilisée si l'attribut method n'est pas utilisé. La valeur install signifie que l'installateur va s'arrêter s'il trouve un fichier/dossier de la nouvelle extension.
client site
administrator
Modules L'attribut client permet de préciser pour quel type de client d'application le nouveau module est disponible.
group string Plugins Le nom du groupe indique pour quels groupes de plugins le nouveau plugin est disponible. Les groupes existants sont les noms de dossier du répertoire /plugins. Le programme d'installation va créer de nouveaux noms de dossier pour les noms de groupe qui n'existent pas encore.

Métadonnées

Les éléments suivants peuvent être utilisés pour insérer des métadonnées. Aucun de ces éléments n'est obligatoire et s'ils sont présents, ils doivent être un enfant de l'élément racine.

<name> – raw component name (e.g. com_banners). 
<author> – author's name (e.g. Joomla! Project)
<creationDate> – date of creation or release (e.g. April 2006)
<copyright> – a copyright statement (e.g. (C) 2005 - 2011 Open Source Matters. All rights reserved.)
<license> – a license statement (e.g. NU General Public License version 2 or later; see LICENSE.txt)
<authorEmail> – author's email address (e.g. admin@joomla.org)
<authorUrl> – URL to the author's website (e.g. www.joomla.org)
<version> – the version number of the extension (e.g. 1.6.0)
<description> – the description of the component. This is a translatable field. (e.g. COM_BANNERS_XML_DESCRIPTION)
<element> – the internal name of the component. If omitted, name will be cleaned and used

Remarque : les balises <name> et <description> sont des champs traduisibles de sorte que le nom et la description de l'extension pourront être présents dans la langue maternelle de l'utilisateur.

Fichiers de frontend

	<files folder="from-folder">
		<filename>example.php</filename>
		<folder>examples</folder>
	</files>

Les fichiers à copier dans le répertoire de frontend doivent être placés dans les balises <files>. Vous pouvez utiliser l'attribut folder en option pour spécifier un répertoire du package ZIP. Chaque fichier à copier doit être nommé par l'élément <filename>. Si vous souhaitez copier un dossier entier à la fois, vous pouvez le définir comme un <folder>.

Pour les plugins, le nom brut du plugin doit être placé dans l'attribut plugin de l'élément <filename> qui pointe vers le fichier contenant la classe du plugin. Par exemple, dans le cas d'un système de plugin appelé "exemple" (nom complet : plg_system_exemple), il faudra utiliser <filename plugin="exemple">exemple.php</filename>.

Fichiers multimédias

	<media folder="media" destination="com_example">
		<filename>com_example_logo.png</filename>
		<folder>css</folder>
		<folder>js</folder>
	</media>

Cet exemple permet de copier le fichier (/media/com_example_logo.png) et les dossiers ( /media/css/ et /media/js/ ) listés vers /media/com_example/, ainsi que la création du dossier com_example si nécessaire. Vous pouvez utiliser en option l'attribut folder pour spécifier un répertoire dans le package ZIP à partir duquel réaliser la (dans ce cas, media).

Les extensions doivent stocker les éléments, dont elles ont besoin pour être accessible sur le web (JS, CSS, images, etc), dans media. Cette fonctionnalité a été ajoutée dans le cadre du projet de développement d'une interface multi-site et du placement éventuel de fichiers de code (PHP) en dehors des espaces web serveurs accessibles.
Remarque: la section médias n'est pas analysé pour les extensions de type 'package'.

Ref:

Section de l'administration

	<administration>
		<!-- various elements -->
	</administration>

La section d'administration est définie par l'élément <administration>. Puisque seuls les composants concernent à la fois l'espace site et celui d'administration, seuls les manifests pour composants doivent intégrer ces éléments.

Fichiers de backend

Les fichiers à copier dans le répertoire de backend doivent être placés dans l'élément <files> sous <administration>. Vous pouvez utiliser l'attribut optionnel folder pour spécifier un répertoire à copier depuis le pack ZIP. Voir les fichiers frontend pour plus d'informations.

Liens de menu et sous-menus

	<menu>COM_EXAMPLE</menu>
	<submenu>
		<!--
			Note that all & must be escaped to &amp; for the file to be valid
			XML and be parsed by the installer
		-->
		<menu link="anoption=avalue&amp;anoption1=avalue1">COM_EXAMPLE_SUBMENU_ANOPTION</menu>
		<menu view="viewname">COM_EXAMPLE_SUBMENU_VIEWNAME</menu>
	</submenu>

Le texte pour l'élément du menu principal pour le composant est défini dans la balise <menu>, enfant de de la balise <administration>. Une balise <submenu> peut être présente (également comme enfant de <administration>), qui pourra contenir d'autres éléments de menu définis par <menu>.

En outre, chaque élément <menu> permet de définir les attributs suivants :

Attribut Description
link Un lien vers lequel renvoyer l'utilisateur lorsque l'élément de menu est cliqué. Vous pouvez utiliser "view" à la place.
img Le chemin (relatif) à une image (16x16 pixels) qui apparait à côté de l'élément de menu.

Doit être url compatible (par exemple sans espaces).

alt
view Un paramètre URL à ajouter au lien. Par exemple, <menu view="cpanel">COM_EXAMPLE</menu> dans le manifest XML com_example générerait l'URL de l'élément de menu index.php?option=com_example&view=cpanel. Vous pouvez utiliser "link" à la place.

La valeur à l'intérieur de la balise est le nom du menu. À La différence de ce qui se faisait pour Joomla! 1.5, vous ne pouvez pas utiliser une chaîne de caractère dans votre langue naturelle. Par exemple, si vous renseignez "Composant d'exemple" au lieu de COM_EXAMPLE, votre nom de composant qui s'afficherait en titre serait "composant-d-exemple" et vous seriez dans l'impossibilité de le traduire. Pour réaliser une traduction, vous devez créer un fichier nommé fr-FR.com_example.sys.ini (NDT : avant de pouvoir créer le fichier fr-FR, il convient de créer le fichier d'origine en-GB) dans administrator/languages/fr-FR (vous pouvez utiliser la balise manifest <languages> pour qu'il soit copié lors de l'installation) ou dans administrator/components/com_example/language/fr-FR. Dans ce dernier cas, vous ne devez pas inclure le fichier de traduction dans la balise <languages> balise. Tant que vous aurez placé le répertoire de langue dans vos balises <files>, il sera copié lors de l'installation du composant.

Le contenu de ce fichier devrait être :

COM_EXAMPLE="Example Component"
COM_EXAMPLE_SUBMENU_ANOPTION="Another Option"
COM_EXAMPLE_SUBMENU_VIEWNAME="Another View"

Notez que les chaînes de caractères de langues doivent être contenues à l'intérieur de guillemets doubles, comme toutes les chaînes de traductions habituelles de Joomla!.

Joomla! 1.6 and later sorts the Component menu items based on the actual translation of the key you supply in your XML manifest. This means that the sorting order is correct no matter what you call your translation key and no matter which language the site is being displayed in. Essentially, Joomla! 1.6 fixed the wrong sorting of the Components menu experienced under Joomla! 1.5 for the majority (non-English speaking!) of Joomla! users.

Tableaux de bord

Info non-talk.png
General Information

Ce code ne fonctionne qu'avec Joomla 4.0 et les versions ultérieures

Specifies the details for displaying a dashboard for the component in the Administrator area for the site.

  • It will make a dashboard icon appear next to the administrator menu item for the component
  • The dashboard icon will click through to display modules assigned to the cpanel-example administrator module position
  • The title and icon defined in the XML file will be used as the header and icon at the top of the component's dashboard page.
	<dashboards>
		<dashboard title="COM_EXAMPLE_DASHBOARD_TITLE" icon="icon-lock">example</dashboard>
	</dashboards>

Configuration

Stop hand nuvola.svg.png
Warning!

La balise <config>, enfant de la racine, décrit les options de configuration de l'extension. En cas de besoin, les options seront affichées par le gestionnaire concerné (gestionnaire de plugins, gestionnaire de modules ou gestionnaire de templates). Les options de configuration peuvent également être définies dans un fichier séparé nommé config.xml. Son élément racine doit être <config>.

Chaque groupe de champs <fieldset> peut contenir un ou plusieurs éléments <field> (champ), chacun représentant un seul champ de formulaire avec une étiquette. Consultez les types de champs pour formulaires standards pour une liste des types de champs autorisés et un exemple de définitions de champs de formulaire XML.

Namespace

Info non-talk.png
General Information

This code only works in Joomla 4.0 and later

Specify the namespace to be used for autoloading the plugin. The given namespace will autoload to the root directory of your extension by default however you can optionally add a "path" attribute to the namespace element to specify a subpath within your extensions root directory.

SQL

    <install>
        <sql>
            <file driver="mysql" charset="utf8">sql/example.install.sql</file>
        </sql>
    </install>
    <uninstall>
        <sql>
            <file driver="mysql" charset="utf8">sql/example.uninstall.sql</file>
        </sql>
    </uninstall>

Dans l'exemple ci-dessus, nous avons placé les fichiers SQL dans le répertoire admin/sql du paquet d'installation. Vous devez inclure le dossier sql dans les fichiers d'administration (tel que décrit dans "les fichiers backend").

Vous pouvez exécuter SQL lors de l'installation et/ou la désinstallation à l'aide des éléments <install> et <uninstall>. Une balise <sql> doit apparaître comme un enfant de ces éléments. <sql> peut contenir n'importe quel nombre d'éléments <file>, chacun devant définir un seul fichier SQL à exécuter. Leurs types de pilote de base de données sont décrits par l'attribut driver, leurs jeux de caractères par l'attribut charset.

Mise à jour du schéma SQL

Depuis la version 1.6, une balise <update> est disponible et vous permet de fournir une série de fichiers SQL pour mettre à jour le schéma actuel.

	<update>
		<schemas>
			<schemapath type="mysql">sql/updates/mysql</schemapath>
			<schemapath type="sqlsrv">sql/updates/sqlsrv</schemapath>
		</schemas>
	</update>

Par exemple, pour passer de la version 1.0.0 à la version 1.0.1 dans une base de données MySQL, un fichier 1.0.1.sql doit être créé dans le dossier sql/updates/mysql et la balise <version> du manifest doit être mis à jour :

<version>1.0.1</version>


La structure finale du dossier sql ressemblera à ceci (dans l'hypothèse d'une base de données MySQL)

sql
 |-->example.install.sql
 |-->example.uninstall.sql
 |-->updates
     |-->mysql
        |-->1.0.1.sql

Des fichiers similaires doivent être créés pour les versions suivantes.

Fichiers langue

Dans Joomla! 1.5, les développeurs d'extensions devaient placer les fichiers de langue dans le dossier général des langues de Joomla! à l'aide des balises <languages>...</languages> comme indiqué ci-dessous. Cette méthode peut toujours être utilisée avec la version Joomla 3.x.

<!-- Joomla! language tag -->
<languages folder="langfiles">
	<language tag="en-GB">en-GB.com_example.ini</language>
</languages>

Depuis Joomla! 1.6, il vous est conseillé de placer les fichiers langue de votre extension dans le dossier même de votre extension. Joomla! chargera alors automatiquement les fichiers de langue depuis votre extension.

En plaçant les fichiers de langue dans le dossier de l'extension, vous permettez ainsi de les isoler et donc de les protéger. Par exemple, dans le cas ou un administrateur supprimerait une langue de son installation Joomlaǃ. Dans ce cas, les fichiers de langue de l'extension ne seront pas supprimés. Ils resteront alors en place et ne seront accessibles que si la langue est installée à nouveau.

La structure du dossier de langue pour le frontend et le backend est identique. Il convient de les placer dans la balise <languages> (par exemple en-GB) pour chaque langue et dans le dossier comme suit : language/en-GB/. Vous devez aussi spécifier ces dossiers pour le frontend et le backend.

Dans votre manifest, il suffit simplement d'inclure votre dossier <language> dans la section fichiers. Les sous-répertoires pour chaque langue seront alors automatiquement copiés. À l'intérieur des groupes <files>, il vous suffit d'ajouter une balise <folder> à côté des éléments dans le groupe <files>, comme indiqué dans cet exemple :

<files>
	<filename plugin="alpha">alpha.php</filename>
	<folder>sql</folder>
	<folder>language</folder>
</files>

Notez que les deux techniques peuvent fonctionner ensemble. Voici un exemple du noyau :

<files>
	<filename plugin="languagecode">languagecode.php</filename>
	<filename>index.html</filename>
	<folder>language</folder>
</files>
<languages>
	<language tag="en-GB">language/en-GB/en-GB.plg_system_languagecode.ini</language>
	<language tag="en-GB">language/en-GB/en-GB.plg_system_languagecode.sys.ini</language>
</languages>

Les avantages pour cette solution sont les suivants :

Tous les fichiers .ini présents dans le dossier du noyau ont la priorité sur les fichiers dans les dossiers langue des extensions. Par exemple, s'il existe, un fichier sys.ini d'un dossier du noyau sera toujours chargé dans le backend, sauf lors de l'installation d'une extension qui contient son propre fichier sys.ini dans un dossier de langue. Dans ce cas et uniquement ce cas, le fichier sys.ini dans le dossier de l'extension affichera son contenu traduit au moment de l'installation. C'est très pratique car un développeur peut avoir deux fichiers sys.ini avec un contenu différent.

Il est également beaucoup plus facile pour un utilisateur ayant besoin de trouver le fichier .ini d'une extension qui n'est pas disponible dans sa langue de l'ajouter dans le dossier principal. Il n'y a aucun risque qu'il ne soit supprimé en cas de désinstallation par erreur de l'extension.

Veuillez consulter également :

Au cours du développement, vous pouvez activer le système de débogage de langue dans la configuration globale de Joomlaǃ. Vous pourrez découvrir si un problème est levé. Depuis Joomla 3.2, cela est nécessaire afin d'aider à déboguer le en-GB qui est toujours chargé en premier lorsque l'on est pas en mode de débogage et ainsi empêcher l'affichage des constantes.

Fichier de script

    <scriptfile>example.script.php</scriptfile>

Un fichier de script (code PHP qui est exécuté avant, pendant et/ou après l'installation, la désinstallation ou la mise à jour) peut, en option, être défini à l'aide d'une balise <scriptfile>. Ce fichier doit contenir une classe nommée '<element_name>InstallerScript<element_name> est le nom de votre extension (par exemple : com_nomducomposant, mod_nomdumodule, etc.). Pour les plugins, il convient de nommer également le groupe (par exemple : plgsystemnomduplugin). Les packages de bibliothèque ne prennent pas en charge les fichiers scripts. La structure de la classe sera comme suit :

This file should contain a class named "<element_name>InstallerScript" where <element_name> is the name of your extension (e.g. com_componentname, mod_modulename, etc.). Plugins must state the group (e.g. plgsystempluginname).

In Joomla 4.0 and later the structure of the class is as follows:

<?php

use Joomla\CMS\Installer\InstallerAdapter;

class com_componentnameInstallerScript
{
	/**
	 * Constructor
	 *
	 * @param   InstallerAdapter  $adapter  The object responsible for running this script
	 */
	public function __construct(InstallerAdapter $adapter)
	{
	}
	
	/**
	 * Called before any type of action
	 *
	 * @param   string  $route  Which action is happening (install|uninstall|discover_install|update)
	 * @param   InstallerAdapter  $adapter  The object responsible for running this script
	 *
	 * @return  boolean  True on success
	 */
	public function preflight($route, InstallerAdapter $adapter)
	{
		return true;
	}
	
	/**
	 * Called after any type of action
	 *
	 * @param   string  $route  Which action is happening (install|uninstall|discover_install|update)
	 * @param   InstallerAdapter  $adapter  The object responsible for running this script
	 *
	 * @return  boolean  True on success
	 */
	public function postflight($route, $adapter)
	{
		return true;
	}
	
	/**
	 * Called on installation
	 *
	 * @param   InstallerAdapter  $adapter  The object responsible for running this script
	 *
	 * @return  boolean  True on success
	 */
	public function install(InstallerAdapter $adapter)
	{
		return true;
	}
	
	/**
	 * Called on update
	 *
	 * @param   InstallerAdapter  $adapter  The object responsible for running this script
	 *
	 * @return  boolean  True on success
	 */
	public function update(InstallerAdapter $adapter)
	{
		return true;
	}
	
	/**
	 * Called on uninstallation
	 *
	 * @param   InstallerAdapter  $adapter  The object responsible for running this script
	 */
	public function uninstall(InstallerAdapter $adapter)
	{
		return true;
	}
}

?>

Note that since Joomla 3.6 Joomla has shipped a basic script that you can use instead of shipping your own from scratch JInstallerScript which contains various helper methods commonly used through the community.

Library Manifests

Info non-talk.png
General Information

The section is based on Joomla 4.0 and later

A simple library manifest might look like this:

<?xml version="1.0" encoding="utf-8"?>
<extension type="library" method="upgrade" version="4.0">
    <name>My Test library.</name>
    <libraryname>mytest</libraryname>
    <files>
        <folder>Classes</folder>
        <folder>language</folder>
        <filename>mytest.php</filename>
    </files>
</extension>

This will install the library into the JPATH_SITE/libraries/mytest folder.

What if your company has several libraries and you want to group them together under folder JPATH_SITE/libraries/mycompany?

Simple - include your company name in the libraryname property of each library like this:

    <libraryname>mycompany/mylibrary1</libraryname>
    <libraryname>mycompany/mylibrary2</libraryname>

These libraries will then be installed in the JPATH_SITE/libraries/mycompany/mylibrary1 and JPATH_SITE/libraries/mycompany/mylibrary2 folders.

Uninstalling mylibrary1 will still leave mylibrary2 installed on your site.

When using script files with such company libraries the installer class name should look like this:

class mycompanymylibrary1InstallerScript
class mycompanymylibrary2InstallerScript

Serveurs de mise à jour

    <updateservers>
        <server type="extension" priority="1" name="Extension Update Site">http://example.com/extension.xml</server>
        <server type="collection" priority="2" name="Collection Update Site">http://example.com/collection.xml</server>
    </updateservers>

Les serveurs de mise à jour peuvent être définis dans les balises <updateservers> comme enfant de la racine. Cet élément peut contenir une ou plusieurs balises <server> chacune avec la description depuis laquelle chercher les mises à jour. Chaque rubrique <server> permet de définir les attributs suivants :

Attribut Valeurs Description
type extension
collection
Le type de serveur de mise à jour.
priority integer La priorité du serveur de mise à jour.
name string Le nom du serveur de mise à jour.

Supporting Download Keys

As of Joomla 4.0.0 users can enter their download keys in the Update Sites list. This gives them a single place to manage the download keys. When a user is going to update an extension, Joomla will check if there is a download key. If there is a download key, Joomla will add the download key to the update URL.

To support download keys you must include the dlid tag in the manifest file. The dlid tag takes 2 arguments:

  • prefix
  • suffix

The dlid tag will look like this in your manifest file:

<dlid prefix="dlid=" suffix="&amp;dummy=my.zip"/>

The prefix will be added before the download key and the suffix after the download key. Using the example above the full query added to the download link will be:

dlid=KEY&amp;dummy=my.zip

The key is added before the onInstallerBeforePackageDownload event is triggered, so the full URL will be passed to the event.

Exemples

Exemples

Pour un exemple concret, veuillez consulter le manifest pour le composant bannière de la version Joomla! 3.6.4.

D'autres exemples peuvent être trouvés dans le répertoire autonome des liens web :