SlideShare une entreprise Scribd logo
1  sur  61
Télécharger pour lire hors ligne
eZ Publish 勉強会~ 9 月~
    テンプレート言語




              
ご挨拶
    ●
        サニエ エリック
    ●   twitter/identica : @ericsagnes
    ●   サイト http://clina.jp/




                                
eZ Publish CE 2012.8
    ●   2012.7 がなかったため、変更が多く
    ●   eZ Publish 5 に向けてコードの修正はメインで
        した




                      
eZ Publish 5
    ●   2012.9 は eZ Publish の初めてリリースとなる
    ●
        メージャーバージョンなので、多くの機能が変
        わります
        ●   Symfony 2  ベースになります
        ●   テンプレートエンジンは twig になります




                           
テンプレート言語




        
用語定義




      
デザイン
    ●   エクステンションの design/ フォルダー直下の
        フォルダー一個とその下のファイル一式
    ●   標準デザインは eZ Publish のルートフォルダー
        直下の design/ に入ります
    ●   一つのデザインはテンプレート、 CSS 、 JS 、
        コンテンツでない静的ファイル等を含めます



                      
テンプレート
    ●   デザインフォルダー内に、ファイル拡張は .tpl
        のファイル
    ●   中身は HTML 、 eZ Publish テンプレート言語
        とカスタムテンプレート言語の組み合わせ
    ●
        2種類あります
        ●
            システムテンプレート
        ●
            ノードテンプレート


                          
オーバーライド
    ●
        標準デザインのテンプレートの代わりに独自な
        テンプレートを利用する仕組み
    ●
        2種類があります
        ●
            標準オーバーライド
        ●
            条件付きオーバーライド
    ●
        テンプレート以外にもデザインの各コンテンツ
        をオーバーライドできます


                         
ページ
    ●   ユーザが見る、 CMS の WEB ページ
    ●
        複数のテンプレートを組み合わせて作られてい
        ます
    ●   ノードを見る場合は必ず「 full 」ビューモード
        が利用されます




                     
テンプレート言語
    ●   HTML と eZ Publish 独自のコードが使える言語
    ●   smarty によくにています
    ●   eZ Publish のコードは波括弧 {} に入ります
    ●
        オペレーター、ファンクション、ブロックを利
        用できます
    ●
        独自オペレーターで拡張できます


                       
テンプレート変数
    ●
        テンプレートで利用できる変数
    ●   「 $ 」で始まる
    ●
        2種類あります
        ●
            モジュールが提供する変数
            $node など
        ●
            独自で作る変数




                       
テンプレートオペーレーター
    ●
        テンプレート内でロジックを実行できる特別な
        キーワード
    ●
        基本的はインプットに対してアウトプットを生
        成する
        {10|inc()}   =>  11
    ●   「 | 」で連続できる
        {10|inc()|dec()}   =>  10
    ●   PHP で独自のオペレーターが作れる
                                 
テンプレートブロック
    ●
        テンプレート内でロジックブロックを実行でき
        る特別なキーワード
    ●
        主に
        ●   条件ブロック {if}{elsif}{else}{/if}
        ●   ループ {foreach}{/foreach}
    ●   閉じタグが必ず付く {/tag}



                                 
テンプレートファンクション
    ●
        テンプレート内でロジックを実行できる特別な
        キーワード
    ●
        オペレーターとの違いはインプットをとらない
        事
        {fetch} など
    ●
        一般的は独自ファンクションのを作らない



                   
テンプレート言語




        
MVC と eZ Publish
    ●   eZ Publish は MVC デザインパータンを利用し
        ています
        ●   モデル( M )はコンテンツクラス
        ●   コントローラ( C )はモジュール・ビュー
        ●   ビュー( V )はテンプレート
    ●   ただし、 eZ Publish の場合はコントローラを変
        更できないため、ビューにコントローラ的なロ
        ジックが入ります

                        
変数




     
テンプレート変数
    ●
        2種類あります
        ●   eZ (モジュール)が提供する変数
        ●
            独自で作る変数
    ●
        変数には複数な種類があります
        ●   数字          {def $var = 1234}
        ●   文字        {def $var = “ 変数” }
        ●   ブーリアン    {def $var = true()}
        ●   配列      {def $var = array('a','b','c')}
        ●   ハッシュ    {def $ var = hash('name', 'bob', 'age', 24)}
        ●
            オブジェクト(テンプレートでは作れない)
                                         
テンプレート変数
    ●
        変数に関わる主なファンクション
        ●
            {def} で変数を作る {def $a = 1}
        ●
            {set} で変数の値を変更する {set $a = 2}
        ●
            {undef} で変数を破棄する
    ●
        注意
        ●
            既に存在する変数に {def} をするとエラーが出ます
        ●
            {undef} はテンプレートの終わりに自動的にされます
        ●
            {def} で作られてない変数に {set} をかけるとエラーが出ます



                                   
テンプレート変数

{def $weather = " 晴れ "}
<p> 本日の天気は {$weather}</p>
{set $weather = " 雨 "}
<p> 明日の天気は {$weather}</p>
{undef}



                 
文字列
    ●   設定の際に「””」又は「 '' 」で囲まれた変数
        は文字列として扱われる


