How to create ezcontentobject programmatically

Author Message

sergey podlesnyi

Thursday 27 February 2003 3:13:04 am

Imagine I have done "custom class" tutorial and have created a class "Car". How do I create objects of this class using PHP? I need to import data from old database into ez publish. Spent a week digging in PHP code but no result.

Could anybody post a sample code - how to create an instance of custom class, populate attributes and store into persistent storage.

Thank you!

Ulitsa Tal Arik

Wednesday 23 November 2005 10:39:29 pm

Hi, Sergey, do find solution how create objects using PHP? If you find it plz can you send it me :) koban@inbox.ru (syudya po date dumayu uzhe nashel... :) )

Bruce Morrison

Wednesday 23 November 2005 11:12:49 pm

Hi Guys

Have a look at http://ez.no/community/contribs/import_export/import_xml_data
If this doesn't help the are a number of contribs dealig with import (and export) at http://ez.no/community/contribs/import_export

HTH

Cheers
Bruce

My Blog: http://www.stuffandcontent.com/
Follow me on twitter: http://twitter.com/brucemorrison
Consolidated eZ Publish Feed : http://friendfeed.com/rooms/ez-publish

Ulitsa Tal Arik

Thursday 24 November 2005 1:33:02 am

Thanks, Bruce, but this import/export modules is very complicated for me (i just beginner), so i'll be very happy if you'll post just sample how to create content class with one attribute :)

<b>Thank you!</b>

Alexandre Abric

Thursday 24 November 2005 1:55:16 am

Hi,

Here is some sample code to create a user. I don't remember where I took this from ...

<?php 

include_once( 'kernel/classes/ezcontentobject.php' ); 
include_once( 'lib/ezlocale/classes/ezdatetime.php' ); 
  
// Testuser definition 
$firstName = "Hugo"; 
$lastName = "Heise"; 
$email = "hugo.heise@hoppecke.com"; 
$login= "h-waldmann"; 



echo "creating Account: ".$login." - ".$firstName." ".$lastName." / ".$email."<br>"; 

$userClassID = 4; 
$class =& eZContentClass::fetch( $userClassID ); 

$creatorID = 426; // 426 = N.Leutner 
$groupNodeID = 140; 

$contentObject =& $class->instantiate( $creatorID, 1 ); 
  
// Insert into Table eznode_assignment 
$nodeAssignment =& eZNodeAssignment::create( array( 
                                                 'contentobject_id' => $contentObject->attribute( 'id' ), 
                                                 'contentobject_version' => $contentObject->attribute( 'current_version' ),

                                                 'parent_node' => $groupNodeID, 
                                                 'sort_field' => 9, 
                                                 'is_main' => 1 
                                                 ) 
                                             ); 
$nodeAssignment->store(); 
  

// Insert into Table ezcontentobject_version  
$version =& $contentObject->version( 1 ); 
$version->setAttribute( 'modified', eZDateTime::currentTimeStamp() ); 
$version->setAttribute( 'status', EZ_VERSION_STATUS_DRAFT ); 
$version->store(); 



// Inserts into Table ezcontentobject_attribute 

    // Attribute1 = parent attribute 
    $contentObjectID = $contentObject->attribute( 'id' ); 
    $contentObjectAttributes =& $version->contentObjectAttributes(); 

    // Attribute2 = firstname 
    $contentObjectAttributes[0]->setAttribute( 'data_text', $firstName ); 
    $contentObjectAttributes[0]->store(); 

    // Attribute3 = lastname 
    $contentObjectAttributes[1]->setAttribute( 'data_text', $lastName ); 
    $contentObjectAttributes[1]->store(); 



// Inserts into Table ezuser 

    // Create user by parent attribute ID 
    $user =& eZUser::create( $contentObjectID ); 

    // Create password with 8 Charakters 
    $password = eZUser::createPassword( 8, $firstName . $lastName . $email ); 
    echo "Password lautet: ".$password."<br>"; 
    
    // Create passwordhash 
    $hash = $user->createHash( $login, $password, eZUser::site(), eZUser::hashType() ); 

    // Set attributes 
    $user->setAttribute('login', $login ); 
    $user->setAttribute('email', $email); 
    $user->setAttribute('password_hash', $hash ); 
    $user->setAttribute('password_hash_type', 2 ); 
    $user->store(); 

// Publish user 
// This function returns the error: Cannot execute operation 'publish' in module 'content', 
// no valid dataeZOperationHandler::execute

include_once( 'lib/ezutils/classes/ezoperationhandler.php' ); 
$operationResult = eZOperationHandler::execute( 'content', 'publish', array( 'object_id' => $contentObjectID, 
                                                                             'version' => 1 ) ); 

?> 

Alexandre Abric

Thursday 24 November 2005 1:57:38 am

And another sample code to create a folder (the method to populate the attributes is better in the previous code)

<?

function createFolderObject($user, $sectionID, $userNodeID=2, $folderTitle="No title")
{
  $folderClassID=1;
  
  $class =& eZContentClass::fetch( $folderClassID );
  $folderContentObject =& $class->instantiate( $user->id(), $sectionID );
  
  // Create a node for the object in the tree.
  $nodeAssignment =& eZNodeAssignment::create( array(
                         'contentobject_id' => $folderContentObject->attribute( 'id' ),
                         'contentobject_version' => 1,
                         'parent_node' => $userNodeID,
                         'sort_field' => 2, //Published
                         'sort_order' => 1, //Descending
                         'is_main' => 1));
  $nodeAssignment->store();
    
  // Set a status for the content object version
  $folderContentObjectVersion =& $folderContentObject->version($folderContentObject->attribute( 'current_version' ) );
  $folderContentObjectVersion->setAttribute( 'status', EZ_VERSION_STATUS_DRAFT);
  $folderContentObjectVersion->store();

  // Set the title of the folder.
  $folderContentObjectAttributes =& $folderContentObjectVersion->contentObjectAttributes();
  foreach ($folderContentObjectAttributes as $folderAttribute)
  {
    // Each attribute has an attribute called 'identifier' that identifies it.    

    if ($folderAttribute->attribute("contentclass_attribute_identifier") == "title")
    {
      $folderAttribute->setAttribute("data_text",$folderTitle);
      $folderAttribute->store();
    }
  }
      
  // Now publish the object.
  $operationResult = eZOperationHandler::execute( 'content', 'publish',
                          array( 'object_id' => $folderContentObject->attribute( 'id' ),
                                 'version' => $folderContentObject->attribute('current_version' ) ) );
  
  return;
}

?>

Ulitsa Tal Arik

Thursday 24 November 2005 2:14:55 am

I have some code before... but i have one error too:
Fatal error: Call to a member function on a non-object in C:\ezpublish\ezpublish\bin\php\test.php on line 22

<b>line 22:</b> <i>$contentObject =& $class->instantiate( $creatorID, 1 );</i>

what it's mean?

Ulitsa Tal Arik

Thursday 24 November 2005 4:22:07 am

Sorry Guys!!!

the bug was in another place->
when i call:$class =& eZContentClass::fetch( $contentClassID );

fetch does not return object...
this bug was closed and work in ez here
( http://ez.no/community/bugs/ezcontentclass_fetch_does_not_return_an_object_for_certain_classes )

the problem was db connection.
EVERY THING OK! I was trying execute this php-file from shell and nothing work... now i try execute it like cron and everything is working perfectly!!!

Alexandre Abric

Thursday 24 November 2005 4:36:08 am

You must use this code in eZ Publish context, either in a cronjob or in a custom module. You should have a look at the doc ;-)

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