Dinoでは、サイトの見た目をHTMLとテンプレート言語を使って自由にカスタマイズできます。
このドキュメントの目的は、HTML / CSS / JavaScript / なんらかのテンプレート言語の知識のある人が、Dinoのカスタムテンプレートを理解し、編集・作成できるようにすることです。
カスタムテンプレートは、管理ツールから設定します。
テキストボックスに現在使用中のシステムテンプレートがコピーされますので、ここにカスタムテンプレートを書いていきます。
「プレビュー」をクリックすると、編集中のカスタムテンプレートを使ってサイトをプレビューできます。
「更新」をクリックすると、編集中のカスタムテンプレートがサイトに反映されます。
「テンプレートをカスタマイズする」のチェックを外すと、カスタムテンプレートの内容はすべて破棄されます。手元のテキストファイルなどに内容をコピーしておきましょう。
システムテンプレートは複雑な作りをしていますので、まずはこのドキュメントを読み進めて簡単なところから理解しましょう。
まずはDinoのサイト・メニュー・記事の構造を理解しましょう。 Dinoのサイト構造は次のようになっています。
サイトマップ風に書くと以下のようになります。
/ インデックスページ /wf/menu1 メニューページ(menu1) /wf/menu1/content1 パーマリンクページ(menu1の記事 content1) /wf/menu2/content2 パーマリンクページ(menu1の記事 content2) /wf/menu2 メニューページ(menu2) /wf/menu2?submenu_id=sub1 サブメニュー(menu2のサブメニュー sub1) /wf/menu2?submenu_id=sub2 サブメニュー(menu2のサブメニュー sub2) /wf/menu2/content3 パーマリンクページ(menu2の記事 content3) /wf/menu2/content4 パーマリンクページ(menu2の記事 content4) :
まずは最も単純なテンプレートを挙げておきます。
少し長いですが、すべてのページ・記事を網羅できるテンプレートですので、そのままスケルトンとして使えます。
この中でテンプレートの機能に関するのは、{Variable}
と {block:Block}
...{/block:Block}
のような部分です。
{Variable}
のような部分は「テンプレート変数」と呼びます。
この部分はサイトや記事に設定された動的な値に置き換えられます。
例えば {IndexPageURL}
はサイトのURLに置き換わります。
テンプレート:
出力:
{block:Block}
...{/block:Block}
のような部分は「テンプレートブロック」と呼びます。
テンプレートブロックは、データの有無・値の判定、データ構造の塊やその繰り返しを出力します。
テンプレート変数に値が入っている、もしくは真であるかどうかを判定し、内容を出力します。
テンプレート:
テンプレート変数 Title
が空の場合:
テンプレート変数 Title
に「タイトルです」が入っている場合
テンプレート変数の中には「子テンプレート変数」を持つものがあります。子テンプレート変数は、このブロック内でしか使えません。
以下のテンプレートでは、現在選択中のメニューのタイトルが表示されます。
{block:Menu}
...{/block:Menu}
の外側では {Label}
はなにも出力しません。
テンプレート変数の中には「複数の繰り返し」を持つものがあります。そのようなブロックは変数繰り返しの個数だけ繰り返し出力されます。
テンプレート:
Posts
にデータが2個ある場合の出力:
ある変数の内容が「無い・偽」の場合や繰り返しがない場合に何かを出力したい場合、「Not
, No
」接頭辞を使えます。
例えば {block:NoTitle}
...{/block:NoTitle}
ブロックは Title
が空の場合に出力されます。
また、繰り返し変数に繰返し項目が1つ以上あるかどうかには「Has
」接頭辞を使えます。
例えば {block:HasPosts}
...{/block:HasPosts}
ブロックは Posts
に1つ以上の項目がある場合に一度だけ出力されます。
テンプレート:
Posts
に何も入っていない時の出力:
Posts
に2つの項目があり、最初の項目の Title
が空の時の出力:
それでは、実際に定義されているテンプレート変数、ブロックを紹介します。
XXX
の部分は場合に応じて変化します。
変数 | 説明 |
---|---|
{IndexPageURL} | サイトURL |
{Title} | サイトタイトル |
{Description} | サイトの説明 |
{MetaDescription} | サイトの説明のプレーンテキスト |
{Favicon} | ファビコンのURL |
{MainMenuIcon} | サイトメニューアイコンのURL |
{RSS} | サイトの新着RSSのURL |
{CoverURL} | サイトのカバー画像URL : 横1280px |
{IndexPageURL} | インデックスページ(トップページ)のURL |
{Permalink} | ページのパーマリンクURL - ページの内容で変化する |
{block:Menus}..{/block:Menus} | グローバルメニューの繰返し項目ブロック グローバルメニューブロックで説明します |
{block:Menu}..{/block:Menu} | 現在選択中のメニューの構造ブロック メニューブロックで説明します |
{block:HasSubMenus}..{/block:HasSubMenus} | 現在選択中のメニューにサブメニューがあれば有効 |
{block:Submenus}..{/block:Submenus} | 現在選択中メニューのサブメニューの繰り返し項目ブロック サブメニューブロックで説明します |
{block:Posts}..{/block:Posts} | コンテンツの繰返し項目ブロック コンテンツブロックで説明します |
{block:Pagination}..{/block:Pagination} | ページング用ブロック ページング用ブロックで説明します |
{SNSShares} | 各種SNSのシェアボタンをまとめて追加する変数
システムが準備したHTMLが挿入されますので、レイアウトはCSSで行ってください |
サイトの構造に応じて内容を出し分けるブロックです。
変数 | 説明 |
---|---|
{block:IndexPage}...{/block:IndexPage} | インデックスページ(トップページ)でのみ有効 |
{block:MenuPage}...{/block:MenuPage} | メニューページ・サブメニューページでのみ有効 メニューページで説明します |
{block:PermalinkPage}...{/block:PermalinkPage} | パーマリンクページ(個別記事ページ)でのみ有効 メニューページで説明します |
{block:ContactFormPage}...{/block:ContactFormPage} | コンタクトフォームメニューページでのみ有効 コンタクトフォームページで説明します |
{block:Menus}
...{/block:Menus}
はグローバルメニューを表現するための繰り返し項目ブロックです。
このブロックでは以下の子変数を使えます。
変数 | 説明 |
---|---|
{Label} | メニュータイトル |
{Icon} | メニューアイコン |
{Path} | メニューのパス (ex: /wf/mymenu )メニューが外部リンクの場合は空白 |
{Link} | メニューが外部リンクの場合、外部リンクURL |
{block:IsContactForm}...{block:IsContactForm} | メニューがコンタクトフォームの場合に有効 |
{block:IsActive}...{block:IsActive} | 表示中のページのメニューが選択中の場合に有効 |
例: 選択中のメニューを .active とし、外部リンクは target=_blank にする。また、インデックスページを「Home」として先頭に配置。
{block:MenuPage}
...{/block:MenuPage}
はメニューページでのみ有効なブロックです。
このブロックでは以下の子変数を使えます。
変数 | 説明 |
---|---|
{Path} | 通常メニューの「設置URL」で指定したパス |
{block:PathIsXXX}...{/block:PathIsXXX} | {Path} が XXX である場合にのみ有効たとえば設置URLパスが「 examplepath 」の場合、つまり /wf/examplepath でアクセスされている場合、 {block:PathIsExamplepath} ...{/block:PathIsExamplePath} ブロックが有効になる
|
{block:HasSubmenus}...{/block:HasSubmenus} | メニューにサブメニューがある場合に有効 |
{block:IsSubmenuIndex}...{/block:IsSubmenuIndex} | サブメニューが選ばれていない場合に有効 |
メニューページでは、選択中のメニューが {block:Menu}
...{/block:Menu}
ブロックで有効になります。 {block:Menu}
...{/block:Menu}
の子変数はグローバルメニューブロックと同じです。
また、サブメニューを選択中の場合、選択中のサブメニューが {block:Submenu}
...{/block:Submenu}
ブロックで有効になります。 {block:Submenu}
...{/block:Submenu}
の子変数はサブメニューブロックとほぼ同じです。
{block:Submenus}
...{/block:Submenus}
はメニューのサブメニューを表現するための繰り返し項目ブロックです。
{block:HasSubmenus}
...{block:HasSubmenus}
ブロック内で使うのが無難です。
このブロックでは以下の子変数を使えます。
変数 | 説明 |
---|---|
{Label} | サブメニュータイトル |
{Path} | サブメニューのパス (ex: /wf/mymenu?submenu_id=xxx ) |
例: サブメニューがある場合、選択中のサブメニューを .active とし、メニューページ(サブメニュー未選択 = すべてのメニュー記事一覧)を「ALL」として先頭に配置。
{block:PermalinkPage}
...{/block:PermalinkPage}
はパーマリンクページでのみ有効なブロックです。
パーマリンクページでは以下の変数がグローバルに使えます。(PeramlinkPage で囲わなくても使えます)
変数 | 説明 |
---|---|
{PostID} | コンテンツのID |
{PostTitle} | コンテンツのタイトル |
{PostDate "format"} | コンテンツ公開日時を format でフォーマットしたものformat の書式は コンテンツブロック の {Date "format"} を参照
|
{PostSummary} | コンテンツ本文HTMLのテキスト表現 |
{PostPhotoURL} | コンテンツ本文HTMLの最初にある画像のURL 画像がない場合は無効 |
{block:PreviousPost}...{/block:PreviousPost} | ニュースフィードでの、ひとつ新しい記事 このブロックの子変数はコンテンツブロックとほぼ同じです。 |
{block:NextPost}...{/block:NextPost} | ニュースフィードでの、ひとつ古い記事 このブロックの子変数はコンテンツブロックとほぼ同じです。 |
パーマリンクページでは、記事の属するメニューが {block:Menu}
...{/block:Menu}
ブロックで有効になります。 {block:Menu}
...{/block:Menu}
の子変数はグローバルメニューブロックと同じです。
また、サブメニューが設定されている場合、 {block:Submenu}
...{/block:Submenu}
ブロックで有効になります。 {block:Submenu}
...{/block:Submenu}
の子変数はサブメニューブロックとほぼ同じです。
{block:ContactFormPage}
...{/block:ContactFormPage}
ブロックは、「コンタクトフォーム」メニューで有効になります。
一般ユーザは、コンタクトフォームからメールアドレス、問い合わせ本文を送信できます。送信されたフォームは管理ツールの「問い合わせ管理」から閲覧できます。
変数 | 説明 |
---|---|
{block:Form}...{/block:Form} | フォーム送信前、フォーム送信後エラー表示のときに有効
このタグ内には
|
{block:Success}...{/block:Success} | フォーム送信が成功したときに有効 |
例:
{block:Posts}
...{/block:Posts}
はコンテンツ(投稿)を表現するための繰り返し項目ブロックです。
{block:HasPosts}
...{block:HasPosts}
ブロック内で使うのが無難です。
Posts
に入ってくるコンテンツは、呼び出されたページによって変わります。
このブロックでは以下の子変数を使えます。
変数 | 説明 |
---|---|
{Permalink} | コンテンツのパーマリンクURL |
{PostID} | コンテンツのID |
{Title} | タイトル |
{Body} | 本文HTML |
{BodyText} | {Body} のテキスト抽出表現 |
{More} | 本文HTMLに <!-- more --> がある場合、{Body} には more 以前が、{More} には more 以降が入る
この機能はパーマリンクページでは無効です |
{MoreText} | {More} のテキスト抽出表現 |
{PhotoURL} | 本文HTMLの最初にある画像のURL 画像がない場合は無効 |
{block:UseCoverImage}...{/block:UseCoverImage} | 本文最初の画像をコンテンツのカバー画像として使う場合は有効 画像がない場合は自動的に無効 |
{Date "format"} | 公開日時を format で整形したもの
|
{block:Author}...{/block:Author} | コンテンツの署名ブロック 「コンテンツに署名する」がチェックされていると有効 コンテンツ署名ブロックで説明します |
{block:Menu}...{/block:Menu} | 記事の属するメニューの構造ブロック 子変数はグローバルメニューブロックとほぼ同じ |
{block:Submenu}...{/block:Subenu} | 記事の属するサブメニューの構造ブロック 子変数はサブメニューブロックとほぼ同じ |
{block:Author}
...{/block:Author}
はコンテンツの作成者を表し、 {block:Posts}
...{/block:Posts}
ブロック内でのみ有効です。
コンテンツで「署名を表示する」がチェックされていなければ無効です。
変数 | 説明 |
---|---|
{PostAuthorName} | コンテンツ著者の名前 |
{PostAuthorPortraitURL} | コンテンツ著者の画像URL |
{block:Pagination}
...{/block:Pagination}
ブロックを使うと、ページングを表現できます。
インデックスページには新着記事一覧、メニューページにはメニュー記事一覧、パーマリンクページには次・前の記事の情報が入ってきます。
ページングが必要ない場合は無効になります。
変数 | 説明 |
---|---|
{CurrentPage} | 現在のページ番号 |
{TotalPages} | 全ページ数 |
{FirstPage} | 最初のページのURLパラメータ 現在のページ番号が3以上のときのみ有効 {block:FirstPage} ...{/block:FirstPage} と組み合わせて使う
|
{PreviousPage} | 前ページのURLパラメータ 現在のページ番号が2以上のときのみ有効 {block:PreviousPage} ...{/block:PreviousPage} と組み合わせて使う
|
{NextPage} | 次ページのURLパラメータ 現在のページ番号が最後から2番目以下のときのみ有効 {block:NextPage} ...{/block:NextPage} と組み合わせて使う
|
{LastPage} | 最終ページのURLパラメータ 現在のページ番号が最後から3番目以下のときのみ有効 {block:LastPage} ...{/block:LastPage} と組み合わせて使う
|
{block:JumpPagination}...{/block:JumpPagination} | 現在のページ周辺に直接リンクを作りたいときに使う繰り返しブロック ジャンプページ用ブロックで説明します |
シンプルなページングの例:
{block:JumpPaginaton}
...{/block:JumpPagination}
ブロックは、現在表示中のページ周辺のページに直接ジャンプするリンク群を表現できます。
現在表示中ページの前後2ページ分の情報を繰り返します。
{block:Paginaton}
...{/block:Pagination}
内でのみ有効です。
変数 | 説明 |
---|---|
{PageNumber} | 繰り返し中のページ番号 |
{URL} | 繰り返し中のページURL |
{block:CurrentPage}...{/block:CurrentPage} | 繰り返し中のページ番号が現在のページ番号のときのみ有効 |
{block:JumpPage}...{/block:JumpPage} | 繰り返し中のページ番号が現在のページ番号でないときのみ有効 |
ジャンプページを組み合わせたページングの例:
管理ツールのサイト設定に関するテンプレート変数・ブロックです。
変数 | 説明 |
---|---|
{ColorScheme} |
サイト設定のカラーテーマ light, dark, pink, blue, green, yellow のいずれか |
{block:ColorSchemeIsXXX}...{/block:ColorSchemeIsXXX} | サイト設定のカラーテーマに対応したブロック 例えば {ColorScheme} が 'dark' の場合、{block:ColorSchemeIsDark} ...{/block:ColorSchemeIsDark} のみが有効になる
|
{FontsLoadCode} | サイト設定の「基本フォント」「タイトルフォント」で設定されたフォントを利用可能にするためのコード これらの設定を有効にするために <head> ブロック内にこのコードを入れてください
|
{FontFamily} | サイト設定の「基本フォント」で設定されたフォントに応じた font-family 定義文字列 body の font-family に指定してください |
{TitleFontFamily} | サイト設定の「タイトルフォント」で設定されたフォントに応じた font-family 定義文字列 サイトタイトルの font-family に指定してください |
{block:CoverHeightIsXXX}...{/block:CoverHeightIsXXX} | サイト設定の「カバーレイアウト」に対応
|
{block:CoverImageSizeIsXXX}...{/block:CoverImageSizeIsXXX} | サイト設定の「カバーレイアウト」に対応
|
{block:MainMenuIconSizeIsXXX}...{/block:MainMenuIconSizeIsXXX} | サイト設定の「メニューアイコン表示サイズ」に対応
|
{block:TitleLayoutIsXXX}...{/block:TitleLayoutIsXXX} | サイト設定の「タイトルレイアウト」に対応
|
{block:MenuIsXXX}...{/block:MenuIsXXX} | サイト設定の「メニューレイアウト」に対応
|
{block:ShowBrandLogo}...{/block:ShowBrandLogo} | サイト設定の「『powered by』を表示する」が有効な場合に有効 |
{CustomCSS} | サイト設定の「カスタムCSS」 |
{FreeArea1} | サイト設定の「フリーエリア(カバー画像下)」で設定されたHTML |
{FreeArea2} | サイト設定の「フリーエリア(フッター)」で設定されたHTML |
サイト設定を反映させる例:
{block:System}
...{/block:System}
は、システムに関する変数等を収めたブロックです。
変数 | 説明 |
---|---|
{block:IsAuthorized}...{/block:Authorized} | 弊社が公式認定したサイトで有効 |
{block:IsDinovc}...{/block:IsDinovc} | dino.vcで作成したサイトで有効 |
{block:IsRvlvrco}...{/block:IsRvlvrco} | revolver.jpで作成したテナントのホームページで有効 |
{block:ContentPreview}...{/block:ContentPreview} | コンテンツのプレビュー中に有効 |
{block:TemplatePreview}...{/block:TemplatePreview} | テンプレートのプレビュー中に有効 |
{STATIC_URL} | システム共通のライブラリ等のあるパス |
{PORTAL_URL} | dino.vcのURL |
システムからアップロードした画像には自動的にバリエーションが作られます。
{PhotoURL}
など画像URLを表すテンプレート変数を {block:PhotoURL}
...{/block:PhotoURL}
ブロックとして使うことで、バリエーションを明示指定できます。
子変数 | 説明 |
---|---|
{Xlarge} | 横1280pxのjpg |
{Large} | 横640pxのjpg |
{Normal} | 横320pxのjpg |
{Small} | 横160pxのjpg |
{Thumb} | 縦横90pxのjpg |
{Original} | 未加工のオリジナル画像 |
{Ogp} | OGP用(プロトコル付き絶対URL) |
JavaScript内で使う場合など、テンプレート変数のままでは使いづらいテンプレート変数を、接頭辞をつけることで加工できます。
表現 | 説明 |
---|---|
{URIEncodedVariable} | {Variable} をURI EncodeURLのパラメータに {Varable} を渡したい時に対応できる
例: <a href="http://some.site/path?url={URIEncodedPeramlink}"></a> |
{PlainTextVariable} | {Variable} からHTMLタグを除去したテキスト表現
|
{JSVariable} | {Variable} のエスケープ済みJavascript文字列{Variable} に「"」が入っている場合に対応できる
例: var title = {JSTitle}; |
{JSPlaintextVariable} | PlainText と JS の組み合わせ
例: var body_text = {JSPlainTextBody}; |
部分的ですが、国際化に対応しています。
この部分の仕様は大幅に変わる可能性があります
{lang:string}
は閲覧者の環境で表示言語の変わる固定文字列です。
よく使う用語に対応しています。
現時点で string
に対応している文言は以下です。
この部分のドキュメントは準備中です
時期 | 内容 |
---|---|
2014-08-09 | MenuIsTop追加 |
2014-08-09 | CoverImageSizeIsContain削除、CoverImageSizeIsShrink追加 |
2014-07-25 | メニューアイコン表示サイズ追加 |
2014-07-21 | メニューアイコン追加 |
2014-07-17 | タイトルレイアウト、ニュースフィードレイアウト周り追加・変更 |
2014-07-03 | 初版 |