ちなみに当ブログでは、SimpleIIテンプレートを使っている。
例によって、Google Chromeで日付の付近の「要素の検証」をしてみる。と、date-haederというクラス名が見つかる。
テンプレートのHTMLの中からそれを探し出すと、以下のあたりになる。レイアウトなどによって構造が変わるので、ポイントのみ抜粋。
<div id='outer-wrapper'> <b:section class='main' id='main' showaddelement='yes'> <b:widget id='Blog1' locked='true' title='ブログの投稿' type='Blog'> <b:includable id='main' var='top'> : : : <b:loop values='data:posts' var='post'> <b:if cond='data:post.dateHeader'> <h2 class='date-header'><data:post.dateHeader/></h2> </b:if> : : :b:loopで記事数分繰り返し、b:ifで何かの条件判断をしていて、<data:post.dateHeader/>が日付の実体だろうということは想像できる。
条件が「1記事目だったら」という意味なら、if文を消してしまえば解決するはず。
<!-- <b:if cond='data:post.dateHeader'> --> <h2 class='date-header'><data:post.dateHeader/></h2> <!-- </b:if> -->ところが、変化なし。
困ったときは先生に尋ねる。……と、すでに解決しているページがヒットした。「某氏の猫空」では2つの解決方法が紹介されている。
これによると、2つ目以降の記事では日付データ自体が返らないらしい。本当かどうか確認してみた。
<!-- <b:if cond='data:post.dateHeader'> --> <h2 class='date-header'>主君の<data:post.dateHeader/>太陽</h2> <!-- </b:if> -->変化が無いのではなく、そもそも日付データが返ってないのが判る。
件のサイトに倣うと、無事すべての記事に日付が表示された。
それだけでは芸がないので、少し機能を追加しておく。
日付が年月日のみなので、記事の中で、週末、週明けなどの表現が使いづらかった。曜日が表示される設定もあるが、フォーマットが気に食わない。
JavaScriptには、日付から曜日を得る機能があるので、それで表示させてみる。曜日なので、土日には色も着ける。
件のサイトの例では、冗長と思われる部分があったので、表示はすべてスクリプトで行うなど整理した。機能は増えたが、行数は少し減っている。以下のスクリプトを、上記でいじっている3行と、そっくり置き換える。
ちなみにこのスクリプトを使うには、日付フォーマットは「yyyy/mm/dd」の形式に設定しておく。
<b:if cond='data:post.dateHeader'> <script type='text/javascript'> var dateHeaderTemp = "<data:post.dateHeader/>"; </script> </b:if> <h2 class='date-header'> <script type='text/javascript'> var wNam = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]; var wNum = new Date(dateHeaderTemp).getDay(); var wCol = ["red","black","black","black","black","black","blue"]; document.write(dateHeaderTemp+"<span style='color:"+wCol[wNum]+";'> "+wNam[wNum]+"</span>"); </script> </h2>色付き曜日が表示できるなら、祝祭日も認識させたい。
独自に判定関数を作ることもできるが面倒くさい。法律が変わる毎にメンテナンスも要る。
餅は餅屋に任せて、そこからデータを貰いたい。調べると、Googleカレンダーあたりがよさそう。祝日の名前なども得られ、JSONPで貰い受けることができる。ユーザも多いので、間違いも少ないことが期待できる。
……が、まだ完成せず。
非同期の読み込み(?)の対策に手間取ったが、ローカルで動作させるまではできた。ところが、テンプレートに埋め込んでみると動かない。
今後の宿題とし、ここではちょっと飾り付けをすることで、お茶を濁しておく。
<b:if cond='data:post.dateHeader'> <script type='text/javascript'> var dateHeaderTemp = "<data:post.dateHeader/>"; </script> </b:if> <h2 class='date-header'> <script type='text/javascript'> var wNam = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]; var wNum = new Date(dateHeaderTemp).getDay(); var wCol = ["ffe0d0","d0e0d0","d0e0d0","d0e0d0","d0e0d0","d0e0d0","d0e0ff"]; var wSty1 = "<div style='position:relative; text-align:right; width:8.5em;'>" + "<span style='font-weight:normal; font-family:impact,fantasy; font-size:220%; color:#"; var wSty2 = ";'>__ "; var wSty3 = "</span>"; var dSty = "<div style='position:absolute; left:0px; top:0.5em;'>"; var sDiv = "</div>"; document.write(wSty1+wCol[wNum]+wSty2+wNam[wNum]+wSty3 + dSty+dateHeaderTemp+sDiv+sDiv); </script> </h2>後者が現在の表示になる。
飾るついでに、最優先フォントにメイリオ(Meiryo)を追加しておいた。ぬるぬるして見易い。
WinXPのサポートが終わったこともあり、後継WinVista以降のフォントでも問題ない、という意味もある。他のOSついてはよく知らない。
headタグ内のb:skinタグを開くと、Variableというタグがいくつかある。そのうちのname="bodyfont"を含むタグの、valueにフォント名を追加する。スペースを含むフォント名も、そのまま書いてよいらしい。
SimpleIIテンプレートでは、¥が\になり、三点リーダが3連ピリオド様になってしまう。
三点リーダ対策にSimpleテンプレートのフォントを追加、¥記号対策にMS系のフォントを追加、さらに今回メイリオを追加、と節操ない状態になっている。
<Variable name="bodyfont" description="Text Font" type="font" default="normal normal 100% Georgia,Serif;" value="normal normal 98% Meiryo, MS UI Gothic, MS Pゴシック, MS ゴシック, Arial, Tahoma, Helvetica, FreeSans, sans-serif, Verdana, sans-serif">
0 件のコメント:
コメントを投稿
.