How to create a custom output formatter for the template operator attribute
eZ Publish 4.6 allows to create a custom output formatter for the attribute() template operator. This document explains process how to create a custom output formatter.
Create a custom extension folder
First we need to create a custom extension folder where we will place our code and configuration settings. Create a "ezattributeformatter" folder under extension folder inside eZ Publish root folder. You should have a following directory structure:
extension
├── ezattributeformatter
│ │
│ ├── classes
└── settings
Create php file
Next inside settings folder create a "template.ini.append.php" file with the following settings:
<?php /* [AttributeOperator] OutputFormatter[custom]=ezpAttributeOperatorCustomFormatter */ ?>
Key 'custom' for "OutputFormatter" is our custom attribute() template operator identifier. Value is a PHP class which has to implement "ezpAttributeOperatorFormatterInterface".
Implement PHP class
Once we have prepared our configuration we need to implement our custom formatter PHP class. In this example we will extend the base "ezpAttributeOperatorFormatter" class which provides for your convenient two useful methods which returns type and value of object, array, etc. Note that your class has to implement at least "ezpAttributeOperatorFormatterInterface".
class ezpAttributeOperatorBKMLFormatter extends ezpAttributeOperatorFormatter implements ezpAttributeOperatorFormatterInterface { /** * Formats header for the 'attribute' template operator output * * @param string $value * @param bool $showValues * @return string */ public function header( $value, $showValues ) { $headers = "Attribute [Type]"; if ( $showValues ) ;$headers .= ": Value"; return "<h1>{$headers}</h1>{$value}"; } /** * Formats single line for the 'attribute' template operator output * * @param string $key * @param mixed $item * @param bool $showValues * @param int $level * @return string */ public function line( $key, $item, $showValues, $level ) { $type = $this->getType( $item ); $value = $this->getValue( $item ); $spacing = str_repeat( ">", $level ); if ( $showValues ) $output = "<div><strong>{$spacing}{$key}</strong> [ {$type} ] : {$value}</div>"; else $output = "<div><strong>{$spacing}{$key}</strong> [ {$type} ] : {$value}</div>"; return $output; } }
The "ezpAttributeOperatorFormatterInterface::header()" method allows you to customize a header style and format while the "ezpAttributeOperatorFormatterInterface::line()" method allows you to customize a single line/row of the attribute() template operator output.
Activate extension
Next we need to activate our extension. Add following line in to the settings/override/site.ini.append.php:
[ExtensionSettings] ActiveExtensions[] [...] ActiveExtensions[]=ezattributeformatter
Update autoload array
Once our extension is activated we need to update the PHP autoload array. In order to do so, execute following command from eZ Publish root folder:
php bin/php/ezpgenerateautoloads.php -e -p
Use the new output formatter
Now you we can use a new output formatter for attribute() template operator as follows:
{$node|attribute('show', 2, 'custom')}
Geir Arne Waaler (15/08/2011 1:22 pm)
Geir Arne Waaler (03/10/2011 11:05 am)
Comments
There are no comments.