{def $weather = " 晴れ "}
<p> 今日の天気は {$weather}</p>
{set $weather = " 雨 "}
<p> 明日の天気は {$weather}</p>
{undef}


                        
文字列 ­  代表的オペレーター
    ●
        concat() ­  複数の文字列を合体する
        {concat(' 東京都 ',' 新宿区 ')} =>  東京都新宿区
    ●
        contains() ­  文字列が含まれてるを確認する
        {' 東京都新宿区 '|contains(' 東京都 ')} => true
    ●   explode() ­  文字列を配列に分散する
        {' 青、赤、緑 '|explode(' 、 ')} => [' 青 ',' 赤 ',' 緑 ']
    ●
        wash() ­ HTML にセーフ文字列を戻す
        {'<p> テスト <p>'|wash} => '&lt;p&gt; テスト &lt;p&gt;'



                                     
配列
    ●   配列は {array( 値 )} で作れる
    ●   配列の項目は「 [ 数 ] 」と「 . 数」でアクセス
        できる


    {def $fruits = array(' りんご ', ' バナナ ', ' みかん ')}
    {$fruits.0} => ' りんご '
    {$fruits[1]} => ' バナナ '
    {set $fruits = $fruits|replace(0,1,' 桃 ')}
    {$fruits} => [' 桃 ', ' バナナ ', ' みかん ']
                                
配列 ­  代表的オペレーター
    ●
        append() ­  配列に項目を追加
        {array('a','b')|append('c','d')} => ['a','b','c','d']
    ●
        contains() ­  配列の中身の確認
        {array('a', 'b')|contains('a')} => true
    ●
        implode() ­  配列を文字列に合体させる
        {array('a','b')|implode('&')} => 'a&b'
    ●
        merge() ­  二つの配列を合体する
        {array('a','b')|merge(array('c','d'))} => ['a','b','c','d']
    ●
        reverse() ­  配列を逆の順番にする
        {array('a','b','c')|reverse()} => ['c','b','a']
    ●
        count() ­  配列のサイズを戻します
        {array('a', 'b', 'c')|count} => 3

                                                   
ハッシュ
    ●
        特別な配列、キーとバリューを結びます
    ●
        配列と同じオペレーターを利用できます



    {def $user = hash('name', 'bob', 'age', 24)}
    {$user['name']} => 'bob'
    {$user.age} => 24
    {set $user = $user|merge(hash('id', 'bob24'))}
    {$user['id']} => 'bob24'
                                 
数字
    ●   数字をする {def $a = 1}
    ●   フロート数字 {def $a = 3.14159}




                          
数字 ­  代表的オペレーター
    ●
        ceil() floor() round() ­  少数をなくす
        {3.1415|ceil()} => 4
        {3.1415|floor()} => 3
        {3.1415|round} => 3
    ●
        inc() dec() ­ 1 を足す・引く
        {1|inc()} => 2
        {2|dec()} => 1
    ●
        sum() sub() mul() div() ­  計算をする
        {2|sum(3,4)} => 9
        {2|sub(1)} => 1
        {2|mul(10)} => 20
        {10|div(5)} => 2
                                    
数字 ­  代表的オペレーター
    ●   gt() lt() ge() le() eq() ­  比較オペーレーター
        ●   gt() ­ greater than ­ >
            {2|gt(1)} => true()
        ●   lt() ­ lesser than ­ <
            {2|lt(1)} => false()
        ●   ge() ­ greater or equal ­ >=
            {2|ge(2)} => true()
        ●   le() ­ lesser or equal ­ <=
            {2|le(2.1)} => true()
        ●   eq() ­ equal ­ =
            {2|eq(2)} = true
                                            
ブーリアン
    ●   true() か false オペーレーターで設定
        {def $a = true()}
    ●   注意:数字の 0 と空文字列 '' は false() として扱
        われます




                        
$node




       
$node
    ●
        ビューテンプレートで利用できる
    ●   [eZContentObjectTreeNode] のインスタンス
    ●
        現ノードの情報を幅広くもっています
    ●   $node の情報を確認したい場合は
        {$node|attribute('show',1)}




                           
$node ­  代表的な変数
    ●   $node.parent –  親ノード [eZContentObjectTreeNode]
    ●   $node.children ­  子ノード [ 配列 ]
    ●   $node.data_map ­  ノードの属性 [ 配列 ]
    ●   $node.url_alias ­  ノードの相対 URL[ 文字列 ]
    ●   $node.name ­  ノードの名前
    ●   $node.sort_array ­  子ノードのソート順
    ●   $node.object ­  ノードの元オブジェクト


                               
$node ­  注意
    ●
        「 . 」で結ぶサブ変数はデフォルトで生成されてい
        ない物もあります、必要な時にモジュールが生成し
        ます
    ●
        そのために「 .children 」のような変数はデータベー
        スにリクエストを増やします
    ●
        「 .children[0].children[1].children 」のような書き方
        はパフォーマンスに影響をします
    ●
        そういう場合はピンポイントで fetch したほうがパ
        フォーマンスあがります
                              
