Adding attribute (with function) to existing class

Adding attribute (with function) to existing class

Monday 18 October 2010 2:41:59 am - 4 replies

Author Message

Heath

Monday 18 October 2010 4:23:40 am

Hello Antoine,

Welcome to the eZ Publish Community!

I do not think what you describe is very possible or realistic.

I think you would get better results creating a custom datatype.

http://share.ez.no/learn/ez-publish/creating-datatypes-in-ez-publish-4/

Cheers,

Heath

Brookins Consulting | http://brookinsconsulting.com/
Certified | http://auth.ez.no/certification/verify/380350
Solutions | http://projects.ez.no/users/community/brookins_consulting
eZpedia community documentation project | http://ezpedia.org

Antoine Dubois

Monday 18 October 2010 6:11:01 am

Hi Heath,

Thanks for your answer even if it it tells me I'm in the wrong direction... ;-)

I will try to use the datatypes but I don't think it will fit as what I ask is a derived attribute and so depends on other attributes of the class... It's class-level and not attribute-level like datatype...

I know it's possible to code custom classes but I don't know if those classes can be used as Content Classes (with all the features it provides)...

Do you think of another way to realize this?

Thanks again

Antoine

Heath

Monday 18 October 2010 7:28:34 am

Well Antoine,

Datatypes can be affected by class level properties. It just depends on how the datatype is programmed. Take the ezselection datatype which stores the available options for the selection list at a class level yet presents these options at an content object attribute level. http://pubsvn.ez.no/doxygen/4.4/html/classeZSelectionType.html

I do not see another way to realize this outside a custom datatype.

Cheers,

Heath

Brookins Consulting | http://brookinsconsulting.com/
Certified | http://auth.ez.no/certification/verify/380350
Solutions | http://projects.ez.no/users/community/brookins_consulting
eZpedia community documentation project | http://ezpedia.org

Antoine Dubois

Monday 18 October 2010 10:56:04 am

Hi Heath,

That's a lead I'm following...

For now I'm trying to create a datatype (only usefull on my class) that define only the method "objectAttributeContent" that receive the attribute object as parameter. From that I can get infos on it. But it fits only the class that contains this kind of datatype and that could be a problem in the future

class  MyType extends eZDataType{
      /**
      * @param eZContentObjectAttribute $contentObjectAttribute
      */
      public function objectAttributeContent($contentObjectAttribute){
          
          /**
          * @var eZContentObject
          */
          $object = $contentObjectAttribute->object();
          
          if(!$object->ClassIdentifier == 'myclass'){
              return;
          }
          
          return setValueWithbusinessLogic($object);
      }
      
      function setValueWithbusinessLogic($object){
          //Mock of what could be done
          $value = 100 + $object->attribute('otherAttribute');
          //Add DB, ezIni,... accesses
          return $value;
      }
  }

Am I right in the method?

It's something I could need to do this frequently. Could we think to extend (or hack) the actual ezContentObject class to implement a nice way to read INI files in combinaison with a generix datatype or extension method?

In fact, a nice way to create custom derived attribute to avoid tight coupling between the class definition and the attribute!

Anyway, thanks for the help ;-)

Cheers

Antoine

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

Powered by eZ Publish™ CMS Open Source Web Content Management. Copyright © 1999-2014 eZ Systems AS (except where otherwise noted). All rights reserved.