2012年8月8日水曜日

[Blogger] テンプレート中で現在表示されているページのタイプを判別する。

Blogger のテンプレートカスタマイズではページのタイプ毎に表示したり非表示にしたりというコントロールをすることが多いので、現在表示しているページのタイプを取得する方法を確認しておく。

ページタイプの取得は、data:blog.pageType で取得できる。
Blogger のヘルプ によると取得できる値は以下の3つ。
  • item   --- 個別の記事
  • archive --- アーカイブページ
  • index   --- インデックスぺージ
の三種類。

早速やってみよう。


まずはテンプレートの編集。ウィジェットの中に書き込むので、 「レイアウト > HTML の編集」で開く「レイアウト > HTML の編集」画面で 「ウィジェットのテンプレートを展開」にチェックを入れる。
するとウィジェットの中身も展開されるので表示されているテンプレートもぐわっと長くなる。

今回は記事のタイプを、各記事が表示される部分の上に表示しようと思うので、
main セクションの Blog1 ウィジェットの中に記述する。具体的には、
<b:section class='main' id='main' showaddelement='no'>
というセクションの中の
<b:widget id='Blog1' locked='true' title='ブログの投稿' type='Blog'>
の中に記述することになる。

その長いウィジェットの中のどこが良いかということになるのだが、
<b:include data='top' name='status-message'/>
の直下あたりが良いらしい。

この status-message は、 モバイル用のメインの
<b:includable id='mobile-main' var='top'>
の中と、モバイル以外用のメインの
<b:includable id='main' var='top'>
の中にあるので必要な方(もしくは両方)に記述すればいい。
今回は、普通(非モバイル)で表示できればいいので 「id='main'」のほうに書く。



記述する内容。
今回は、if 文の使い方の練習も兼ねて、pegeType 値とそれに応じた文字を表示するようにする。

**** ページのタイプはこれだ ****<br/>
<data:blog.pageType/><br/>
<b:if cond='data:blog.pageType == "index"'>インデックス
<b:else />
  <b:if cond='data:blog.pageType == "archive"'>アーカイブ
  <b:else />
    <b:if cond='data:blog.pageType == "item"'>アイテム
    <b:else />不明なページタイプ
    </b:if>
  </b:if>
</b:if>
<br/><br/><br/>

プレビューでそれっぽくなっていることを確認して、「テンプレートを保存」。



さて、表示してみよう。
トップページ:
**** ページのタイプはこれだ ****
index
インデックス 
トップページはインデックスページなのか。

個別記事ページ:
**** ページのタイプはこれだ ****
item
アイテム 

アーカイブページ:
**** ページのタイプはこれだ ****
archive
アーカイブ 

ラベルページ:
**** ページのタイプはこれだ ****
index
インデックス 
ラベルの記事一覧ページは「インデックス」ページなのか。 トップページと同じタイプになっている。

静的ページ:
**** ページのタイプはこれだ ****
static_page
不明なページタイプ 
こんな値が返るなんてどこにもかいてなかったじゃん。

実験結果。 data:blog.pageType で取得できる値は以下の4つだった。
  • item    --- 個別の記事
  • archive   --- アーカイブページ
  • index    --- インデックスぺージ
  • static_page --- 静的ページのぺージ




0 件のコメント:

コメントを投稿