イントロダクション
Blogger のフッターのレイアウトは、テンプレートデザイナーによって、1段組み・2段組み・3段組みを選択できます。フッターのレイアウト |
このフッターのレイアウトを設定したブログをブラウザで見てみると、次のようになります。
フッターの表示結果 |
フッターとして、人気の投稿とブログアーカイブで 2 段組みになっていることがわかります。
このフッターの段組みがどのようなテンプレートの HTML で実現されているのか気になったため、調査してみました。
テンプレートの HTML を調査
Blogger のテンプレートの HTML より、フッターのレイアウトを形作っている箇所を抜き出しました。<macro:includable id='sections' var='col'> <macro:if cond='data:col.num == 0'> <macro:else/> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-1"' preferred='yes' showaddelement='yes'/> <macro:if cond='data:col.num >= 2'> <table border='0' cellpadding='0' cellspacing='0' mexpr:class='"section-columns columns-" + data:col.num'> <tbody> <tr> <td class='first columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-1"'/> </td> <td class='columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-2"'/> </td> <macro:if cond='data:col.num >= 3'> <td class='columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-3"'/> </td> </macro:if> <macro:if cond='data:col.num >= 4'> <td class='columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-4"'/> </td> </macro:if> </tr> </tbody> </table> <macro:if cond='data:col.includeBottom'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-3"' showaddelement='no'/> </macro:if> </macro:if> </macro:if> </macro:includable> <!-- 省略 --> <b:section-contents id='footer-2-1'> <b:widget id='PopularPosts1' locked='false' title='人気の投稿' type='PopularPosts'> <!-- 省略 --> </b:widget> </b:section-contents><b:section-contents id='footer-2-2'> <b:widget id='BlogArchive1' locked='false' title='ブログ アーカイブ' type='BlogArchive'> <!-- 省略 --> </b:widget> </b:section-contents>
フッターのレイアウトを形作っているコードは大きく分けて、次の 2 つに分けられます。
1.フッターのレイアウト(表)を形作っている HTML
フッターのレイアウトを形作っている HTML は上記に示した HTML の前半部分です。
<macro:includable id='sections' var='col'> <macro:if cond='data:col.num == 0'> <macro:else/> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-1"' preferred='yes' showaddelement='yes'/> <macro:if cond='data:col.num >= 2'> <table border='0' cellpadding='0' cellspacing='0' mexpr:class='"section-columns columns-" + data:col.num'> <tbody> <tr> <td class='first columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-1"'/> </td> <td class='columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-2"'/> </td> <macro:if cond='data:col.num >= 3'> <td class='columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-3"'/> </td> </macro:if> <macro:if cond='data:col.num >= 4'> <td class='columns-cell'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-4"'/> </td> </macro:if> </tr> </tbody> </table> <macro:if cond='data:col.includeBottom'> <b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-3"' showaddelement='no'/> </macro:if> </macro:if> </macro:if> </macro:includable>
どのように段組みを作っているのかといったら、table, tbody, tr, td タグを使用して段組みを作っていました。いわゆる表ですね。
data:col.num という変数は、おそらく Blogger のテンプレートのカスタマイズで設定した、段組みの段数でしょう。
(公式のデータ一覧を見ても載っていないデータなので推測です。)
段組みが 0 の場合には、この表は出力されません。
段数が 3 段の場合には、
<macro:if cond='data:col.num >= 3'>
の部分の判定式が真になるため、3段目の段が表示される仕組みです。
(data:col.num >= 3 はエスケープされているためわかりづらいですが、data:col.num >= 3 です。)
段数が 4 段の場合も 3 段の場合と同じ仕組みが適用されます。
(テンプレートデザイナーでは、3 段までの段組みしか用意されていないのに、4 段目を表示する仕組みがテンプレートの HTML に組み込まれているというのは面白いですね。)
表のセルに表示するウィジットは、
<b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-1"'/>
の mexpr:id に対応するものが表示されます。(例えば、data:col.idPrefix + "-2-1" は footer-2-1 となります。)
そのウィジットの実体を定義しているのが、最初に示した HTML の後半部分です。
2.フッターのレイアウトに配置するウィジットを形作っている HTML
フッターのレイアウトに配置するウィジットを定義しているのが、最初に示した HTML の後半部分である以下の部分です。<b:section-contents id='footer-2-1'> <b:widget id='PopularPosts1' locked='false' title='人気の投稿' type='PopularPosts'> <!-- 省略 --> </b:widget> </b:section-contents><b:section-contents id='footer-2-2'> <b:widget id='BlogArchive1' locked='false' title='ブログ アーカイブ' type='BlogArchive'> <!-- 省略 --> </b:widget> </b:section-contents>
1.で示した表のセルの部分には、そこに記載されている
<b:section mexpr:class='data:col.class' mexpr:id='data:col.idPrefix + "-2-1"'/>
の mexpr:id に対応する b:section-contents の id のウィジットが配置されます。
<b:section-contents id='footer-2-1'>
この例では、footer-2-1 には人気の投稿ウィジットが定義されているため、表のセルの 1 番目には、人気の投稿ウィジットが配置されます。
こうしてテンプレートの HTML を見てみると、フッターの段組みの仕組みが良くわかります。
まとめ
フッターのレイアウトの HTML は、表のレイアウトを定義する部分と、配置するウィジットで別々に定義されています。表のセルに配置するウィジットをまとめた b:section-contents の id と、セルに記載された b:section の mexpr:id の一致を見ることで、どのウィジットが、どの段組みに配置されるのか HTML から見ることができます。
しかしながら、通常段組みを編集するのは HTML を直接弄る必要はありません。
テンプレートデザイナーの設定やテンプレートのカスタマイズで対処できます。
通常の設定では対処できない、複雑なことをやろうとした場合にはテンプレートの HTML を編集する必要が出てきます。
(テンプレートの HTML を直接修正するのは、元に戻せなくなる危険性が伴うので、事前にテンプレートの HTML をバックアップし、十分に注意して編集する必要があります。)
コメントを投稿 (ここをクリックしてコメント投稿フォームを表示)
コメント投稿機能について