...
Now follow the instructions. This will create a bundle eZ/Publish/Bundle/CookBookBundle in the src directory of the installation root.
...
add the following class file CookbookCommand.php in the directory Command
...
This snippet creates a content type group for a given identifier (Full code here).
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
$contentTypeService = $repository->getContentTypeService(); try { // instanciate a create struct $contentTypeGroupCreateStruct = $this->contentTypeService->newContentTypeGroupCreateStruct($groupIdentifier); // call service method $contentTypeGroup = $this->contentTypeService->createContentTypeGroup( $contentTypeGroupCreateStruct ); // print out the group print_r($contentTypeGroup); } catch( \eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e ) { // react on permission denied $output->writeln($e->getMessage()); } catch( \eZ\Publish\API\Repository\Exceptions\ForbiddenException $e ) { // react on identifier already exists $output->writeln($e->getMessage()); } |
...
With this snipped a content type with two fields of type 'ezstring' is created. (Full code here).
Code Block | ||||
---|---|---|---|---|
| ||||
// get content type service from repository $contentTypeService = $repository->getContentTypeService(); // load the content type group try { $contentTypeGroup = $contentTypeService->loadContentTypeGroupByIdentifier($groupIdentifier); } catch(\eZ\Publish\API\Repository\Exceptions\NotFoundException $e) { $output->writeln("content type group with identifier $groupIdentifier not found"); return; } // instanciate a ContentTypeCreateStruct with the given content type identifier $contentTypeCreateStruct = $contentTypeService->newContentTypeCreateStruct($contentTypeIdentifier ); // the main language code for names and description $contentTypeCreateStruct->mainLanguageCode = 'eng-GB'; // the name schema for generating the content name by using the title attribute $contentTypeCreateStruct->nameSchema = '<title>'; // set names for the content type $contentTypeCreateStruct->names = array( 'eng-GB' => $contentTypeIdentifier . 'eng-GB', 'ger-DE' => $contentTypeIdentifier . 'ger-DE', ); // set description for the content type $contentTypeCreateStruct->descriptions = array( 'eng-GB' => 'Description for ' . $contentTypeIdentifier . 'eng-GB', 'ger-DE' => 'Description for ' . $contentTypeIdentifier . 'ger-DE', ); /********************** add fields ***************************************/ // add a title field $titleFieldDefinitionCreateStruct = $contentTypeService->newFieldDefinitionCreateStruct('title', 'ezstring'); // set names and description for display $titleFieldDefinitionCreateStruct->names = array('eng-GB' => 'Title','ger-DE' => 'Titel',); $titleFieldDefinitionCreateStruct->descriptions = array('eng-GB' => 'The Title','ger-DE' => 'Der Titel'); // set an group for the field $titleFieldDefinitionCreateStruct->fieldGroup = 'content'; // set position inside the content type $titleFieldDefinitionCreateStruct->position = 1; // enable translation $titleFieldDefinitionCreateStruct->isTranslatable = true; // require this field to set on content creation $titleFieldDefinitionCreateStruct->isRequired = true; // enabled to find field via content search $titleFieldDefinitionCreateStruct->isSearchable = true; // add field definition to content create struct $contentTypeCreateStruct->addFieldDefinition( $titleFieldDefinitionCreateStruct ); // add a body field $bodyFieldDefinitionCreateStruct = $contentTypeService->newFieldDefinitionCreateStruct('body', 'ezstring'); // set names and description for display $bodyFieldDefinitionCreateStruct->names = array('eng-GB' => 'Body','ger-DE' => 'Text'); $bodyFieldDefinitionCreateStruct->descriptions = array('eng-GB' => 'Description for Body','ger-DE' => 'Beschreibung Text'); $bodyFieldDefinitionCreateStruct->fieldGroup = 'content'; $bodyFieldDefinitionCreateStruct->position = 2; $bodyFieldDefinitionCreateStruct->isTranslatable = true; $bodyFieldDefinitionCreateStruct->isRequired = true; $bodyFieldDefinitionCreateStruct->isSearchable = true; // add field definition to content create struct $contentTypeCreateStruct->addFieldDefinition( $bodyFieldDefinitionCreateStruct ); // set the content type group for the content type $contentTypeGroups = array($contentTypeGroup); // start a transaction $repository->beginTransaction(); try { // create the content type - the returned content type is in status DRAFT $contentTypeDraft = $contentTypeService->createContentType($contentTypeCreateStruct,$contentTypeGroups); // publish the content type draft $contentTypeService->publishContentTypeDraft($contentTypeDraft); // commit the transaction $repository->commit(); } catch( \eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e ) { // react on permission denied $output->writeln($e->getMessage()); $repository->rollback(); } catch( \eZ\Publish\API\Repository\Exceptions\ForbiddenException $e ) { // react on identifier already exists $output->writeln($e->getMessage()); $repository->rollback(); } catch( \Exception $e ) { $output->writeln($e->getMessage()); $repository->rollback(); } } |
...
In this receipt content is created under a given parent location. It is assumed that the loaded content type is the one created in receipt 4. (Full code here).
Code Block | ||||
---|---|---|---|---|
| ||||
// get the content service from the repository $contentService = $repository->getContentService(); // get the location service from the repsitory $locationService = $repository->getLocationService(); // get the user service from the repsitory $contentTypeService = $repository->getContentTypeService(); try { // load the content type with identifier $contentType = $contentTypeService->loadContentTypeByIdentifier($contentTypeIdentifier); // instanciate a location create struct $locationCreateStruct = $locationService->newLocationCreateStruct($parentLocationId); // instanciate a content creation struct $contentCreateStruct = $contentService->newContentCreateStruct($contentType, 'eng-GB'); // set title field $contentCreateStruct->setField('title',$title); // set body field $contentCreateStruct->setField('body', $body); // create a draft using the content and location create structs $draftContent = $contentService->createContent($contentCreateStruct, array($locationCreateStruct)); // publish the content draft $content = $contentService->publishVersion($draftContent->versionInfo); // print out the content print_r($content); } catch(\eZ\Publish\API\Repository\Exceptions\NotFoundException $e) { // react on content type or location not found $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\InvalidArgumentException $e) { // react on remote id exists already $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException $e) { // react on a field is not valid $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\ContentValidationException $e) { // react on a required field is missing or empty $output->writeln($e->getMessage()); } catch( \eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e ) { // react on permission denied $output->writeln($e->getMessage()); } } |
...
In this receipt the previously created content is updated with a new title and body in the same language. (Full code here)
Code Block | ||||
---|---|---|---|---|
| ||||
try { // load the content info for the given id $contentInfo = $contentService->loadContentInfo($contentId); // create a draft from the current published version $contentDraft = $contentService->createContentDraft($contentInfo); // instanciate a content update struct $contentUpdateStruct = $contentService->newContentUpdateStruct(); // set language for new version $contentUpdateStruct->initialLanguageCode = 'eng-GB'; // set fields $contentUpdateStruct->setField( 'title', $newtitle ); $contentUpdateStruct->setField( 'body', $newbody ); // update draft $contentDraft = $contentService->updateContent($contentDraft->versionInfo, $contentUpdateStruct); // publish draft $content = $contentService->publishVersion($contentDraft->versionInfo); print_r($content); } catch(\eZ\Publish\API\Repository\Exceptions\NotFoundException $e) { // react on content not found $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\ContentFieldValidationException $e) { // react on a field is not valid $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\ContentValidationException $e) { // react on a required field is missing or empty $output->writeln($e->getMessage()); } } |
...
In this receipt a simple full text search is performed. (Full code here)
Code Block | ||||
---|---|---|---|---|
| ||||
// get the search service $searchService = $repository->getSearchService(); // create a new query object $query = new \eZ\Publish\API\Repository\Values\Content\Query(); // add a fulltext criterion $query->criterion = new \eZ\Publish\API\Repository\Values\Content\Query\Criterion\Fulltext($text); // call findContent $result = $searchService->findContent($query); // print the total count of the search hits $output->writeln('Found ' . $result->totalCount . ' items'); // iterate over the search hits foreach( $result->searchHits as $searchHit ) { // print out the content name $output->writeln($searchHit->valueObject->contentInfo->name); } |
...
In this receipt different criteria is combined using a logic and operation. The result is restricted additional (see Receipt 9) to a given content type and subtree. (Full code here)
Code Block | ||
---|---|---|
| ||
// create a full text criterion $criterion1 = new \eZ\Publish\API\Repository\Values\Content\Query\Criterion\FullText($text); // create a subtree criterion (restrict results to belong to the subtree) $criterion2 = new \eZ\Publish\API\Repository\Values\Content\Query\Criterion\Subtree($location->pathString); // create a content type criterion (restrict to the given content type) $criterion3 = new \eZ\Publish\API\Repository\Values\Content\Query\Criterion\ContentTypeId($contentTypeId); // make a logical AND of the two criteria $query->criterion = new \eZ\Publish\API\Repository\Values\Content\Query\Criterion\LogicalAND( array($criterion1,$criterion2,$criterion3)); |
...
This receipt shows how to browse a subtree starting from a given location. (Full code here)
Code Block | ||||
---|---|---|---|---|
| ||||
// get the location service from the repsitory $this->locationService = $repository->getLocationService(); try { $location = $this->locationService->loadLocation($locationId); $this->browseLocation($location,0,$output); } catch( \eZ\Publish\API\Repository\Exceptions\NotFoundException $e ) { // if the location was not found $output->writeln( "No content with id $locationId" ); } catch( \eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e ) { // not allowed to read this location $output->writeln( "Anonymous users are not allowed to read location with id $locationId" ); } |
...
This receipt shows how to add a new location to a given content object. (Full code here)
Code Block | ||||
---|---|---|---|---|
| ||||
// get the location service from the repsitory $locationService = $repository->getLocationService(); try { // instanciate a location create struct $locationCreateStruct = $locationService->newLocationCreateStruct($parentLocationId); // load the content info from the given content id $contentInfo = $contentService->loadContentInfo($contentId); // create a new location below the given parent $newLocation = $locationService->createLocation($contentInfo,$locationCreateStruct); // print out the new location print_r($newLocation); } catch(\eZ\Publish\API\Repository\Exceptions\NotFoundException $e) { // react on content or location not found $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e) { // react on permission denied $output->writeln($e->getMessage()); } |
...
This receipt shows how to move or copy a subtree to a given parent location (Full code here)
Code Block | ||||
---|---|---|---|---|
| ||||
// get the location service from the repsitory $locationService = $repository->getLocationService(); try { // load the location from the given location id $location = $locationService->loadLocation($locationId); // load the parent location to move/copy to $parentLocation = $locationService->loadLocation($parentLocationId); if($operation == 'copy') { $newLocation = $locationService->copySubtree($location, $parentLocation); } else if($operation == 'move') { $newLocation = $locationService->moveSubtree($location, $parentLocation); } else { $output->writeln("operation must be copy or move"); return; } print_r($newLocation); } catch(\eZ\Publish\API\Repository\Exceptions\NotFoundException $e) { // react on parent location or location not found $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e) { // react on permission denied $output->writeln($e->getMessage()); } } |
...
This receipt shows how to hide/unhide a location. (Full code here)
Code Block | ||||
---|---|---|---|---|
| ||||
// get the location service from the repository $locationService = $repository->getLocationService(); // get the user service from the repsitory $userService = $repository->getUserService(); // load admin user $user = $userService->loadUser(14); // set current user to admin $repository->setCurrentUser($user); try { // load the location info from the given location id $location = $contentService->loadContentInfo($contentId); // hide the location $hiddenLocation = $locationService->hideLocation($location); // print out the location print_r($hiddenLocation); // unhide the location $unhiddenLocation = $locationService->unhideLocation($hiddenLocation); // print out the location print_r($unhiddenLocation); } catch(\eZ\Publish\API\Repository\Exceptions\NotFoundException $e) { // react on location not found $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e) { // react on permission denied $output->writeln($e->getMessage()); } |
...
Later on sections can be assigned with the following code (Full code here):
Code Block | ||||
---|---|---|---|---|
| ||||
// get the content service from the repository $contentService = $repository->getContentService(); // get the section service from the repsitory $sectionService = $repository->getSectionService(); // get the user service from the repsitory try { // load the content info from the given content id $contentInfo = $contentService->loadContentInfo($contentId); // load the section $section = $sectionService->loadSection($sectionId); // assign the section to the content $sectionService->assignSection($contentInfo, $section); // realod an print out $contentInfo = $contentService->loadContentInfo($contentId); // should show the new section id $output->writeln($contentInfo->sectionId); } catch(\eZ\Publish\API\Repository\Exceptions\NotFoundException $e) { // react on content or section not found $output->writeln($e->getMessage()); } catch(\eZ\Publish\API\Repository\Exceptions\UnauthorizedException $e) { // react on permission denied $output->writeln($e->getMessage()); } |
...