Global navigation

   Documentation Center
   eZ Studio & eZ Platform
     User Manual
     Technical Manual
     Glossary
   eZ Publish 4.x / legacy

 
eZ Publish (5.x)

eZ Publish 5.x | For eZ Platform & eZ Studio topics see Technical manual and User manual, for eZ Publish 4.x and Legacy topics see eZ Publish legacy

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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
languagephp
titlecreate content type group
linenumberstrue
        $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
languagephp
titlecreate content type
        // 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
languagephp
titlecreate content
        // 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
languagephp
titleupdate content
        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
languagephp
titlea simple full text search
        // 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
languagephp
        // 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
languagephp
titlebrowse locations
        // 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
languagephp
titleadd location
        // 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
languagephp
titlecopy/move location
        // 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
languagephp
titlehide/unhide location
        // 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
languagephp
titleassign section to content
        // 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());
        }

...