29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don




Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

eZ Publish : An Introduction to Developing eZ Publish Extensions

Table des matières

  1. Introduction au développement d'extensions eZ Publish
  2. What are eZ Publish extensions ? -- Qu'est-ce que les extensions eZ Publish ?
  3. Creating a new extension -- Créer une nouvelle extension
  4. Configuring and enabling the extension -- Configurer et activer l'extension
  5. Activating the extension -- Activer l'extension
  6. Template system -- Le système de templates
  7. Creating a view -- Créer une vue
  8. Accessing the database -- Accéder à la base de données
  9. Template fetch function -- Fonction de recherche pour template
  10. Template operators -- Les opérateurs de templates
  11. INI file -- Le fichier INI
  12. 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