Message-ID: <151371892.4232.1485861894149.JavaMail.confluence@ip-10-127-227-164> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_4231_1389526577.1485861894143" ------=_Part_4231_1389526577.1485861894143 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html Content view

Content view

=20 =20

The ViewController

eZ Publish comes with a native controller to display your content, known= as the ViewController. It is called each tim= e you try to reach a content from its Url Alias (good = looking URI generated for any content) and is able to render any conte= nt previously edited in the admin interface or via the eZ Publish Public API.

It can also be called directly by its direct URI : /content/locati= on/<locationId>

A content can also have different view types (full page= , abstract in a list, block in a landing page...). By default the view type= is full (for full page), but it can be anything (line= , block...).

Important note regarding visibility

Location visibility flag, which you can change with hide/unhide in admin= , is not permission based and thus acts as a simple potential filter. It is not meant to restrict access to content.

If you need to restrict access to a given content, use Sections = or Object states, which are permission based.

View selection

To display a content, the ViewController uses a view manager which selec= ts the appropriate template depending on matching rules.

For more information about the=20 view provider configuration, please=20 refer to the dedicat= ed page.

Content view template

A content view template is like any other template, with several specifi= c aspects.

Available variables

Variable name Type Description
location eZ\Publish\Core\Repository\Values\Conte= nt\Location The location object. Contains meta information o= n the content (ContentInfo)
(only when accessing a locati= on) 
content eZ\Publish\Core\Repository\= Values\Content\Content The content object, containing all= fields and version information (VersionInfo)
noLayout Boolean If true, indicates if the content/= location is to be displayed without any pagelayout (i.e. AJAX, sub-requests= ...).
It's generally false when displaying a content in vie= w type full
viewBaseLayout String The base layout template to use wh= en the view is requested to be generated outside of the pagelayout (when noLayout is true).

Template inheritance

Like any template, a content view template can use template inheritance. However= keep in mind that your content can be also requested via sub-requests (see below how to rend= er embedded content objects). In this case your template should probably no= t extend your main layout.

In this regard, it is recommended to use inheritance this way:

=20
{% extends noLayout ? viewbaseLayout : "AcmeDemoBundle::pagelayout.=
html.twig" %}

{% block content %}
...
{% endblock %}
=20

Exposing additional variables

It is possible to expose additional variables in a content view template= . See parameters injection in content views.

Making links to other lo= cations

Linking to other locations is fairly easy and is done with native path() Tw= ig helper (or url() if you want to generate abso= lute URLs). You just have to pass it the Location object and pat= h() will generate the URLAlias for you.

=20
{# Assuming "location" variable is a valid eZ\Publish\API\Repositor=
y\Values\Content\Location object #}
<a href=3D"{{ path( location ) }}">Some link to a location</a><=
/pre>=20

If you don't have the Location object, but only its ID, you can generate= the URLAlias the following way:

=20
<a href=3D"{{ path( "ez_urlalias", {"locationId": 123} ) }}">=
Some link to a location, with its Id only</a>
=20

Under the hood

In the backend, path() uses the Router to generate links.

This makes also easy to generate links from PHP, via the router service.

Render embedded content= objects

Rendering an embedded content from a Twig template is pretty straight fo= rward as you just need to do a subrequest with ez_content controller.

Using ez_conten= t controller

This controller is exactly the same as the ViewController presented above and has 2 main action= s:

  • viewLocation to render a location (same a= s when accessing a content through an URLAlias)
  • viewContent to render a content

You can use this controller from templates with the following syntax:

eZ Publish 5.1+ / Symfony 2.2+
=20
{{ render( controller( "ez_content:viewLocation", {"locationId": 12=
3, "viewType": "line"} ) ) }}
=20

 

The example above= allows you to render a Location which ID is 123, with the view type line.

Reference of ez_content controller follow the syntax of controllers as a service, a= s explained in Symfony documentation.

Available arguments

As any controller, you can pass arguments to ez_content:viewLocati= on or ez_content:viewContent to fit your needs.

Name Description Type Default value
locationId Id of the location you want to render.
Only for ez_content:viewLocation 
integer N/A
contentId

Id of the content you want to r= ender.
Only for ez_content:viewContent&nbs= p;

integer N/A
viewType

The view type you want to rende= r your content/location in.
Will be used by the ViewManager to select co= rresponding template, according to defined rules. 

Example: full= , line, my_custom_view, ...

string full
layout

Indicates if the sub-view needs= to use the main layout (see av= ailable variables in a view template)

 

boolean false
params

Hash of variables you want to i= nject to sub-template, key being the exposed variable name.

Available as of eZ Publish 5.1

=20
{{ render(
      controller( 
          "ez_content:viewLocation", 
          {
              "locationId": 123,
              "viewType": "line",
              "params": { "some_variable": "some_value" }
          }
      )
) }}
=20
hash empty hash

 

ESI

Just as for regular Symfony controllers, you can take advantage of ESI a= nd use different cache levels:

Using ESI (eZ Publish 5.1+ / Symfony 2.2+)
=20
{{ render_esi( controller( "ez_content:viewLocation", {"locationId"=
: 123, "viewMode": "line"} ) ) }}
=20

 

 

 Asynchronous rendering

Symfony also supports asynchronous content rendering with the help of&nb= sp;hinclude.js library.

Asynchronous rendering (eZ Publish 5.1+ / Symfony 2.2+)
=20
{{ render_hinclude( controller( "ez_content:viewLocation", {"locati=
onId": 123, "viewMode": "line"} ) ) }}
=20

 

 

hinclude.js needs to be properly included in your layout = to work.

Please refer to Symfony documentation for all available options.

------=_Part_4231_1389526577.1485861894143--