一般オペレーター




        
URL 関係
    ●   ezurl() ­ url を整理する(サイトアクセスなど)
        <a href={$node.url_alias|ezurl()}> リンク </a>
    ●   ezimage() ­  画像の URL を生成する(デザインの images
        フォルダーを利用する)
        <img src={'image.jpg'|ezimage()} />
    ●   ezdesign() ­  デザインリソースの URL を生成する(デザ
        インフォルダーを利用する)
        @import url({'stylesheets/style.css'|ezdesign('no')})




                                  
テンプレートブロック




         
if – elseif – else


    {if eq($word, ' しりとり ')}
    <p> りんご </p>
    {elseif eq($word,' ゴリラ ')}
    <p> ラムネ </p>
    {else}
    <p> 。。。 </p>
    {/if}


                                  
ループ
    ●
        ループ形式は複数ありますが、ほとんどのケースに使われるのは
        「 foreach 」です
    ●
        配列・ハッシュに使えます
    ●
        基本の書き方は
        {foreach $array as $item }
        <p>{$item}</p>
        {/foreach}
    ●
        キー付ける事はできます(配列の場合は位置の数字となる)
        {foreach $array as $key => $item }
        <p>{$key} ­ {$item}</p>
        {/foreach}

                                      
foreach ­  オプション
    ●   reverse –  配列を逆順でループする
        {foreach $array as $item reverse}
    ●
        max –  最大のループ数
        {foreach $array as $item max = 3}
    ●
        offset –  ループのスタート時点
        {foreach $array as $item offset = 3}
    ●
        sequence –  ループする追加配列( css 定義に便利)
        {foreach $array as $item sequence array('light', 'dark') as 
        $style}


                                      
foreach –  特別キーワード
    ●   {foreach} ループ内で特別なキーワードが使えます
        ●   {delimiter}{/delimiter} ­ ループの間に入れるブロク
            {delimiter}<br />{delimiter}
        ●   {skip} ­  次のイテレーションに行きます、
            {delimiter} を利用しない
        ●   {continue} ­  次のイテレーションに行きます、
            {delimiter} を利用する
        ●   {breaks} ­  次のイテレーションを実行せず、
            {foreach} から出る
                              
テンプレートファンクション




           
fetch ファンクション
    ●
        fetch ファンクションでモデルにクエリーを送れま
        す
    ●
        fetch ファンクションはモジュール毎に複数設定さ
        れています
    ●
        公式ドキュメンテーションにドキュメントされてい
        ます
    ●
        書き方は
        {fetch(' モジュール ',' ファンクション ', [ パラメー
        ター ])}
                           
代表的な fetch ファンクション
    ●   ほとんどのプロジェクトでは 3 つの fetch で対
        応できます
    ●
        一つのノードをフェッチ
        fetch('content', 'node', hash( 'node_id', 2 ))
    ●
        複数のノードをフェッチ
        fetch('content','list', hash('parent_node_id', 2))
    ●
        現ユーザをフェッチ
        fetch('user','current_user')
                                 
fetch – content, node
    ●
        単独のノードをフェッチする
    ●
        ノードオブジェクト [eZContentObjectTreeNode] を戻す
    ●
        書き方
        {def $a = fetch('content', 'node', hash(
            'node_id',  ノード ID
        ))}
    ●
        追加パラメーター
        ●
            'language­code'  特定な言語でコンテンツをフェチする



                                      
fetch – content, list
    ●
        複数のノードをフェッチする
    ●
        ノードオブジェクト [eZContentObjectTreeNode] の配列を戻す
    ●
        書き方
        {def $a = fetch('content', 'list', hash(
            'parent_node_id',  ノード ID
        ))}
    ●
        代表的な追加パラメーター
        ●
            'sort_by'  ソート順の設定 [ 配列 ]  
        ●
            'limit'  戻すノードの数 [ 数字 ]
        ●
            'offset'  結果のスタート位置 [ 数字 ]
        ●
            'class_filter_type'  クラス絞り込みロジック ['include'|'exclude']
        ●
            'class_filter_array'  クラスの絞り込み [ クラスの配列 ]
        ●
            'attribute_filter'  属性の値で結果を絞り込む

                                                    
fetch – content, list トリック
    ●
        簡単なページネーション実装
        {def $a = fetch('content', 'list', hash(
            'parent_node_id',  ノード ID,
            'offset', mul($page_nb|dec(), $items_per_page),
            'limit', $items_per_page
        ))}
    ●
        フォルダークラスだけのノードをフェッチ
        {def $a = fetch('content', 'list', hash(
            'parent_node_id',  ノード ID,
            'class_filter_type', 'include',
            'class_filter_array', array('folder')
        ))}


                                         
fetch – user, current_user
    ●
        ログインユーザをフェッチします
    ●   [eZUser] を戻す
    ●
        書き方
        {def $user = fetch('user', 'current_user')}
    ●   {$user.contentobject.main_node} でユーザの
        eZContentObjectTreeNode を選択することがで
        きます


                                 
テンプレート呼び出し
      ファンクション



         
テンプレート呼び出し
                 ファンクション
    ●
        テンプレート内からテンプレートオーバーライ
        ドルールに従って、テンプレートを呼び出す事
        を可能にするファンクション
    ●
        最も使われますのは下記の二つ
        ●
            ノードテンプレートを呼び出す
            {node_view_gui}
        ●
            属性テンプレートを呼び出す
            {attribute_view_gui}

                            
