eZ Publish と eZ Platform

# <i class="fa fa-clone"></i> eZ Publish から eZ Platform へ

eZ Publish は 5 からフレームワークに Symfony を採用し、6 から製品名を eZ Platform に変更するなど大きく舵を切っています。

# 概要
| バージョン      | 呼称                | カーネル | フレームワーク | テンプレート |
|----------------|---------------------|------------|------------|---|
| eZ Publish 4.x | eZ Publish          | legacy stack | eZ Components | eZ Templates |
| eZ Publish 5.x | eZ Publish Platform | デュアルカーネル<br>(legacy / new stack 併存) | Zeta Components<br>Symfony | eZ Templates<br>Twig |
| eZ Publish 6.x | eZ Platform<br>eZ Studio (有償) | Symfony stack | Symfony | Twig |

## eZ Publish 4
**eZ Publish 4** までは独自フレームワークの **[eZ Components](http://ezcomponents.org/)** で開発されていました。
テンプレートは **Smarty** に似ている **eZ Templates** になります。

なお、eZ Components は2010年7月から **[Zeta Components](http://zetacomponents.org/)** に名称変更され、2012年5月以降は Apache インキュベーターから卒業し Github 上に移行しました。

## eZ Publish 5 (eZ Publish Platform 5)
**eZ Publish 5** から Zeta Components (レガシースタックとも呼ばれます) と **[Symfony](https://symfony.com/)** スタックのデュアルカーネルで開発されるようになり、今までの開発資産を活かしたまま Symfony でも開発できるようになりました。

そのため、テンプレートは **eZ Templates** か **Twig** のいずれか（あるいは両方）を利用できます。
また、追加機能の開発は Zeta Components ベースの**エクステンション**か Symfony ベースの**バンドル**のいずれかになります。

次期バージョンである eZ Platform への移行過程であることを表現するために eZ Publish 5 を **eZ Publish Platform 5** と記載するケースがありますが、完全に同義です。

## eZ Platform (eZ Publish 6)
**eZ Platform** は **eZ Publish 6** に相当する新しい製品名です。
フルスタックの Symfony に完全移行となり、テンプレートは **Twig** になります。

### eZ Enterprise
**[eZ Enterprise](http://ez.no/Products/eZ-Enterprise)** は eZ Platform の有償サービスの名称です。これには **eZ Studio** が含まれます。

### eZ Studio
**[eZ Studio](http://ez.no/Products/eZ-Studio)** は **eZ Enterpirse** で提供される高度な管理画面の機能です。

# リリース一覧

| バージョン       | コードネーム   | リリース日   | 備考 |
|----------------|-------------|------------|-----|
| eZ Publish 4.4 | Fuji        | 2010/09/28 |  |
| eZ Publish 4.5 | Matterhorn  | 2011/03/29 |  |
| eZ Publish 4.6 | Annapurna   | 2011/11/18 |  |
| eZ Publish 4.7 | Etna        | 2012/05/15 | 4.x系最終リリース。 |
| eZ Publish 5.0 | Kilimanjaro | 2012/11/27 | Symfonyを採用した最初のバージョン。 |
| eZ Publish 5.1 | Stadda      | 2013/05/28 | レガシーDFSを使用した5.xのクラスタリングサポート、<br>スタッシュ利用による5系APIの永続的DBキャッシュ、<br>eZPage(eZflow) 読み取り専用サポート。 |
| eZ Publish 5.2 | Aconcagua   | 2013/11/19 |  |
| eZ Publish 5.3 | Ventoux     | 2014/05/27 | LTS(長期サポート)リリース。<br>Doctrine DBALの採用、<br>ユーザー認証にSymfonyのセキュリティコンポーネントを採用、<br>Composerの完全対応、<br>レガシーのシングルサインオンのサポート、<br>new stackを使ったコンテンツプレビュー、<br>eZ FindでSolr 4.xサポート、<br>Ubuntu 14.04サポート、<br>Symfonyのプロファイラーでのデバッグに対応、<br>コメント管理の改善、<br>REST API v2改善、<br>検索APIのMapLocationサポート、<br>言語切り替えの改善、<br>地図表示のDemoの更新。 |
| eZ Publish 5.4 | Castor      | 2014/12/02 | LTSリリース、<br>独自の動画I/Oサポート、<br>バイナリーファイル管理、<br>独自の互換性を備えたクラスターサポート、<br>従来のDFSクラスター、動画、改良版キャッシュシステムのサポート。<br>5.x系最終リリース。 |
| eZ Platform 1.0.1 | | 2015/12/15 | |
| eZ Platform 1.2.0 | | 2016/03/03 | |
| eZ Platform 1.3.0 | | 2016/04/28 | |
| eZ Platform 1.4.0 | | 2016/06/30 | |
| eZ Platform 1.5.0 | | 2016/09/01 | |
| eZ Platform 1.6.0 | | 2016/10/24 | |

# 用語の変更

eZ Publish の用語に関して eZ Publish 5 から変更がありました。
ただし eZ Publish 5 の管理画面はまだレガシーのものなので、結局古い用語がそのまま使われています。

| eZ Publish 4         | eZ Publish 5 / eZ Platform         | 他CMSでの呼称        |
|----------------------|----------------------|------------|
| エクステンション      | バンドル              | プラグイン/モジュール |
| モジュール            | コントローラー        |  |
| アクション            | (コントローラーの)メソッド              |  |
| ビュー               | (アクションの結果を表示する)テンプレート |  |
| テンプレートオペレータ | テンプレートフィルター |  |
| クラス               | コンテンツタイプ       | カスタム投稿タイプ |
| クラス属性            | フィールド定義         | カスタムフィールド |
| オブジェクト          | コンテンツ(アイテム)   |  |
| 属性                 | フィールド            |  |
| データタイプ          | フィールドタイプ      |  |
| ノード               | ロケーション          |  |
| バージョン            | バージョン情報        |  |
| 属性コンテンツ        | フィールド値          |  |

http://share.ez.no/blogs/ez/migrating-from-ez-publish-4-to-ez-publish-5-basic-concepts
https://doc.ez.no/pages/viewpage.action?pageId=2720567


# テンプレート記法

| eZ Templates (eZ Publish 4)                                                     | Twig (eZ Publish 5 / eZ Platform)         | 備考 |
|------------------------------------------------------------------|----------------------|------------|
| `{* コメント *}`                   | `{# コメント #}`                              | 出力されない |
| `{literal}li{margin:0}{/literal}` | `{% verbatim %}li{margin:0}{% endverbatim %}` | `li{margin:0}` |
| `{def $var='hello'}{$var}`        | `{% set var = 'hello' %}{{ var }}`            | `hello` |
| `{def $array=array('hello','world')}{$array.1}` | `{% set array = ['hello' ,'world'] %}{{ array.1 }}` | `world` |
| `{include uri='design:ezdemo/page_head.tpl'}` | `{%include 'eZDemoBundle::page_head.html.twig' %}` |  |
| `{$node.data_map.title}`                                           | `{{ ez_field_value( content, 'title' ) }}`  |  |
| `{attribute_view_gui attribute=$node.data_map.title}`              | `{{ ez_render_field( content, 'title' ) }}` |  |
| `{$node.name}`                                                     | `{{ content.contentInfo.name }}`            |  |
| `{node_view_gui content_node=$post view='line'}`                   | `{{ render( controller( 'ez_content:viewLocation', {'locationId': post.contentInfo.mainLocationId, 'viewType': 'line' ) ) }}` |  |
| `{$node.url_alias}`                                                | `{{ path(location) }}`                      |  |
| `{$posts = fetch('content', 'list', hash( 'parent_node_id', 2 ))}` | `{{ render( controller( 'MyBundle:ContentList', { 'parent_location': 2 } ) ) }}` |  |