Table des matières
- Introduction au développement d'extensions eZ Publish
- What are eZ Publish extensions ? -- Qu'est-ce que les extensions eZ Publish ?
- Creating a new extension -- Créer une nouvelle extension
- Configuring and enabling the extension -- Configurer et activer l'extension
- Activating the extension -- Activer l'extension
- Template system -- Le système de templates
- Creating a view -- Créer une vue
- Accessing the database -- Accéder à la base de données
- Template fetch function -- Fonction de recherche pour template
- Template operators -- Les opérateurs de templates
- INI file -- Le fichier INI
- Conclusion
Template operators -- Les opérateurs de templates
Date de publication: le samedi 20 août 2011 à 09h24
Dernière modification: par Pascal BOYER le samedi 3 septembre 2011 à 21h54
Another way to access functions in your extensions is to use template operators. While eZ Publish contains many template operators, we will define a new template operator called "result_type" with a $result_type parameter.
Un autre moyen d'accéder aux fonctions de vos extensions consiste à recourir aux opérateurs de template. Puisqu'eZ Publish contient de nombreux opérateurs de template, nous en définirons un nouveau, que l'on nommera result_type, associé au paramètre $result_type.
We will use the parameter to control the amount of data that is shown in our database table. The template command {jac('list')} shows an array of data and {jac('count')} shows the amount of data.
Nous utiliserons le paramètre pour contrôler la quantité de données affichée dans notre table de la base de données. La commande de template {jac('list')} affiche un tableau de données et {jac('count')} affiche la quantité de données.
We will use the same functions as in the template fetch example: fetch('modul1', 'list' , ...) and fetch( 'modul1', 'count', ... )
Nous utiliserons les mêmes fonctions que celles du précédent exemple : fetch('modul1', 'list' , ...) et fetch( 'modul1', 'count', ... )
The definition of the existing template operators in the jacextension is done in the file extension/jacextension/autoloads/eztemplateautoload.php (see Listing 18). The template operator’s actions are defined in a custom PHP class (in our case, in JACOperator of the file extension/jacextension/autoloads/jacoperator.php) (see Listing 19).
La définition des opérateurs de template existants de l'extension jacextension est située dans le fichier extension/jacextension/autoloads/eztemplateautoload.php (voir Script 18). Les actions des opérateurs de template sont définies dans une classe PHP personnalisée (dans notre exemple, dans JACOperateur du fichier extension/jacextension/autoloads/jacoperator.php) (voir Script 19).
<?php // Which operators will load automatically? $eZTemplateOperatorArray = array(); // Operator: jacdata $eZTemplateOperatorArray[] = array( 'class' => 'JACOperator', 'operator_names' => array( 'jac' ) ); ?>
Script 18 : extension/jacextension/autoloads/eztemplateautoload.php
<?php /** * Operator: jac('list') and jac('count') <br> * Count: {jac('count')} <br> * Liste: {jac('list')|attribute(show)} */ class JACOperator { public $Operators; public function __construct( $name = 'jac' ) { $this->Operators = array( $name ); } /** * Returns the template operators. * @return array */ function operatorList() { return $this->Operators; } /** * Returns true to tell the template engine that the parameter list * exists per operator type. */ public function namedParameterPerOperator() { return true; } /** * @see eZTemplateOperator::namedParameterList **/ public function namedParameterList() { return array( 'jac' => array( 'result_type' => array( 'type' => 'string', 'required' => true, 'default' => 'list' )) ); } /** * Depending of the parameters that have been transmitted, fetch objects JACExtensionData * {jac('list)} or count data {jac('count')} */ public function modify( $tpl, $operatorName, $operatorParameters, $rootNamespace, $currentNamespace, &$operatorValue, $namedParameters ) { $result_type = $namedParameters['result_type']; if( $result_type == 'list') $operatorValue = JACExtensionData::fetchList(true); else if( $result_type == 'count') $operatorValue = JACExtensionData::getListCount(); } } ?>
Script 19 : extension/jacextension/autoloads/jacoperator.php
And of course, do not forget to regenerate the autoloads :).
N'oubliez pas, bien sûr, de régénérer les autochargements :)
To tell eZ Publish that jacextension contains template operators, we have to define it in the eZ Publish configuration file extension/jacextension/settings/site.ini.append.php with ExtensionAutoloadPath[]=jacextension (see Listing 20).
Pour indiquer à eZ Publish que jacextension contient des opérateurs de template, nous devons les définir dans le fichier de configuration d'eZ Publish extension/jacextension/settings/site.ini.append.php par le biais de la syntaxe ExtensionAutoloadPath[]=jacextension (voir Script 20).
<?php /* #?ini charset="utf-8"? ... # search for template operators in jaceextension [TemplateSettings] ExtensionAutoloadPath[]=jacextension */ ?>
Script 20 : extension/jacextension/settings/site.ini.append.php
To check our template fetch functions fetch('modul1', 'list', hash('as_object', true() ) ) and fetch( 'modul1', 'count', hash() ) of the template operator jac('list') or jac('count') we extend the template list.tpl of the view list (see Listing 21) .
Pour contrôler nos fonctions de recherche fetch('modul1', 'list', hash('as_object', true() ) ) et fetch( 'modul1', 'count', hash() ) de l'opérateur de template jac('list') ou jac('count') nous étendons le template list.tpl de la vue list (voir Script 21).
<h2>Template Operator: jac('count') and jac('list')</h2> Count: {jac( 'count' )} <br /> List: {jac( 'list' )|attribute( 'show' )} <hr /> <h2>Template Fetch Functions: fetch( 'modul1','count', hash() )<br /><br /> fetch( 'modul1','list', hash( 'as_object', true() ) )</h2> Count: {fetch( 'modul1', 'count', hash() )} <br> List: {fetch( 'modul1', 'list', hash( 'as_object', true() ) )|attribute( 'show' )}
Listing 21. Testing the custom Template Fetch functions and the template operator - extension/jacextension/design/standard/templates/modul1/list.tpl
Script 21 : Test des fonctions de recherche personnalisées et de l'opérateur de template
extension/jacextension/design/standard/templates/modul1/list.tpl
We open the view by, for example, accessing the URL http://localhost/ez/index.php/plain_site/modul1/list/tableblue/1234
Nous ouvrons la vue avec, par exemple, l'URI
http://localhost/ez/index.php/plain_site/modul1/list/tableblue/1234
Apart from the example array $data_array, it must show the data of the database table jacextension_data twice, once with the template operators and another time with the template fetch functions. This shows that there are different options for accessing the same functions in your extension in a template.
Outre le tableau d'exemple $data_array, l'URIl doit afficher deux fois les données de la table jacextension_data: une première fois avec les opérateurs de template et une seconde fois avec les fonctions de recherche (fetch). Ceci met en évidence qu'il existe différentes options pour accéder aux mêmes fonctions de votre extension dans un template.
Commentaires














