[Solved] Modify/Update objects from PHP

Author Message

Damien MARTIN

Wednesday 20 January 2010 2:14:41 am

Hi there,

I would like to know how can we do, to modify existing objects directly in PHP ?

To create Nodes It's really simple using eZContentFunctions::createAndPublishObject (thanks to Damien Pobel for the tip : http://pwet.fr/blog/comment_creer_des_objets_ez_publish_en_php )

Is there a simple way to update nodes like this ?

Otherwise, does someone have a method to do that ?

I need to update selected fields in my class and to store my modifications.

It is for a cronjob.

Thanks,

Damien

Gaetano Giunta

Wednesday 20 January 2010 3:01:04 am

take a look at data import extension - it has very clean code to do that

Principal Consultant International Business
Member of the Community Project Board

Damien MARTIN

Wednesday 20 January 2010 5:51:29 am

Thank you Gaetano,

Thanks to ImportOperator::save_eZ_attribute, I discovered what I was waited for :

$contentObjectAttribute->fromString( $value );
$contentObjectAttribute->store();

Where $contentObjectAttribute is retrieved from :

$object->DataMap();

after a simple :

$object = eZContentObject::fetchByNodeID($node_id);

The values are correctly updated !

Thank you again.

Laurent Dorier

Monday 25 January 2010 12:52:46 am

Hello,

I'm trying to do the same (not for a cronjob but for an eZ extension) but unsuccesful...

$object= eZContentObject::fetchByNodeID($node_id);
$dataMap = $object->dataMap();
$contentObjectAttribute = ImportOperator::save_eZ_attribute($dataMap['MyObject_relation_list']);
$value = '206-207-213';
$contentObjectAttribute->fromString( $value );
$contentObjectAttribute->store();

I get:

Non-static method ImportOperator::save_eZ_attribute() should not be called statically

Someone can help ?

Damien MARTIN

Monday 25 January 2010 1:12:44 am

Hi Laurent,

I have not used directly the classes from the extensions but I have extract it to my own class.

save_eZ_attribute is not static so, you should call it from an ImportOperator instance :

function save_eZ_attribute( $contentObjectAttribute )

Otherwise, this my version of the method :

/**
 * Sauve un attribut eZ d'un objet avec une nouvelle valeur.
 * Cette méthode à l'avantage de gérer complétement les ObjectRelations et les RelationList.
 * \arg $contentObjectAttribute Pointeur sur un attribut d'un objet
 * \arg $value La valeur au format TXT
 * \author Mugo Web Copyright (C) 2008 => extension data_import (http://projects.ez.no/data_import)
 */
function save_eZ_attribute( $contentObjectAttribute, $value )
{
    
    switch( $contentObjectAttribute->attribute( 'data_type_string' ) )
    {
        case 'ezobjectrelation':
        {
            // Remove any exisiting value first from ezobjectrelation
            /*
            eZContentObject::removeContentObjectRelation( $contentObjectAttribute->attribute('data_int'),
                                                          $this->current_eZ_object->attribute('current_version'),
                                                          $this->current_eZ_object->attribute('id'),
                                                          $contentObjectAttribute->attribute('contentclassattribute_id')
                                                          );
            */
            $contentObjectAttribute->setAttribute( 'data_int', 0 );
            $contentObjectAttribute->store();
            
        }
        break;
        
        case 'ezobjectrelationlist':
        {
            // Remove any exisiting value first from ezobjectrelationlist
            
            $content = $contentObjectAttribute->content();
            $relationList =& $content['relation_list'];
            $newRelationList = array();
            for ( $i = 0; $i < count( $relationList ); ++$i )
            {
                $relationItem = $relationList[$i];
                eZObjectRelationListType::removeRelationObject( $contentObjectAttribute, $relationItem );
            }
            $content['relation_list'] =& $newRelationList;
            $contentObjectAttribute->setContent( $content );
            $contentObjectAttribute->store();
            
        }
        break;
    }
    
    // fromString returns false - even when it is successfull
    // create a bug report for that
    $contentObjectAttribute->fromString( $value );
    $contentObjectAttribute->store();
    
}

I hope this will help you.

Damien

Laurent Dorier

Monday 25 January 2010 1:54:38 am

Thanks a lot Damien,

working like a charm. :)

But finally... I do it without this extension using the eZContentObject class...
Thanks anyway for your very fast answer.

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

eZ debug

Timing: Jan 30 2025 00:55:55
Script start
Timing: Jan 30 2025 00:55:55
Module start 'layout'
Timing: Jan 30 2025 00:55:55
Module start 'content'
Timing: Jan 30 2025 00:55:55
Module end 'content'
Timing: Jan 30 2025 00:55:55
Script end

Main resources:

Total runtime0.0137 sec
Peak memory usage2,048.0000 KB
Database Queries3

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0038 588.2344151.2109
Module start 'layout' 0.00380.0022 739.445336.6484
Module start 'content' 0.00600.0064 776.093898.3750
Module end 'content' 0.01250.0012 874.468837.9922
Script end 0.0136  912.4609 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.001813.5248140.0001
Check MTime0.00096.3523140.0001
Mysql Total
Database connection0.00074.984110.0007
Mysqli_queries0.002215.948830.0007
Looping result0.00000.050610.0000
Template Total0.00096.210.0009
Template load0.00074.823610.0007
Template processing0.00021.383910.0002
Override
Cache load0.00043.242510.0004
General
dbfile0.002719.952280.0003
String conversion0.00000.029740.0000
Note: percentages do not add up to 100% because some accumulators overlap

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1print_pagelayout.tpl<No override>extension/community/design/community/templates/print_pagelayout.tplEdit templateOverride template
 Number of times templates used: 1
 Number of unique templates used: 1

Time used to render debug report: 0.0001 secs