2009年1月26日星期一

Blogger 布局的 pageType

新年新气象,于是我开始折腾起来新的 Blogger 布局(这玩意儿早就不新了,只是我刚开始接触而已)。
初次看到布局的代码时先是一阵头痛——太复杂了。不过经过这一天的观察,现在看起来这些代码其实比 <$BloggerCode$> 这类模板代码强大太多了。就单单是之前我弄的那个 flash 复制评论者按钮这个应用来看,布局代码的优势就是很大的;在模板中仅仅是从 HTML 代码里解析出用户名就需要一整段 js——而布局代码直接给出了这些,一个 <data:comment.author /> 片段就好。

在实际使用时也遇到了一个问题,即在模板中提供的 <MainPage> </MainPage> 这个标记的替代品。
通常文章页的侧边栏不需要太多的 widgets,而在 Blogger Help 中有提及到 <b:widget> 标记可使用的 pageType 属性(index, archive, item),但实际应用中,使用了这个属性后,widget 并不会如愿只显示在指定页面;而 blogger 还会自作主张地清除你添加的这个属性。
要做到这个效果,你需要选中“扩展窗口小部件模板”,在要设置的 <b:widget> 标记下找到 <b:includable> 标记,如:

<b:widget id='Profile1' locked='false' title='我的简介' type='Profile'>
<b:includable id='main'>
<b:includable id='main'> 之下加上需要的属性即可,如

<b:if cond='data:blog.pageType == &quot;index&quot;'>
当然,你需要在最后的 </b:includable> 之前添加 </b:if> 来把标记封闭。这样,“我的简介” widget 就只在 index(首页)显示了。

不过,这毕竟是个 trick,不是所有的 widget 都可以这样控制所显示在的页面。
在我的试验中,“供稿”widget 就不可以用这段代码——这样做你虽然可以控制“供稿”widget 的显示,但同时“反向链接(Backlinks)”组件会遇到问题而无法显示。这大概是因为 <b:if> 标记在 blogger 最后的解析过程中屏蔽掉了一些关键代码所致的吧。