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.

...

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.

...


Recipe 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.

...

Info
titleUsed classes

 

...

Recipe 2 - Creating a content type group

This snippet creates a content type group for a given identifier (Full code here).

...

The solution is described in the next receipt.

...

Recipe 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

...

Info
titleused classes


 

...

Recipe 4 - Creating a content type

With this snipped a content type with two fields of type 'ezstring' is created. (Full code here).

...

Info
titleused classes

 

...

Recipe 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. (Full code here).

...

Info
titleused classes

 

...

Recipe 6 - Updating Content

In this receipt the previously created content is updated with a new title and body in the same language. (Full code here)

...

Info
titleused classes

...

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

...

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


...

Recipe 9 - Performing a simple full text search

In this receipt a simple full text search is performed. (Full code here)

...

Info
titleused classes

 

...

Recipe 10 - Performing an advanced search

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

 

...

Recipe 11 - Browsing Locations

This receipt shows how to browse a subtree starting from a given location. (Full code here)

...

Info
titleUsed classes

...

Recipe 12 - Adding a new location to content

This receipt shows how to add a new location to a given content object. (Full code here)

...

Info
titleUsed classes

...

Recipe 13 - Move or Copy Subtree

This receipt shows how to move or copy a subtree to a given parent location (Full code here)

...

Info
titleUsed classes

...

Recipe 14 - Hide/Unhide Location

This receipt shows how to hide/unhide a location. (Full code here)

...

Info
titleUsed classes

...

Recipe 15 - Deleting locations

If a content has more than one location the method

...

TrashService::trash(Location $location)

...

Recipe 16 - Deleting Content

The result of deleting content is equivalent to deleting all locations of content (see Receipt 15).

...

ContentService::delete(ContentInfo $contentInfo)

 

...

Recipe 17 - Assinging section to content

On creation of content  the section of the parent location's content is assigned by default to the new content. However it is possible to assign a specific section on creation by setting it in the ContentCreateStruct (Receipt 5):

...

Info
titleUsed classes

...

Recipe 18 - Viewing Content

This receipt shows how to view fields of the content int the main language.

...

$content->getField( $fieldDefinition->identifier, $otherlanguage)

...

Recipe 19 - Creating an Image

This receipt shows how to create an image content object.

Code Block
languagephp
titlecreating an image
// get the content service from the repsitory
        $contentService = $repository->getContentService();


        // get the location service from the repsitory
        $locationService = $repository->getLocationService();

        // get the content type service from the repsitory
        $contentTypeService = $repository->getContentTypeService();

        try
        {
            // load the content type with identifier
            $contentType = $contentTypeService->loadContentTypeByIdentifier("image");

            // 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('name',$name);

            // set image file field
            $value = new \eZ\Publish\Core\FieldType\Image\Value(
                     array('path' => $file,'fileSize' => filesize($file),'fileName' => basename($file),'alternativeText' => $name ));

            $contentCreateStruct->setField("image",$value);

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

 

...

Recipe 20 - Create Content with XML Text

This receipt shows how to create content with xml text. As content type the folder is used where the description is filled with xml. It is also shown how to embed the previously created image in the description. The image Id is given by a command line argument.

...