Bouton de création de pages personnalisés ou Macros

Il s'agit de réaliser un bouton de création de pages qui pré-paramètre l'assistant de création de pages, afin qu'en un clic l'utilisateur puisse créer une nouvelle actualité utilisant le gabarit "G" et le type de contenu "News" avec l'étiquette "A la une".

La déclaration d'un bouton s'effectue dans un fichier plugin.xml. Au besoin, vous serez amené à créer un nouveau plugin, suivez alors les instructions de la page Architecture d'un plugin Ametys.

Voici le paramétrage du bouton de création de page par défaut déclaré dans le plugin web.

	 <!-- +
    	 | SITEMAP
    	 + -->
     <feature name="userinterface.sitemap.create">
		<extensions>
    		<!-- Ajouter une page -->
    		<extension id="org.ametys.web.userinterface.AddPage"
					   point="org.ametys.cms.workspace.ribbon.RibbonControlsManager" 
					   class="org.ametys.runtime.ui.impl.StaticContextualClientSideElement">
				<action class="org.ametys.ribbon.control.button.SitemapOrModifiablePageActionButton">
					<param name="action">org.ametys.web.tool.page.Add.act</param>
					<param name="label" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_LABEL</param>
					<param name="default-description" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_DESC</param>
					<param name="no-right-description" i18n="true">PLUGINS_WEB_UITOOL_PAGE_NORIGHT_DESC</param>
					<param name="no-selection-description" i18n="true">PLUGINS_WEB_UITOOL_PAGE_NOSELECTION_DESC</param>
					<param name="footer" i18n="true">PLUGINS_WEB_UITOOL_ADDPAGE_FOOTER</param>
					<param name="icon-small" file="true">img/actions/page_add_16.png</param>
					<param name="icon-medium" file="true">img/actions/page_add_32.png</param>
					<param name="icon-large" file="true">img/actions/page_add_50.png</param>
				</action>
				<scripts>
					<file>js/org/ametys/web/tool/page/Actions.i18n.js</file>
                    <file>js/org/ametys/web/tool/page/AddPageWizzard-TagsCard.i18n.js</file>
                    <file>js/org/ametys/web/tool/page/AddPageWizzard-PageTypeCard.i18n.js</file>
                    <file>js/org/ametys/web/tool/page/AddPageWizzard-PageContentCard.i18n.js</file>
                    <file>js/org/ametys/web/tool/page/AddPageWizzard-CreatePageCard.i18n.js</file>
                    <file>js/org/ametys/web/tool/page/AddPageWizzard-Cards.i18n.js</file>
					<file>js/org/ametys/web/tool/page/AddPageWizzard.i18n.js</file>
					<file>js/org/ametys/ribbon/control/button/SitemapOrModifiablePageActionButton.js</file>
					<file>js/org/ametys/web/page/TemplatesMenu.i18n.js</file>	
					<file>js/org/ametys/web/page/LinkPage.i18n.js</file>		
					<file>js/org/ametys/web/zone/AddContentAction.i18n.js</file>
					<file>js/org/ametys/web/zone/AddServiceAction.i18n.js</file>
				</scripts>
				<css>
					<file>css/pages/addpage.css</file>
				</css>
				<right>Web_Rights_Page_Create</right>
			</extension>
		</extensions>     
     </feature>

