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.

Table of Contents

Introduction

The public API will give you an easy access to the eZ Publish content repository. This repository is the core component that manages content, locations (former Nodes), sections, content types (former Content Classes), user groups, users and roles. It also provides a new, clear interface for plugging in custom field types (former Datatypes).
 
The public API is built on top of a layered architecture including a new persistence layer for abstracting the storage functionality. By using the public API, your applications will be forward compatible with future releases based on enhanced,  scalable and high-performance storage engines. Applications based on the public API are also fully backwards compatible by using the included storage engine based on the current kernel and database model.


Receipt 1 - Setting up a sample commandline symfony bundle which uses the public API

This receipt shows how to setup a simple symfony bundle with a commandline script using the public API. The command is executable within the app/console and dumps a content object for a given content id.

...

php app/console cookbook:run  57

 

Receipt 2 - Creating a content type group

This snippet creates a content type group for a given identifier.

...

The solution is described in the next receipt.

Receipt 3 - Setting the user for authorizing actions

By default the repository assumes the anonymous user is acting. To change this the following code can be executed

...

$userService->loadUser($id)

 

Receipt 4 - Creating a content type

With this snipped a content type with two fields of type 'ezstring' is created.

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
        $titleFieldCreateStruct = $contentTypeService->newFieldDefinitionCreateStruct('title', 'ezstring');
        // set names and description for display
        $titleFieldCreateStruct->names = array('eng-GB' => 'Title','ger-DE' => 'Titel',);
        $titleFieldCreateStruct->descriptions = array('eng-GB' => 'The Title','ger-DE' => 'Der Titel');
        // set an group for the field
        $titleFieldCreateStruct->fieldGroup = 'content';
        // set position inside the content type
        $titleFieldCreateStruct->position = 1;
        // enable translation
        $titleFieldCreateStruct->isTranslatable = true;
        // require this field to set on content creation
        $titleFieldCreateStruct->isRequired = true;
        // enabled to find field via content search
        $titleFieldCreateStruct->isSearchable = true;
        // add field definition to content create struct
        $contentTypeCreateStruct->addFieldDefinition( $titleFieldCreateStruct );
        // add a body field
        $bodyFieldCreate = $contentTypeService->newFieldDefinitionCreateStruct('body', 'ezstring');
        // set names and description for display
        $bodyFieldCreate->names = array('eng-GB' => 'Body','ger-DE' => 'Text');
        $bodyFieldCreate->descriptions = array('eng-GB' => 'Description for Body','ger-DE' => 'Beschreibung Text');
        $bodyFieldCreate->fieldGroup = 'content';
        $bodyFieldCreate->position = 2;
        $bodyFieldCreate->isTranslatable = true;
        $bodyFieldCreate->isRequired = true;
        $bodyFieldCreate->isSearchable = true;
        // add field definition to content create struct
        $contentTypeCreateStruct->addFieldDefinition( $bodyFieldCreate );
        // set the content type group for the content type
        $groups = array($contentTypeGroup);
        // start a transaction
        $repository->beginTransaction();
        try
        {
            // create the content type - the returned content type is in status DRAFT
            $contentTypeDraft = $contentTypeService->createContentType($contentTypeCreateStruct,$groups);
            // 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();
        }
    }

 

Receipt 5 - Creating content

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.

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
            $draft = $contentService->createContent($contentCreateStruct, array($locationCreateStruct));
            // publish the content draft
            $content = $contentService->publishVersion($draft->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());
        }
    }

 

Receipt 6 - Updating Content

In this receipt the previously created content is updated with a new title and body in the same language

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());
        }
    }

 

Receipt 7 - Translating content

It is the same code as for updating (see Receipt 6). The initial language should be set to the translation language.

Code Block
languagephp
titletranslating
            // set language for new version
            $contentUpdateStruct->initialLanguageCode = $newLanguage;
            // set fields
            $contentUpdateStruct->setField( 'title', $newtitle );
            $contentUpdateStruct->setField( 'body', $newbody );

 

Receipt 8 - Multiple translations at once

It is possible to to make an update in content  or create content with more than one language. But there is a restriction - only one language can be assigned to the newly created version (which is displayed in the 4.x admin GUI in the translations column).

Code Block
languagephp
titleupdate multiple languages
            // set one language for new version
            $contentUpdateStruct->initialLanguageCode = 'fra-FR';
			// set fields for german - here the language has to be passed in third argument
            $contentUpdateStruct->setField( 'title', $newgermantitle, 'ger-DE' );
            $contentUpdateStruct->setField( 'body', $newgermanbody, 'ger-DE' );
            // set fields for french
            $contentUpdateStruct->setField( 'title', $newfrenchtitle);
            $contentUpdateStruct->setField( 'body', $newfrenchbody);


 

Receipt 9 - Performing a simple full text search

In this receipt a simple full text search is performed.

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);
        }

 

Receipt 10 - Performing an advanced search

In this receipt different criteria are combined using logic operations