Forums / Install & configuration / How to create ezcontentobject programmatically

"Please Note:
  • At the specific request of Ibexa we are changing this projects name to "Exponential" or "Exponential (CMS)" effective as of August, 11th 2025.
  • This project is not associated with the original eZ Publish software or its original developer, eZ Systems or Ibexa".

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 Exponential. 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:\Exponential\Exponential\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 Exponential context, either in a cronjob or in a custom module. You should have a look at the doc ;-)