This site has been archived. To learn more about our current products Ibexa Content, Ibexa Experience, Ibexa Commerce head over to the Ibexa Developer Portal

eZ Community » Learn » eZ Publish » An Introduction to Developing eZ...

An Introduction to Developing eZ Publish Extensions

Friday 10 December 2010 10:24:31 am

  • Currently 5 out of 5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

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.

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.

We will use the same functions as in the template fetch example: fetch('modul1', 'list' , ...) and 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).

// Which operators will load automatically? 
$eZTemplateOperatorArray = array();
// Operator: jacdata 
$eZTemplateOperatorArray[] = array( 'class' => 'JACOperator',
                                    'operator_names' => array( 'jac' ) ); 

Listing 18. extension/jacextension/autoloads/eztemplateautoload.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(); 

Listing 19. extension/jacextension/autoloads/jacoperator.php

And of course, do not forget to regenerate the autoloads :).

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).

<?php /* #?ini charset="utf-8"? 
# search for template operators in jaceextension 
*/ ?>

Listing 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) .

<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

We open the view by, for example, accessing the URL 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.

36 542 Users on board!

Tutorial menu


Printer Friendly version of the full article on one page with plain styles


Proudly Developed with from