Category: eZ Platform
eZPlatform can used as symfony backend UI also offer editor to create quickly content using ezstudio features. for developer they can customise and add ContentTypes, extend FieldTypes. Multisite , Multilanguage are basic and standard part of ezplatform.
eZPlatform display content and override field template
This is the final result how to add content relations filed to an existing content type and override or customize the image template (tested with ezplatform 1.3 and ezplatform 1.4):
With eZPlatform we can easily create content types and also create the corresponding Twig templates to render content.
In this video you can learn how to create content types in the eZPlatform Backend UI:
Once the new content type is created you should then create the Twig template to get the content of the different fields.
You can follow the instructions in this video tutorial and see how to create a content type template:
You find the basic code example here: https://gist.github.com/ramzi-arfaoui/abbf0cdcfb3bf29c9a293e76b352d455 (doesn’t contain the content relations example)
You can browse or download the whole bundle from here: https://bitbucket.org/Ramzi-Arfaoui/ezplatform-project-bundle/src (the content relations definition and template are available here)
Content type definition is also available here: http://www.screencast.com/t/WnwchfxA
As example how to override a template field , we wil examinate images added as content relations (Multiple) [ezobjectrelationlist]. In the programming language we call this type of relations “related objects”.
The ezobjectrelationlist field type content relations is defined as following:
Name:(required) to display it later when editing a content item.
Identifier:(required) unique filed name (maschine name) . Generally lowercase without special characters or spaces.
Default location:(optional) from where we should add related objects. Outside this location it is not possible to add or bind any content. In our case images.
Allowed content types: (optional) if this is defined, the editor will be able only to add a specific content type(s). In this example we will only allow the editor to add image content type.
Here is an example from our vehicle content type. The editor is only allowed to add images from the Vehicule Images folder defined in the media library.
Expamle adding images within the content item:
Let see now the output result in the twig template using two diffrent functions:
1 |
{{ ez_render_field(content, 'images') }} |
1 |
{{ content.getFieldValue('images') }} |
Here is the output results:
In both cases , we get either the image names or the contentIds of the related objects. But we need the whole content of the image like the image itself and the alternative text.
To have this informations we have to get the image content from the available contentId. This is possible when using the ez_content controller
1 |
{{ render( controller( "ez_content:viewAction", {"contentId": 123, "viewType": "line"} ) ) }} |
More information about the ez_content controller can you find it also here: https://doc.ez.no/display/DEVELOPER/Content+Rendering
Using this controller we can now extend the vehicle twig template:
1 2 3 4 |
{% set contentIds = content.getFieldValue('images') %} {% for contentId in contentIds.destinationContentIds %} {{ render( controller( "ez_content:viewAction", {'contentId': contentId, 'viewType': 'line', 'params': { 'class': 'img-responsive' } } ) ) }} {% endfor %} |
1 |
{# we can also store the above loop code in another twig template and then we just included here, so that we can re-use it for other content types to render something like gallery,carousel or header images #} |
More template functions are available here: https://gist.github.com/ramzi-arfaoui/797e56d25f203420ee1634db09c58a55
The viewType option allow us to override the default template for common view types.
So now we open the ezplatform.yml and we add following code:
1 2 3 4 5 6 7 8 |
system: default: content_view: line: image: template: ProjectAppBundle:line:image.html.twig match: Identifier\ContentType: image |
You have to customize the template line with your bundle name and you can use also a diffrent name for you twig template or your view Type.
Using the code above we can get the image content object using the default ez_content controller . At this step you can economise your time to write your own controller.
let define now the twig template. this must be located within the line folder:
1 2 3 4 |
{# image.html.twig #} {% if content.getField('image').value %} <img class="{{class|default('')}}" src="{{ content.getField('image').value.uri }}" alt="{{ content.getField('image').value.alternativeText }}" /> {% endif %} |
class: we have added the ‘img-responsive’ class from the vehicle twig template. Per default is empty (|default(”)).
src: contains the image path. This is also the general use to get an image path.
alt: is defined in the image content type.
This is now the final html source code :
1 |
<img class="img-responsive" src="/var/site/storage/images/3/9/1/0/193-4-eng-GB/vw_2.jpg" alt="my alternative text" /> |
eZPlatform 1-Installation
eZ Platform version 1 – deprecated
1.Inslallation Server & requirement Information
System Information:
Ubuntu 14.04 LTS
Php 5.6
Apache 2.4
MYSQL 5.5
System Requirement:
Take it from here: https://doc.ez.no/display/TECHDOC/Requirements
2.Inslallation of eZPlatform clean
2.1. Download from share.ez.no the latest ezpublish version
2.2. create Database & User
2.3.Creating the “app/config/parameters.yml” file (database & e-mail access)
1 2 3 |
cd // curl -sS https://getcomposer.org/installer | php php -d memory_limit=-1 composer.phar run-script post-install-cmd |
2.4.Run installation command:
This will install an eZPlatform Clean (No content) Installation.
1 |
sudo php -d memory_limit=-1 app/console ezplatform:install --env prod clean |
PS: eZ Studio can also a good descision at this Step, so that you can quickly and easily create content with drag and drop. the clean Installation require some KnowHow for creating content. See below if you want first to trust your self with a demo installation.
OR (Optional) Install eZ Plattform Demo (Demo Content):
PS: Maybe it is better to install a second eZ Plattform instance on your server to see how some content is used and do the same in your clean Installation.
At this step we get the demo throw the composer
1 2 |
composer create-project --prefer-dist --no-dev --keep-vcs ezsystems/ezplatform-demo (ezplatform-demo : is the folder name installation , in our case htdocs) php app/console ezplatform:install --env=prod demo |
2.5. Setup folder rights
1 2 3 |
sudo chown -R www-data:www-data app/cache app/logs web sudo find {app/{cache,logs},web} -type d | xargs sudo chmod -R 775 sudo find {app/{cache,logs},web} -type f | xargs sudo chmod -R 664 |
More infos: https://doc.ez.no/display/TECHDOC/Installation
3.DEV VirtualHost
Change paths and ServerName
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
DocumentRoot /srv/www/tests/ezplatform2016.04/htdocs/web Options FollowSymLinks AllowOverride None Require all granted ##see below Include /etc/apache2/sites-enabled/ez6_rewrite/ez6_rewrite_dev LogLevel error ErrorLog /srv/www/tests/ezplatform2016.04/logs/error.log CustomLog /srv/www/tests/ezplatform2016.04/logs/access.log combined ServerName dev.ez201604.de |
/etc/apache2/sites-enabled/ez6_rewrite/ez6_rewrite_dev
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
DirectoryIndex app.php # Set default timeout to 90s, and max upload to 48mb TimeOut 90 LimitRequestBody 49152 # Enabled for Dev environment LogLevel debug RewriteEngine On # Environment. # Possible values: "prod" and "dev" out-of-the-box, other values possible with proper configuration # Defaults to "prod" if omitted (uses SetEnvIf so value can be used in rewrite rules SetEnvIf Request_URI ".*" SYMFONY_ENV=dev # Optional: Whether to use custom ClassLoader (autoloader) file # Needs to be a valid path relative to root web/ directory # Defaults to bootstrap.php.cache, or autoload.php in debug if env value is omitted or empty #SetEnv SYMFONY_CLASSLOADER_FILE "%SYMFONY_CLASSLOADER_FILE%" # Optional: Whether to use debugging. # Possible values: 0, 1 or "" # Defaults to enabled if SYMFONY_ENV is set to "dev" if env value is omitted or empty SetEnv SYMFONY_DEBUG 1 # Optional: Whether to use Symfony's HTTP Caching. # Disable it if you are using an external reverse proxy (e.g. Varnish) # Possible values: 0, 1 or "" # Defaults to disabled if SYMFONY_ENV is set to "dev" or SYMFONY_TRUSTED_PROXIES is set, # and if this env value is omitted or empty SetEnv SYMFONY_HTTP_CACHE 0 # Optional: Whether to use custom HTTP Cache class if SYMFONY_HTTP_CACHE is enabled # Value must be a autoloadable cache class # Defaults to to use provided "AppCache" if env value is omitted or empty #SetEnv SYMFONY_HTTP_CACHE_CLASS "%SYMFONY_HTTP_CACHE_CLASS%" # Optional: Defines the proxies to trust # Needed when using Varnish as proxy, if so disable SYMFONY_HTTP_CACHE. # Separate entries by a comma, example: "proxy1.example.com,proxy2.example.org" # Defaults to not be set if env value is omitted or empty SetEnv SYMFONY_TRUSTED_PROXIES 127.0.0.1 RewriteEngine On # For FastCGI mode or when using PHP-FPM, to get basic auth working. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Needed for ci testing, you can optionally remove this. RewriteCond %{ENV:SYMFONY_ENV} "behat" RewriteCond %{REQUEST_URI} ^/php5-fcgi(.*) RewriteRule . - [L] # Cluster/streamed files rewrite rules. Enable on cluster with DFS as a binary data handler #RewriteRule ^/var/([^/]+/)?storage/images(-versioned)?/.* /app.php [L] RewriteRule ^/var/([^/]+/)?storage/images(-versioned)?/.* - [L] # Makes it possible to place your favicon at the root of your eZ Platform instance. # It will then be served directly. RewriteRule ^/favicon\.ico - [L] # Give direct access to robots.txt for use by crawlers (Google, Bing, Spammers...) RewriteRule ^/robots\.txt - [L] # Platform for Privacy Preferences Project ( P3P ) related files for Internet Explorer # More info here : http://en.wikipedia.org/wiki/P3p RewriteRule ^/w3c/p3p\.xml - [L] # The following rule is needed to correctly display assets from eZ Platform / Symfony bundles RewriteRule ^/bundles/ - [L] # Access to repository images in single server setup RewriteRule ^var/([^/]+/)?storage/images(-versioned)?/.* - [L] # Additional Assetic rules for environments different from dev, # remember to run php app/console assetic:dump --env=prod #RewriteCond %{ENV:SYMFONY_ENV} !^(dev) #RewriteRule ^/(css|js|font)/.*\.(css|js|otf|eot|ttf|svg|woff) - [L] RewriteRule .* /app.php # Everything below is optional to improve performance by forcing # clients to cache image and design files, change the expires time # to suite project needs. <LocationMatch "^/var/[^/]+/storage/images/.*"> # eZ Platform appends the version number to image URL (ezimage # datatype) so when an image is updated, its URL changes too ExpiresActive on ExpiresDefault "now plus 10 years" |
4.Prod VirtualHost
Change paths and ServerName
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
DocumentRoot /srv/www/tests/ezplatform2016.04/htdocs/web Options FollowSymLinks AllowOverride None Require all granted Include /etc/apache2/sites-enabled/ez6_rewrite/ez6_rewrite_prod LogLevel error ErrorLog /srv/www/tests/ezplatform2016.04/logs/error.log CustomLog /srv/www/tests/ezplatform2016.04/logs/access.log combined ServerName prod.ez201604.de |
/etc/apache2/sites-enabled/ez6_rewrite/ez6_rewrite_prod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
DirectoryIndex app.php # Set default timeout to 90s, and max upload to 48mb TimeOut 90 LimitRequestBody 49152 # Enabled for Dev environment LogLevel debug RewriteEngine On # Environment. # Possible values: "prod" and "dev" out-of-the-box, other values possible with proper configuration # Defaults to "prod" if omitted (uses SetEnvIf so value can be used in rewrite rules SetEnvIf Request_URI ".*" SYMFONY_ENV=prod # Optional: Whether to use custom ClassLoader (autoloader) file # Needs to be a valid path relative to root web/ directory # Defaults to bootstrap.php.cache, or autoload.php in debug if env value is omitted or empty #SetEnv SYMFONY_CLASSLOADER_FILE "%SYMFONY_CLASSLOADER_FILE%" # Optional: Whether to use debugging. # Possible values: 0, 1 or "" # Defaults to enabled if SYMFONY_ENV is set to "dev" if env value is omitted or empty #SetEnv SYMFONY_DEBUG 1 # Optional: Whether to use Symfony's HTTP Caching. # Disable it if you are using an external reverse proxy (e.g. Varnish) # Possible values: 0, 1 or "" # Defaults to disabled if SYMFONY_ENV is set to "dev" or SYMFONY_TRUSTED_PROXIES is set, # and if this env value is omitted or empty SetEnv SYMFONY_HTTP_CACHE 1 # Optional: Whether to use custom HTTP Cache class if SYMFONY_HTTP_CACHE is enabled # Value must be a autoloadable cache class # Defaults to to use provided "AppCache" if env value is omitted or empty #SetEnv SYMFONY_HTTP_CACHE_CLASS "%SYMFONY_HTTP_CACHE_CLASS%" # Optional: Defines the proxies to trust # Needed when using Varnish as proxy, if so disable SYMFONY_HTTP_CACHE. # Separate entries by a comma, example: "proxy1.example.com,proxy2.example.org" # Defaults to not be set if env value is omitted or empty SetEnv SYMFONY_TRUSTED_PROXIES 127.0.0.1 RewriteEngine On # For FastCGI mode or when using PHP-FPM, to get basic auth working. RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # Needed for ci testing, you can optionally remove this. RewriteCond %{ENV:SYMFONY_ENV} "behat" RewriteCond %{REQUEST_URI} ^/php5-fcgi(.*) RewriteRule . - [L] # Cluster/streamed files rewrite rules. Enable on cluster with DFS as a binary data handler #RewriteRule ^/var/([^/]+/)?storage/images(-versioned)?/.* /app.php [L] RewriteRule ^/var/([^/]+/)?storage/images(-versioned)?/.* - [L] # Makes it possible to place your favicon at the root of your eZ Platform instance. # It will then be served directly. RewriteRule ^/favicon\.ico - [L] # Give direct access to robots.txt for use by crawlers (Google, Bing, Spammers...) RewriteRule ^/robots\.txt - [L] # Platform for Privacy Preferences Project ( P3P ) related files for Internet Explorer # More info here : http://en.wikipedia.org/wiki/P3p RewriteRule ^/w3c/p3p\.xml - [L] # The following rule is needed to correctly display assets from eZ Platform / Symfony bundles RewriteRule ^/bundles/ - [L] # Access to repository images in single server setup RewriteRule ^var/([^/]+/)?storage/images(-versioned)?/.* - [L] # Additional Assetic rules for environments different from dev, # remember to run php app/console assetic:dump --env=prod RewriteCond %{ENV:SYMFONY_ENV} !^(dev) RewriteRule ^/(css|js|font)/.*\.(css|js|otf|eot|ttf|svg|woff) - [L] RewriteRule .* /app.php # Everything below is optional to improve performance by forcing # clients to cache image and design files, change the expires time # to suite project needs. <LocationMatch "^/var/[^/]+/storage/images/.*"> # eZ Platform appends the version number to image URL (ezimage # datatype) so when an image is updated, its URL changes too ExpiresActive on ExpiresDefault "now plus 10 years" |
4.Access your installtion
PS: Don’t forget to use your ServerName
frontend dev : http://dev.ez201604.de/
backend dev : http://dev.ez201604.de/ez
frontend prod : http://prod.ez201604.de/
backend prod : http://prod.ez201604.de/ez
User:admin
password:publish
Good luck!