Déclarez votre propre bouton (en modifiant l'identifiant, les images, les clefs i18n) et en ajoutant les paramètres suivants :

  • title : Titre de la boite de dialogue
  • icon-small : Icone de la boite de dialogue
  • default-page-title : Titre par défaut pour la nouvelle page
  • default-pagetype : Type de page par défaut (template, redirection-cms, redirection-http ou blank)
  • default-template : Template sélectionné par défaut
  • default-pagecontent-type : Type d'élément par défaut (contenttype ou service)
  • default-contenttype : Type de contenu par défaut
  • default-service : Type de service par défaut
  • default-tags : Etiquettes par défaut au format : 'IDENTIFIANT1':'TYPE1', 'IDENTIFIANT2':'TYPE2'. Où le type est 'CONTENT' ou 'PAGE'. Par exemple 'FOOTER_LINKS': 'PAGE', 'SPECIAL_PAGES': 'PAGE', 'A_LA_UNE': 'CONTENT'.
  • force : si "true" l'assistant de paramétrage sera automatiquement validé.

Attention
Il est de votre responsabilité si vous utilisez le mode macro (force=true) de vérifier que tous les droits sont corrects.
Par exemple, si vous forcez la création d'une actualité, il faut ajouter la vérification du droit de création d'actualité sinon, la macro choisira automatiquement un autre type de contenu autorisé.

Enfin, référencez votre bouton dans le fichier de ruban (instructions).

Exemple

Voici un exemple de bouton de création d'actualités étiquettées "Pages spéciales".

      <feature name="mymacro">
        <extensions>
            <!-- Ajouter une page -->
            <extension id="mymacro.addNews"
                       point="org.ametys.cms.workspace.ribbon.RibbonControlsManager" 
                       class="org.ametys.runtime.ui.impl.StaticContextualClientSideElement">
                <action class="org.ametys.ribbon.control.button.SitemapOrModifiablePageActionButton">
                    <param name="action">org.ametys.web.tool.page.Add.act</param>
                    <param name="label" i18n="false">Nouvelle actualité spéciale</param>
                    <param name="default-description" i18n="false">Ce bouton permet de créer une nouvelle page doté du gabarit 'Page', d'une actualité et étiquetté 'Pages spéciales'</param>
                    <param name="no-right-description" i18n="false">Vous n'avez pas le droit de créer une actualité ici</param>
                    <param name="no-selection-description" i18n="false">Sélectionnez une page pour pouvoir créer une actualité</param>
                    <param name="footer" i18n="false">Consultez l'aide pour plus d'information</param>
                    <param name="icon-small" file="true" plugin="news">img/news_16.png</param>
                    <param name="icon-medium" file="true" plugin="news">img/news_32.png</param>
                    <param name="icon-large" file="true" plugin="news">img/news_48.png</param>
                    
                    <param name="title">Ajouter une actualité spéciale...</param>
                    <param name="default-page-title">Nouvelle actualité spéciale</param>
                    <param name="default-pagetype">template</param>
                    <param name="default-template">page</param>
                    <param name="default-pagecontent-type">contenttype</param>
                    <param name="default-contenttype">org.ametys.web.default.Content.news</param>
                    <param name="default-tags">'SPECIAL_PAGES': 'PAGE'</param>
                    
                    <param name="force">true</param>
                </action>
                <scripts>
                    <file plugin="web">js/org/ametys/web/tool/page/Actions.i18n.js</file>
                    <file plugin="web">js/org/ametys/web/tool/page/AddPageWizzard-TagsCard.i18n.js</file>
                    <file plugin="web">js/org/ametys/web/tool/page/AddPageWizzard-PageTypeCard.i18n.js</file>
                    <file plugin="web">js/org/ametys/web/tool/page/AddPageWizzard-PageContentCard.i18n.js</file>
                    <file plugin="web">js/org/ametys/web/tool/page/AddPageWizzard-CreatePageCard.i18n.js</file>
                    <file plugin="web">js/org/ametys/web/tool/page/AddPageWizzard-Cards.i18n.js</file>
                    <file plugin="web">js/org/ametys/web/tool/page/AddPageWizzard.i18n.js</file>
                    <file plugin="web">js/org/ametys/ribbon/control/button/SitemapOrModifiablePageActionButton.js</file>
                    <file plugin="web">js/org/ametys/web/page/TemplatesMenu.i18n.js</file>   
                    <file plugin="web">js/org/ametys/web/page/LinkPage.i18n.js</file>        
                    <file plugin="web">js/org/ametys/web/zone/AddContentAction.i18n.js</file>
                    <file plugin="web">js/org/ametys/web/zone/AddServiceAction.i18n.js</file>
                </scripts>
                <css>
                    <file>css/pages/addpage.css</file>
                </css>
                <rights mode="AND">
                    <right>Web_Rights_Page_Create</right>
                    <right>Web_Rights_Page_Templates</right>
                    <right>Web_Rights_Page_AddContent</right>
                    <right>News_Right_News_Create</right>
                    <right>Web_Rights_Page_Tag</right>
                </rights>
            </extension>
        </extensions>     
     </feature>    

puis dans cms-ribbon-default.xml j'ajoute après chaque apparition de "<control id="org.ametys.web.userinterface.AddPage"/>" :

<control id="mymacro.addNews"/>

Toute modification du plugin.xml nécessite de redémarrer le cms