Monday, January 29, 2007

|Blogger|template| ページタイプによる Widget 操作の注意点

フィードウィジェットは他ブログサービスなどでは見掛けない,特徴的な機能の一つと思います.
【”最新のコメント”を追加する方法】 などを見ても面白い使い方ができそう.

 しかしながら,テンプレ編集(Expand 表示)で Blogger 独自のタグ群を見つめているとき,ウィジェットタグ<b:widget>...</b:widget>内で特異な ID 指定がされていることに気づきます.
 つまり,ブログの動的HTML生成時にウィジェット部分の (x)HTML を吐き出したあと, JavaScript でその ID のコンテンツの書き換えを行っているということでしょうか?


だから何なの・・・?


ウィジェットを記事単独ページで非表示にするために,
<b:includable id='main'>
<b:if cond='data:blog.pageType != "item"'>

 <!-- コンテンツ -->

</b:if>
</b:includable>

とする手法がありますが,これだと<ul/>タグに指定されている ID をページ構成時に消してしまいます.

これは不味い


この ID が削除されたことは,Blogger の方は知りません.従って,単独ページの構成時に Blogger の JavaScript が存在しない ID を参照してしまい JavaScript エラーが発生します.

 他の大部分のウィジェットでは,あまりウィジェットタグ内で ID 指定などされていないようですが,フィードウィジェットに関しては非表示にした場合,ID 参照エラーが起こり,その時点で Script がストップしてしまいます.
従って,記事単独ページにおいて Script がストップしてしまい,同様の JavaScript で実現されるバックリンクが表示されない,というの現象があります.


じゃあ,どうすればいいの


  • 特定のページで非表示にしない
  • 非表示にしたい場合は以下のようにする

    <b:includable id='main'>
    <b:if cond='data:blog.pageType != "item"'>
    <h2><data:title/></h2>
    </b:if>
    <div class='widget-content'>
    <ul expr:id='data:widget.instanceId + "_feedItemListDisplay"'>

    <b:if cond='data:blog.pageType != "item"'>
    <!-- ループ -->
    </b:if>
    </ul>
    <b:include name='quickedit'/>
    </div>
    </b:includable>
    青字: ID 指定の部分. コンテンツのラッパ部分は残す.
    タイトルとアイテムのみ除去



なんか面倒ねー・・・


これは,Blogger のバグだと考えられます. そもそも Blogger ブログは CSS エラーも多い!
Blogger ヘルプのレイアウト用ウィジェット要素タグ欄を見ると,<b:widget/>タグにはページタイプによる表示/非表示を指定する属性が定義されている模様(typePage).
但し,現在実装されていません.(at 2007/01/29.)

恐らく,将来的にはページエレメントの編集画面などで,正式にページの種類による表示非表示の指定ができるようになると思います.
・・・そうなることを待ちましょう.

2 comments:

Kamimura said...

Jyun.さん、どもでーす。

 なるほど、よく判りました(きちんと理解できていないかも知れませんが、それは私の理解力の所為です(笑))。

><b:widget/>タグにはページタイプによる表示/非表示を指定する属性が…将来的にはページエレメントの編集画面など…

 ふむふむ。
 なるほど、そうだったのですか。
 ドラッグ&ドロップのページエレメント編集画面で、各エレメントごとに表示するページを指定できるようになる可能性があるという事ですね~。
 そうでしょうね。
 if文を使う方法は過渡的なものになりそうですね。

 判りやすく解説して下さり、有難うございました。
 理屈を理解していると、テンプレートをいじる自由度が広がりますね。
 ではでは、今後とも宜しくお願いしまーす。
 

Jan 30, 2007, 3:38:00 PM
Jyun. said...

恐らく,きちんと理解できないのは,僕の所為です.

説明ベタですいません…. ホンマに.

>各エレメントごとに表示するページを指定できるようになる可能性がある
そうですね,あんまり適当なこと言える立場でもないので,可能性があるかも程度で,考えています,自分は.
でも,早くそうなるといいですねー.
英語自信無いのでバグ報告も要望もできません・・・小心者デス.

Feb 1, 2007, 5:09:00 AM

Link Code for this post:

Template Design. 2008 Jyun.