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
|
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 = "[email protected]";
$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!!!
|