Voici les différentes étapes que nous allons accomplir :
filteringfolder
) qui étend le document queryfolderrecipe
filteringfolder
Nous allons créer un document qui étend le query folder afin de faire des dossiers filtrant :
php framework/bin/change.php create-document recipes filteringfolder == Create document == => Document recipes/filteringfolder initialized. You must now edit <path>/modules/recipes/persistentdocument/filteringfolder.xml and later call add-document
Le modèle de notre document se contente juste de d'étendre le queryfolder du module filter :
<?xml version="1.0" encoding="utf-8"?> <document xmlns="http://www.rbs.fr/schema/change-document/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.rbs.fr/schema/change-document/1.0 http://www.rbschange.fr/static/schema/change-document/3.5.xsd" model-version="3.5" icon="filteringfolder" extend="modules_filter/queryfolder"> </document>
On finalise l'ajout de notre dossier filtrant :
php framework/bin/change.php add-document recipes filteringfolder == Add document == Generating <projectPath>/modules/recipes/persistentdocument/filteringfolder.class.php Generating <projectPath>/modules/recipes/persistentdocument/import/FilteringfolderScriptDocumentElement.class.php Updating <projectPath>/modules/recipes/persistentdocument/import/recipes_binding.xml Parent: modules_filter/queryfolder Generating <projectPath>/modules/recipes/lib/services/FilteringfolderService.class.php Add filteringfolder in <projectPath>/modules/recipes/config/rights.xml Execute: compile-locales recipes... Execute: compile-tags ... Execute: compile-documents ... Execute: compile-db-schema ... Execute: compile-config ... => Document filteringfolder added in module recipes.
Nous allons faire notre filtre pour qu'il agisse sur les propriétés vegetarian
, peopleNumber
, preparationTime
, cookingTime
, ingredients
, cost
, difficulty
du document recipe
. Pour cela nous allons d'abord générer le code nécessaire pour le filtre à l'aide de la commande filter.add-filter
:
php framework/bin/change.php filter.add-filter == HELP == Filter.add-filter: adds a new filter Usage: change.php filter.add-filter <moduleName> <name> <modelName> [<commaSeparatedParamNames>]
Nous ajoutons donc à notre module recipes
le filtre RecipeProperty
qui s'appliquer uniquement au document recipe
et qui prendra en paramètre la variable restriction
:
php framework/bin/change.php filter.add-filter recipes RecipeProperty modules_recipes/recipe restriction == AddFilter == Filter class path: <projectPath>/modules/recipes/persistentdocument/filters/RecipePropertyFilter.php Filter locales in m.recipes.bo.documentfilters: recipepropertyfilter-label and recipepropertyfilter-text => Command successfully executed
Il suffit de déclarer les propriétés sur lesquelles on souhaite faire un filtre. RBS Change sera capable de présenter les contrôles de filtrage en fonction du typage de la propriété dans le modèle du document.
Nous modifions donc le code de la classe modules/recipes/persistentdocument/filters/RecipePropertyFilter.php
afin qu'elle fasse ce que l'on attend du filtre, ce qui nous donne :
<?php /** * recipes_RecipePropertyFilter * @package modules.recipes.persistentdocument.filters */ class recipes_RecipePropertyFilter extends f_persistentdocument_DocumentFilterImpl { public function __construct() { // Parameter "property". $property = f_persistentdocument_DocumentFilterRestrictionParameter::getNewInstance(); $property->setAllowedPropertyNames(array('modules_recipes/recipe.vegetarian', 'modules_recipes/recipe.peopleNumber', 'modules_recipes/recipe.preparationTime', 'modules_recipes/recipe.cookingTime', 'modules_recipes/recipe.ingredients', 'modules_recipes/recipe.cost', 'modules_recipes/recipe.difficulty')); $this->setParameter('restriction', $property); } /** * @return String */ public static function getDocumentModelName() { return 'modules_recipes/recipe'; } /** * Get the query to find documents matching this filter. * @return f_persistentdocument_criteria_Query */ public function getQuery() { $query = recipes_RecipeService::getInstance()->createQuery(); $query->add($this->getParameter('restriction')->getValueForQuery()); return $query; } }
Nous initialisons les éditeurs back office :
php framework/bin/change.php add-document-editor recipes filteringfolder == Add document editor == Add action createFilteringfolder in <projectPath>/modules/recipes/config/actions.xml Create <projectPath>/modules/recipes/forms/editor/filteringfolder directory Add model to <projectPath>/modules/recipes/config/perspective.xml Add filteringfolder as generic/rootfolder child Add createFilteringfolder to generic/rootfolder contextual menu Add filteringfolder as generic/folder child Add createFilteringfolder to generic/folder contextual menu Declare createFilteringfolder in perspective Execute: compile-locales recipes... Execute: compile-editors-config ... Execute: clear-webapp-cache ... => Document filteringfolder's backoffice interface generated.
Dans le fichier de recipes/config/perspective.xml
on retire les actions activate
, deactivated
, reactivate
. Par ailleurs, on ajoute dans la liste des drops du rootfolder notre document pour permettre d'ordonner les différents éléments, et on déclare également le document recipe
comme pouvant être sous notre document filteringfolder
ce qui donne :
... <model name="modules_generic/rootfolder"> ... <drops> ... <drop model="modules_recipes/filteringfolder" action="move"/> </drops> ... </model> ... <model name="modules_recipes/filteringfolder"> <contextactions> <contextaction name="edit"/> <contextaction name="delete"/> </contextactions> <children> <child model="modules_recipes/recipe" from="function" /> </children> </model> ... <action name="createFilteringfolder" single="true" permission="Insert_filteringfolder" icon="add"/> ...
Nous allons maintenant générer les formulaires de configuration du dossier filtrant :
php framework/bin/change.php generate-document-editor recipes/filteringfolder create == Generate document editor == Processing recipes/filteringfolder create... <projectPath>/modules/recipes/forms/editor/filteringfolder/create.xml generated => Document editor generated php framework/bin/change.php generate-document-editor recipes/filteringfolder properties == Generate document editor == Processing recipes/filteringfolder properties... <projectPath>/modules/recipes/forms/editor/filteringfolder/properties.xml generated => Document editor generated
On modifie ensuite les fichiers recipes/forms/editor/filteringfolder/*.xml en remplaçant :
<field name="query" />par
<field name="query" type="query" allow="recipes/recipe::getQuery"/>
Afin de prendre en compte les locales que nous avons ajouté pour le filtre, la modification des éditeurs etc… nous pouvons exécuter la commande suivante :
php framework/bin/change.php compile-all
Pour obtenir plus d'informations sur les filtres, veuillez consulter la page de la référence consacrée aux Filtres