Parfois on souhaite pouvoir initialiser les pages et la structure minimale nécessaire au fonctionnement d'un module pour un site très rapidement. Il est possible de passer par une mécanique d'import des pages par script XML.
Objectifs :
Sur la base de notre module recipes
nous allons créer un fichier XML pour importer les éléments suivants :
contextual_website_website_modules_recipes-list
sur la pagecontextual_website_website_modules_recipes-detail
sur la page
Nous allons créer le fichier recipes/setup/defaultStructure.xml
qui contiendra nos définitions XML. Nous initialisons ce fichier avec le binding du module website afin que les éléments de type site, rubrique, page et menu soient reconnus, nous y précisons également la cible de l'import, à savoir le site déclaré comme site par défaut :
<?xml version="1.0" encoding="UTF-8"?> <script> <binding fileName="modules/website/persistentdocument/import/website_binding.xml" /> <website byTag="default_modules_website_default-website"> </website> </script>
Nous créons un noeud topic
nous y affectons un label
et un id
qui sera utilisé pour permettre de le retrouver à d'autres endroits du script :
<topic byLabel="Recettes" id="recipesTopic"> </topic>
Nous créons un noeud page
pour chacune des pages. Nous affectons les id
aux pages pour les retrouver dans le script d'import, nous définissons leur tag (byTag
), puis nous y insérons ensuite le contenu, pour la zone de saisie content-block
. A noter que nous configurons le paramètre nbRecipesPerPage
à 5
pour le bloc de liste des recettes :
<page byTag="contextual_website_website_modules_recipes-list" id="recipesList" template-attr="templateHome" isIndexPage="true" label="Liste des recettes" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipelist" __nbRecipesPerPage="5" /> </changecontent> </page> <page byTag="contextual_website_website_modules_recipes_page-detail" id="recipeDetail" template-attr="templateHome" label="Détail d'une recette" navigationVisibility="hidden" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipe" /> </changecontent> </page>
Nous insérons dans le menu indiqué comme étant le menu principal (tag contextual_website_website_menu-main
) et nous y ajoutons la page sur laquelle nous avons définit l'id recipesList
:
<menus> <menu byTag="contextual_website_website_menu-main"> <menuitempage pageid="recipesList" /> </menu> </menus>
Nous ajoutons un noeud i18n
par traduction et nous définissons la langue de la traduction en lui affectant l'attribut lang
. Pour retrouver les éléments auxquels se rapportent les traductions, nous utilisons l'attribut byRefid
valant l'id de l'élément auquel se rapporte la traduction. Il n'est utile de préciser que les valeur localisées du document et les paramètres de bloc (on constate qu'il n'y a pas de paramètre pour le bloc de liste il sera donc configurer selon les valeurs par défaut du bloc) :
<i18n lang="en"> <topic byRefid="recipesTopic" label="Recipes"> <page byRefid="recipesList" label="Recipes list" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipelist" /> </changecontent> </page> <page byRefid="recipeDetail" label="Recipe detail" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipe" /> </changecontent> </page> </topic> </i18n>
Voici ce à quoi devrait ressembler votre fichier XML d'import
<?xml version="1.0" encoding="UTF-8"?> <script> <binding fileName="modules/website/persistentdocument/import/website_binding.xml" /> <website byTag="default_modules_website_default-website"> <topic byLabel="Recettes" id="recipesTopic"> <page byTag="contextual_website_website_modules_recipes-list" id="recipesList" template-attr="templateHome" isIndexPage="true" label="Liste des recettes" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipelist" __nbRecipesPerPage="5" /> </changecontent> </page> <page byTag="contextual_website_website_modules_recipes_page-detail" id="recipeDetail" template-attr="templateHome" label="Détail d'une recette" navigationVisibility="hidden" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipe" /> </changecontent> </page> </topic> <i18n lang="en"> <topic byRefid="recipesTopic" label="Recipes"> <page byRefid="recipesList" label="Recipes list" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipelist" /> </changecontent> </page> <page byRefid="recipeDetail" label="Recipe detail" > <changecontent for="content-block"> <changeblock type="modules_recipes_Recipe" /> </changecontent> </page> </topic> </i18n> <menus> <menu byTag="contextual_website_website_menu-main"> <menuitempage pageid="recipesList" /> </menu> </menus> </website> </script>
Pour importer le fichier il vous suffit de lancer la commande :
php framework/bin/change.php import-data recipes defaultStructure.xml
Il est possible de faire bien plus de choses encore par le biais de l'importation XML, pour cela veuillez consulter la section dédiée aux imports XML de la référence.