Snippets for eZ publish 3: Copying objects
Compatibility
For all eZ publish versions prior to 3.8, replace
$assignment->purge();
with
$assignment->remove();
Code sample
The following code copies an existing object and gives it one location in the node tree. It was taken from the copy view of the content module (kernel/content/copy.php).
The used variables are:
- $object: instance of eZContentObject you want to copy
- $newParentNodeID: node id of the parent for the new object
- $allVersions: true if you want to copy all versions of the object to the new object, false if you only want to copy the currently published version
include_once( "lib/ezdb/classes/ezdb.php" ); $db =& eZDB::instance(); $db->begin(); $newObject =& $object->copy( $allVersions ); $curVersion =& $newObject->attribute( 'current_version' ); $curVersionObject =& $newObject->attribute( 'current' ); $newObjAssignments =& $curVersionObject->attribute( 'node_assignments' ); unset( $curVersionObject ); // remove old node assignments foreach( $newObjAssignments as $assignment ) { $assignment->purge(); } // and create a new one $nodeAssignment = eZNodeAssignment::create( array( 'contentobject_id' => $newObject->attribute( 'id' ), 'contentobject_version' => $curVersion, 'parent_node' => $newParentNodeID, 'is_main' => 1 ) ); $nodeAssignment->store(); // publish the newly created object include_once( 'lib/ezutils/classes/ezoperationhandler.php' ); eZOperationHandler::execute( 'content', 'publish', array( 'object_id' => $newObject->attribute( 'id' ), 'version' => $curVersion ) ); // Update "is_invisible" attribute for the newly created node. $newNode =& $newObject->attribute( 'main_node' ); eZContentObjectTreeNode::updateNodeVisibility( $newNode, $newParentNode ); $db->commit();