node_view_gui
    ●
        ノードをオーバーライドルールにマッチしたテンプレートで表示する
    ●
        パラメター
        ●
            content_node  表示したいノードオブジェクト [eZContentObjectTreeNode]
            content_node = $some_node
        ●   view  ノードを表示するように利用するビューモード [ 文字列 ]
            view = 'full'
        ●
            独自パラメーター (任意)
            my_param = ' あいうえお '
    ●
        例
            {node_view_gui content_node = $some_node view = full}
            {node_view_gui content_node = $some_node view = full my_param = ' あいうえお
            '}



                                              
node_view_gui
    ●
        例、現ノードの子ノードをビューモードで表示
        する
         {foreach $node.children as $children}
         {node_view_gui content_node=$children view='line'}
         {/foreach}




                                    
attribute_view_gui
    ●
        属性をオーバーライドルールにマッチしたテンプレートで
        表示する
    ●
        パラメター
        ●   attribute  表示したい属性オブジェクト [eZContentObjectAttribute]
            attribute = $node.data_map.title
        ●
            独自パラメーター (任意)
            my_param = ' あいうえお '
    ●
        例
            {attribute_view_gui attribute = $node.data_map.image}
            {attribute_view_gui attribute = $node.data_map.image 
            image_class='thumbnail'}
                                          
attribute_view_gui
    ●
        例、現ノードの属性を全て適切なテンプレート
        で表示する
         {foreach $node.data_map as $attribute}
         {attribute_view_gui attribute = $attribute}
         {/foreach}




                                      
テンプレートファンクション




           
デバッグ
    ●
        配列、ハッシュやオブジェクトの中身を確認したい場合は
        attribute() オペレーターを利用します
    ●
        パラメーターを2渡す事ができます
        ●   attribute( 値フラグ , 階層 )
        ●   「値フラグ」を 'show' にすると値が表示されます
        ●
            「階層」はどの階層まで表示するのを決める、デ
            フォルトは2、1にするのはわかりやすい
    ●   おすすめな使い方は {$var|attribute('show',1)}

                                
カスタムオペレーター




         
カスタムオペレーター
    ●
        テンプレートに多数のロジックを入れると次の問
        題が発生します
        ●
            デバッグは複雑になります
        ●
            パーフォーマンスに影響が出ます
    ●
        さらにテンプレート言語でできる事は限られてい
        ます
    ●
        一つの結果を出すために5行以上のロジックを書
        くと、カスタムオペレーターを書いたをがおすす
        めです
                       
カスタムオペレーター
    ●
        カスタムオペーレーターはエクステンションに入る
    ●
        PHP ベース
    ●
        管理画面の「システム設定」「アプリ開発ツール」
        で PHP ファイルのテンプレートを作れます
    ●
        PHP では直接 eZ Publish の API を利用できます
        http://pubsvn.ez.no/doxygen/trunk/html/index.html
    ●
        さらに、 eZComponents の API も使えます。グラ
        フの生成やメールの送信・受信にお勧めです。
        http://ezcomponents.org/docs
                                 
ドキュメンテーション
    ●
        テンプレート言語のメインなドキュメンテーションはリファレンスで確
        認できます
        http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/
    ●
        オペーレーター
        http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Template­ope
        rators
    ●
        ファンクション
        http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Template­fun
        ctions
    ●
        ブロック
        http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Template­cont
        rol­structures
    ●
        オブジェクトタイプ
        http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Objects
    ●
        フェッチファンクション
                                            
        http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Objects
質問タイム




       

Contenu connexe

Similaire à eZ Publish勉強会9月〜テンプレート言語〜

Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2Masao Kato
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方Soudai Sone
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Ransui Iso
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
コードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレートコードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレートAkira Maruyama
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)Masahiro Hayashi
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門Sho A
 
Gen-Template-for-Perl
Gen-Template-for-PerlGen-Template-for-Perl
Gen-Template-for-Perlnasneg
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門Takashi Kitano
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみたTakahiro Hidaka
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~Akabane Hiroyuki
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Ryuma Tsukano
 

Similaire à eZ Publish勉強会9月〜テンプレート言語〜 (20)

Clojure programming-chapter-2
Clojure programming-chapter-2Clojure programming-chapter-2
Clojure programming-chapter-2
 
