Forums / Discussions / An Introduction to Developing eZ Publish Extensions

Wednesday 29 July 2009 2:33:09 am - 11 replies

» Read full tutorial

Introduction

Most Content Management System requirements can be fulfilled by eZ Publish without any custom PHP coding. But sooner or later experienced eZ Publish implementers get to the point where a project needs some special functionality and it becomes necessary to develop extensions.

(This tutorial was initially published on 21/01/2008, and refreshed to match the 4.x series on 10/12/2010)

Author Message

Dan Parchman

Thursday 31 December 2009 12:11:29 pm

The code on page 8 which reads:
-----------------------------------------------

class JACExtensionData extends eZPersistentObject
{
/*!
Konstruktor
*/
function JACExtensionData( $row )
{
$this->eZPersistentObject( $row );
}

/*!
Definition of the data object structure /of the structure of the database table
*/
function definition()
---------------------------------------------

In eZ Publish 4.x should be:
-------------------------------------------

class JACExtensionData extends eZPersistentObject
{
/*!
Konstruktor
*/
function JACExtensionData( $row )
{
$this->eZPersistentObject( $row );
}

/*!
Definition of the data object structure /of the structure of the database table
*/
static function definition()
------------------------------------------------

Then it works!

Dan Parchman

Thursday 31 December 2009 1:41:35 pm

After adding the new function_definition.php file (page 9 - Template Fetch Functions) update the extension auto-load array by clicking the "Regenerate autoload arrays for extensions" button in the Admin panel Settings -> Extensions.

Sendo Lat

Thursday 25 February 2010 11:42:16 pm

Thanks for this information.

BTW, if you have interest in these topics,
loan problems, how to lose weight fast?
which is the best travel agency? and baby care problems?

Welcome to my blog.

Ivan Švogor

Wednesday 29 September 2010 9:45:14 am

After clearing all the cache I still get the message:

No template could be loaded for "modul1/list.tpl" using resource "design"

please help :)

Gaetano Giunta

Friday 22 October 2010 4:15:37 am

For an extension that adds one or more tables to the db, it is important to create a share/db_schema.dba file where these new tables are described.

This way when the admin goes to the "Setup/Upgrade Check/Check db consistency" page

- he will note get a suggestion to drop the table

- he will get a suggestion with the sql command to create the table if the table does not exist

This is true since eZP 4.3

The format for db_schema.dba is propietary to eZ. You can find examples in ezfind, ezflow and other extensions from eZ Systems

To generate that file you can use the ezsqldumpschema.php script. Take care: right now it will create a file with the definition of the whole db, so you should either use it in a db where you only have your new table(s) or clean up by hand the generated .dba file

Principal Consultant International Business
Member of the Community Project Board

Leo Mik

Tuesday 26 October 2010 4:16:27 am

Hey Gaetano, thanks for help!

André R.

Wednesday 15 December 2010 12:26:48 pm

To really be a mirror for best practice, then code examples should add phpdoc and use php5 features like __construct and so on, eg:

/**
 * JACExtensionData does....
 */
class JACExtensionData extends eZPersistentObject
{
   /**
    * Constructor
    *
    * @param array $row Hash of attributes for new <span class="Apple-style-span" style="font-size: 13px; " mce_fixed="1">JACExtensionData</span> <span class="Apple-style-span" style="font-size: 13px; " mce_fixed="1"><span>object</span></span>
    */ 
    function __construct( $row )
    {
        parent::__construct( $row );
    }

   /**
    * Definition of the data object structure /of the structure of the database table
    *
    * @return array Hashed array with table definition of this p<span class="Apple-style-span" style="font-size: 13px; " mce_fixed="1">ersistent object</span>
    */ 
    static function definition()

Additionally, member variables should probably be protected/private to make sure attribute() function is used outside the class.

eZ Online Editor 5: http://projects.ez.no/ezoe || eZJSCore (Ajax): http://projects.ez.no/ezjscore || eZ Publish EE http://ez.no/eZPublish/eZ-Publish-Enterprise-Subscription
@: http://twitter.com/andrerom

Jérôme Vieilledent

Wednesday 22 December 2010 10:14:40 pm

Thanks André. I just fixed this.

Mauricio Sánchez

Friday 11 February 2011 12:29:32 pm

Hi Guys!

Is there a way to create a custom locale file (eng-US@custom.ini) inside an extension?

Any help will be appreciated!

Eirik Alfstad Johansen

Friday 01 July 2011 1:38:57 am

I thought best practice was to put operators in a separate /operators folder. Is that not the case anymore? Or am I simply mistaken?

Sincerely,

Eirik Alfstad Johansen
http://www.netmaking.no/

Nicolas Pastorino

Friday 01 July 2011 8:41:36 am

"

I thought best practice was to put operators in a separate /operators folder. Is that not the case anymore? Or am I simply mistaken?

"

Template operators ? Placing them in the 'autoloads' directory, at the root of the given extension directory, is the usual practice.

Cheers,

--
Nicolas Pastorino
Director Community - eZ
Member of the Community Project Board

eZ Publish Community on twitter: http://twitter.com/ezcommunity

t : http://twitter.com/jeanvoye
G+ : http://plus.tl/jeanvoye

You must be logged in to post messages in this topic!