知って得する標準関数の使い方
知って得する標準関数の使い方知って得する標準関数の使い方
知って得する標準関数の使い方
 
Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3Lisp Tutorial for Pythonista : Day 3
Lisp Tutorial for Pythonista : Day 3
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
コードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレートコードビュー中心で開発するDreamweaverテンプレート
コードビュー中心で開発するDreamweaverテンプレート
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)初心者講習会資料(Osaka.R#7)
初心者講習会資料(Osaka.R#7)
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 
Gen-Template-for-Perl
Gen-Template-for-PerlGen-Template-for-Perl
Gen-Template-for-Perl
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Form libraries
Form librariesForm libraries
Form libraries
 
Form libraries
Form librariesForm libraries
Form libraries
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
Perl勉強会#2資料
Perl勉強会#2資料Perl勉強会#2資料
Perl勉強会#2資料
 
Rails3.1rc4を試してみた
Rails3.1rc4を試してみたRails3.1rc4を試してみた
Rails3.1rc4を試してみた
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
 
Scala on Hadoop
Scala on HadoopScala on Hadoop
Scala on Hadoop
 
MapReduce入門
MapReduce入門MapReduce入門
MapReduce入門
 
Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)Parse.comと始めるBackbone.js入門(jscafe7)
Parse.comと始めるBackbone.js入門(jscafe7)
 

Plus de ericsagnes

eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」ericsagnes
 
eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」ericsagnes
 
eZ Publish勉強会2013年6月「best practices」
eZ Publish勉強会2013年6月「best practices」eZ Publish勉強会2013年6月「best practices」
eZ Publish勉強会2013年6月「best practices」ericsagnes
 
eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」
eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」
eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」ericsagnes
 
eZ Publish勉強会5月「eZ Find」
eZ Publish勉強会5月「eZ Find」eZ Publish勉強会5月「eZ Find」
eZ Publish勉強会5月「eZ Find」ericsagnes
 
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」ericsagnes
 
eZ Publish勉強会10月〜Wysiwygエディター〜
eZ Publish勉強会10月〜Wysiwygエディター〜eZ Publish勉強会10月〜Wysiwygエディター〜
eZ Publish勉強会10月〜Wysiwygエディター〜ericsagnes
 
個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法
個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法 個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法
個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法 ericsagnes
 
eZ Publish 2012年5月勉強会 - サイトアクセス
eZ Publish 2012年5月勉強会 - サイトアクセスeZ Publish 2012年5月勉強会 - サイトアクセス
eZ Publish 2012年5月勉強会 - サイトアクセスericsagnes
 
eZ Publish 2012年7月勉強会 - 権限システム
eZ Publish 2012年7月勉強会 - 権限システムeZ Publish 2012年7月勉強会 - 権限システム
eZ Publish 2012年7月勉強会 - 権限システムericsagnes
 

Plus de ericsagnes (10)

eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」eZ publish勉強会2013年9月「ez publish効率入門」
eZ publish勉強会2013年9月「ez publish効率入門」
 
eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」eZ publish勉強会2013年7月「実装ケーススタディ」
eZ publish勉強会2013年7月「実装ケーススタディ」
 
eZ Publish勉強会2013年6月「best practices」
eZ Publish勉強会2013年6月「best practices」eZ Publish勉強会2013年6月「best practices」
eZ Publish勉強会2013年6月「best practices」
 
eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」
eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」
eZ publish勉強会2013年4月「easy cmsエクステンションの紹介」
 
eZ Publish勉強会5月「eZ Find」
eZ Publish勉強会5月「eZ Find」eZ Publish勉強会5月「eZ Find」
eZ Publish勉強会5月「eZ Find」
 
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
eZ Publish勉強会2013年3月「eZ Publishの構築を簡単に!」
 
eZ Publish勉強会10月〜Wysiwygエディター〜
eZ Publish勉強会10月〜Wysiwygエディター〜eZ Publish勉強会10月〜Wysiwygエディター〜
eZ Publish勉強会10月〜Wysiwygエディター〜
 
個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法
個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法 個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法
個人ブログから大規模まで! 多機能 CMS 「 eZ Publish コミュニティエディション」の活用法
 
eZ Publish 2012年5月勉強会 - サイトアクセス
eZ Publish 2012年5月勉強会 - サイトアクセスeZ Publish 2012年5月勉強会 - サイトアクセス
eZ Publish 2012年5月勉強会 - サイトアクセス
 
eZ Publish 2012年7月勉強会 - 権限システム
eZ Publish 2012年7月勉強会 - 権限システムeZ Publish 2012年7月勉強会 - 権限システム
eZ Publish 2012年7月勉強会 - 権限システム
 

Dernier

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Dernier (9)

モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

eZ Publish勉強会9月〜テンプレート言語〜

  • 1. eZ Publish 勉強会~ 9 月~ テンプレート言語    
  • 2. ご挨拶 ● サニエ エリック ● twitter/identica : @ericsagnes ● サイト http://clina.jp/    
  • 3. eZ Publish CE 2012.8 ● 2012.7 がなかったため、変更が多く ● eZ Publish 5 に向けてコードの修正はメインで した    
  • 4. eZ Publish 5 ● 2012.9 は eZ Publish の初めてリリースとなる ● メージャーバージョンなので、多くの機能が変 わります ● Symfony 2  ベースになります ● テンプレートエンジンは twig になります    
  • 7. デザイン ● エクステンションの design/ フォルダー直下の フォルダー一個とその下のファイル一式 ● 標準デザインは eZ Publish のルートフォルダー 直下の design/ に入ります ● 一つのデザインはテンプレート、 CSS 、 JS 、 コンテンツでない静的ファイル等を含めます    
  • 8. テンプレート ● デザインフォルダー内に、ファイル拡張は .tpl のファイル ● 中身は HTML 、 eZ Publish テンプレート言語 とカスタムテンプレート言語の組み合わせ ● 2種類あります ● システムテンプレート ● ノードテンプレート    
  • 9. オーバーライド ● 標準デザインのテンプレートの代わりに独自な テンプレートを利用する仕組み ● 2種類があります ● 標準オーバーライド ● 条件付きオーバーライド ● テンプレート以外にもデザインの各コンテンツ をオーバーライドできます    
  • 10. ページ ● ユーザが見る、 CMS の WEB ページ ● 複数のテンプレートを組み合わせて作られてい ます ● ノードを見る場合は必ず「 full 」ビューモード が利用されます    
  • 11. テンプレート言語 ● HTML と eZ Publish 独自のコードが使える言語 ● smarty によくにています ● eZ Publish のコードは波括弧 {} に入ります ● オペレーター、ファンクション、ブロックを利 用できます ● 独自オペレーターで拡張できます    
  • 12. テンプレート変数 ● テンプレートで利用できる変数 ● 「 $ 」で始まる ● 2種類あります ● モジュールが提供する変数 $node など ● 独自で作る変数    
  • 13. テンプレートオペーレーター ● テンプレート内でロジックを実行できる特別な キーワード ● 基本的はインプットに対してアウトプットを生 成する {10|inc()}   =>  11 ● 「 | 」で連続できる {10|inc()|dec()}   =>  10 ● PHP で独自のオペレーターが作れる    
  • 14. テンプレートブロック ● テンプレート内でロジックブロックを実行でき る特別なキーワード ● 主に ● 条件ブロック {if}{elsif}{else}{/if} ● ループ {foreach}{/foreach} ● 閉じタグが必ず付く {/tag}    
  • 15. テンプレートファンクション ● テンプレート内でロジックを実行できる特別な キーワード ● オペレーターとの違いはインプットをとらない 事 {fetch} など ● 一般的は独自ファンクションのを作らない    
  • 17. MVC と eZ Publish ● eZ Publish は MVC デザインパータンを利用し ています ● モデル( M )はコンテンツクラス ● コントローラ( C )はモジュール・ビュー ● ビュー( V )はテンプレート ● ただし、 eZ Publish の場合はコントローラを変 更できないため、ビューにコントローラ的なロ ジックが入ります    
  • 18. 変数    
  • 19. テンプレート変数 ● 2種類あります ● eZ (モジュール)が提供する変数 ● 独自で作る変数 ● 変数には複数な種類があります ● 数字 {def $var = 1234} ● 文字 {def $var = “ 変数” } ● ブーリアン {def $var = true()} ● 配列 {def $var = array('a','b','c')} ● ハッシュ {def $ var = hash('name', 'bob', 'age', 24)} ● オブジェクト(テンプレートでは作れない)    
  • 20. テンプレート変数 ● 変数に関わる主なファンクション ● {def} で変数を作る {def $a = 1} ● {set} で変数の値を変更する {set $a = 2} ● {undef} で変数を破棄する ● 注意 ● 既に存在する変数に {def} をするとエラーが出ます ● {undef} はテンプレートの終わりに自動的にされます ● {def} で作られてない変数に {set} をかけるとエラーが出ます    
  • 21. テンプレート変数 {def $weather = " 晴れ "} <p> 本日の天気は {$weather}</p> {set $weather = " 雨 "} <p> 明日の天気は {$weather}</p> {undef}    
  • 22. 文字列 ● 設定の際に「””」又は「 '' 」で囲まれた変数 は文字列として扱われる {def $weather = " 晴れ "} <p> 今日の天気は {$weather}</p> {set $weather = " 雨 "} <p> 明日の天気は {$weather}</p> {undef}    
  • 23. 文字列 ­  代表的オペレーター ● concat() ­  複数の文字列を合体する {concat(' 東京都 ',' 新宿区 ')} =>  東京都新宿区 ● contains() ­  文字列が含まれてるを確認する {' 東京都新宿区 '|contains(' 東京都 ')} => true ● explode() ­  文字列を配列に分散する {' 青、赤、緑 '|explode(' 、 ')} => [' 青 ',' 赤 ',' 緑 '] ● wash() ­ HTML にセーフ文字列を戻す {'<p> テスト <p>'|wash} => '&lt;p&gt; テスト &lt;p&gt;'    
  • 24. 配列 ● 配列は {array( 値 )} で作れる ● 配列の項目は「 [ 数 ] 」と「 . 数」でアクセス できる {def $fruits = array(' りんご ', ' バナナ ', ' みかん ')} {$fruits.0} => ' りんご ' {$fruits[1]} => ' バナナ ' {set $fruits = $fruits|replace(0,1,' 桃 ')} {$fruits} => [' 桃 ', ' バナナ ', ' みかん ']    
  • 25. 配列 ­  代表的オペレーター ● append() ­  配列に項目を追加 {array('a','b')|append('c','d')} => ['a','b','c','d'] ● contains() ­  配列の中身の確認 {array('a', 'b')|contains('a')} => true ● implode() ­  配列を文字列に合体させる {array('a','b')|implode('&')} => 'a&b' ● merge() ­  二つの配列を合体する {array('a','b')|merge(array('c','d'))} => ['a','b','c','d'] ● reverse() ­  配列を逆の順番にする {array('a','b','c')|reverse()} => ['c','b','a'] ● count() ­  配列のサイズを戻します {array('a', 'b', 'c')|count} => 3    
  • 26. ハッシュ ● 特別な配列、キーとバリューを結びます ● 配列と同じオペレーターを利用できます {def $user = hash('name', 'bob', 'age', 24)} {$user['name']} => 'bob' {$user.age} => 24 {set $user = $user|merge(hash('id', 'bob24'))} {$user['id']} => 'bob24'    
  • 27. 数字 ● 数字をする {def $a = 1} ● フロート数字 {def $a = 3.14159}    
  • 28. 数字 ­  代表的オペレーター ● ceil() floor() round() ­  少数をなくす {3.1415|ceil()} => 4 {3.1415|floor()} => 3 {3.1415|round} => 3 ● inc() dec() ­ 1 を足す・引く {1|inc()} => 2 {2|dec()} => 1 ● sum() sub() mul() div() ­  計算をする {2|sum(3,4)} => 9 {2|sub(1)} => 1 {2|mul(10)} => 20 {10|div(5)} => 2    
  • 29. 数字 ­  代表的オペレーター ● gt() lt() ge() le() eq() ­  比較オペーレーター ● gt() ­ greater than ­ > {2|gt(1)} => true() ● lt() ­ lesser than ­ < {2|lt(1)} => false() ● ge() ­ greater or equal ­ >= {2|ge(2)} => true() ● le() ­ lesser or equal ­ <= {2|le(2.1)} => true() ● eq() ­ equal ­ = {2|eq(2)} = true    
  • 30. ブーリアン ● true() か false オペーレーターで設定 {def $a = true()} ● 注意:数字の 0 と空文字列 '' は false() として扱 われます    
  • 31. $node    
  • 32. $node ● ビューテンプレートで利用できる ● [eZContentObjectTreeNode] のインスタンス ● 現ノードの情報を幅広くもっています ● $node の情報を確認したい場合は {$node|attribute('show',1)}    
  • 33. $node ­  代表的な変数 ● $node.parent –  親ノード [eZContentObjectTreeNode] ● $node.children ­  子ノード [ 配列 ] ● $node.data_map ­  ノードの属性 [ 配列 ] ● $node.url_alias ­  ノードの相対 URL[ 文字列 ] ● $node.name ­  ノードの名前 ● $node.sort_array ­  子ノードのソート順 ● $node.object ­  ノードの元オブジェクト    
  • 34. $node ­  注意 ● 「 . 」で結ぶサブ変数はデフォルトで生成されてい ない物もあります、必要な時にモジュールが生成し ます ● そのために「 .children 」のような変数はデータベー スにリクエストを増やします ● 「 .children[0].children[1].children 」のような書き方 はパフォーマンスに影響をします ● そういう場合はピンポイントで fetch したほうがパ フォーマンスあがります    
  • 36. URL 関係 ● ezurl() ­ url を整理する(サイトアクセスなど) <a href={$node.url_alias|ezurl()}> リンク </a> ● ezimage() ­  画像の URL を生成する(デザインの images フォルダーを利用する) <img src={'image.jpg'|ezimage()} /> ● ezdesign() ­  デザインリソースの URL を生成する(デザ インフォルダーを利用する) @import url({'stylesheets/style.css'|ezdesign('no')})    
  • 38. if – elseif – else {if eq($word, ' しりとり ')} <p> りんご </p> {elseif eq($word,' ゴリラ ')} <p> ラムネ </p> {else} <p> 。。。 </p> {/if}    
  • 39. ループ ● ループ形式は複数ありますが、ほとんどのケースに使われるのは 「 foreach 」です ● 配列・ハッシュに使えます ● 基本の書き方は {foreach $array as $item } <p>{$item}</p> {/foreach} ● キー付ける事はできます(配列の場合は位置の数字となる) {foreach $array as $key => $item } <p>{$key} ­ {$item}</p> {/foreach}    
  • 40. foreach ­  オプション ● reverse –  配列を逆順でループする {foreach $array as $item reverse} ● max –  最大のループ数 {foreach $array as $item max = 3} ● offset –  ループのスタート時点 {foreach $array as $item offset = 3} ● sequence –  ループする追加配列( css 定義に便利) {foreach $array as $item sequence array('light', 'dark') as  $style}    
  • 41. foreach –  特別キーワード ● {foreach} ループ内で特別なキーワードが使えます ● {delimiter}{/delimiter} ­ ループの間に入れるブロク {delimiter}<br />{delimiter} ● {skip} ­  次のイテレーションに行きます、 {delimiter} を利用しない ● {continue} ­  次のイテレーションに行きます、 {delimiter} を利用する ● {breaks} ­  次のイテレーションを実行せず、 {foreach} から出る    
  • 43. fetch ファンクション ● fetch ファンクションでモデルにクエリーを送れま す ● fetch ファンクションはモジュール毎に複数設定さ れています ● 公式ドキュメンテーションにドキュメントされてい ます ● 書き方は {fetch(' モジュール ',' ファンクション ', [ パラメー ター ])}    
  • 44. 代表的な fetch ファンクション ● ほとんどのプロジェクトでは 3 つの fetch で対 応できます ● 一つのノードをフェッチ fetch('content', 'node', hash( 'node_id', 2 )) ● 複数のノードをフェッチ fetch('content','list', hash('parent_node_id', 2)) ● 現ユーザをフェッチ fetch('user','current_user')    
  • 45. fetch – content, node ● 単独のノードをフェッチする ● ノードオブジェクト [eZContentObjectTreeNode] を戻す ● 書き方 {def $a = fetch('content', 'node', hash( 'node_id',  ノード ID ))} ● 追加パラメーター ● 'language­code'  特定な言語でコンテンツをフェチする    
  • 46. fetch – content, list ● 複数のノードをフェッチする ● ノードオブジェクト [eZContentObjectTreeNode] の配列を戻す ● 書き方 {def $a = fetch('content', 'list', hash( 'parent_node_id',  ノード ID ))} ● 代表的な追加パラメーター ● 'sort_by'  ソート順の設定 [ 配列 ]   ● 'limit'  戻すノードの数 [ 数字 ] ● 'offset'  結果のスタート位置 [ 数字 ] ● 'class_filter_type'  クラス絞り込みロジック ['include'|'exclude'] ● 'class_filter_array'  クラスの絞り込み [ クラスの配列 ] ● 'attribute_filter'  属性の値で結果を絞り込む    
  • 47. fetch – content, list トリック ● 簡単なページネーション実装 {def $a = fetch('content', 'list', hash( 'parent_node_id',  ノード ID, 'offset', mul($page_nb|dec(), $items_per_page), 'limit', $items_per_page ))} ● フォルダークラスだけのノードをフェッチ {def $a = fetch('content', 'list', hash( 'parent_node_id',  ノード ID, 'class_filter_type', 'include', 'class_filter_array', array('folder') ))}    
  • 48. fetch – user, current_user ● ログインユーザをフェッチします ● [eZUser] を戻す ● 書き方 {def $user = fetch('user', 'current_user')} ● {$user.contentobject.main_node} でユーザの eZContentObjectTreeNode を選択することがで きます    
  • 49. テンプレート呼び出し ファンクション    
  • 50. テンプレート呼び出し ファンクション ● テンプレート内からテンプレートオーバーライ ドルールに従って、テンプレートを呼び出す事 を可能にするファンクション ● 最も使われますのは下記の二つ ● ノードテンプレートを呼び出す {node_view_gui} ● 属性テンプレートを呼び出す {attribute_view_gui}    
  • 51. node_view_gui ● ノードをオーバーライドルールにマッチしたテンプレートで表示する ● パラメター ● content_node  表示したいノードオブジェクト [eZContentObjectTreeNode] content_node = $some_node ● view  ノードを表示するように利用するビューモード [ 文字列 ] view = 'full' ● 独自パラメーター (任意) my_param = ' あいうえお ' ● 例 {node_view_gui content_node = $some_node view = full} {node_view_gui content_node = $some_node view = full my_param = ' あいうえお '}    
  • 52. node_view_gui ● 例、現ノードの子ノードをビューモードで表示 する {foreach $node.children as $children} {node_view_gui content_node=$children view='line'} {/foreach}    
  • 53. attribute_view_gui ● 属性をオーバーライドルールにマッチしたテンプレートで 表示する ● パラメター ● attribute  表示したい属性オブジェクト [eZContentObjectAttribute] attribute = $node.data_map.title ● 独自パラメーター (任意) my_param = ' あいうえお ' ● 例 {attribute_view_gui attribute = $node.data_map.image} {attribute_view_gui attribute = $node.data_map.image  image_class='thumbnail'}    
  • 54. attribute_view_gui ● 例、現ノードの属性を全て適切なテンプレート で表示する {foreach $node.data_map as $attribute} {attribute_view_gui attribute = $attribute} {/foreach}    
  • 56. デバッグ ● 配列、ハッシュやオブジェクトの中身を確認したい場合は attribute() オペレーターを利用します ● パラメーターを2渡す事ができます ● attribute( 値フラグ , 階層 ) ● 「値フラグ」を 'show' にすると値が表示されます ● 「階層」はどの階層まで表示するのを決める、デ フォルトは2、1にするのはわかりやすい ● おすすめな使い方は {$var|attribute('show',1)}    
  • 58. カスタムオペレーター ● テンプレートに多数のロジックを入れると次の問 題が発生します ● デバッグは複雑になります ● パーフォーマンスに影響が出ます ● さらにテンプレート言語でできる事は限られてい ます ● 一つの結果を出すために5行以上のロジックを書 くと、カスタムオペレーターを書いたをがおすす めです    
  • 59. カスタムオペレーター ● カスタムオペーレーターはエクステンションに入る ● PHP ベース ● 管理画面の「システム設定」「アプリ開発ツール」 で PHP ファイルのテンプレートを作れます ● PHP では直接 eZ Publish の API を利用できます http://pubsvn.ez.no/doxygen/trunk/html/index.html ● さらに、 eZComponents の API も使えます。グラ フの生成やメールの送信・受信にお勧めです。 http://ezcomponents.org/docs    
  • 60. ドキュメンテーション ● テンプレート言語のメインなドキュメンテーションはリファレンスで確 認できます http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/ ● オペーレーター http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Template­ope rators ● ファンクション http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Template­fun ctions ● ブロック http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Template­cont rol­structures ● オブジェクトタイプ http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Objects ● フェッチファンクション     http://doc.ez.no/eZ­Publish/Technical­manual/4.x/Reference/Objects