EntryAuthorLinkタグでAuthorのURLの有無で分岐する

MTEntryAuthorLinkは、ブログ記事作成者に対しリンクを付加するものです。このタグでリンクが付かなかった場合の分岐をやってみます。あとmicroformatsを少々カスタマイズします。

Vicunaテンプレートのカスタマイズを中心にやっているのですが、たまにはデフォルトのテンプレートをカスタマイズしてみることにします。

MTEntryAuthorLinkの説明は以下のページに記載されています。

さて、Movable typeデフォルトテンプレートのエントリアーカイブには、microfomatsが埋め込まれており、Operator(Firefoxアドオン)などを使うことで情報を抽出できるようになっています。

しかしながら、OperatorでMovable Typeのテンプレートで生成されたページをみますと、hcardの連絡先の部分でInvalidになっているのをよく見かけます。

これをOperatorでおこられないようにしてみよう、というわけです。

Invalidの原因と対処

OperatorでInvalidとなる原因ですが、早い話が仕様に則してない書き方をされてる、ということになります。

最も簡単な解決方法は、記事を作成できる権限のあるユーザにプロフィールでURLを設定してもらえば、Invalidとはなりません。それは、EntryAuthorLinkshow_hcard="1"の指定によるものです。例えば、MTUserさんが、user.example.orgで設定された場合の実際のテンプレートタグの出力は、

<span class="vcard author">
<a class="fn url" href="http://mtuser.example.org">MT User</a>
</span>

となっています。これが、URLおよびEmailを設定されていませんと、リンクとおよびclass属性のfn urlが表示されませんからOperatorでInvalidとなるようです。

分岐によりURLがないときvcardをつけないようにする

ということで、作成者のURLがないとき、vcardは使わない、というように分岐してみることにしました。デフォルトテンプレートを以下のように書き換えてみます。

<mt:If tag="EntryAuthorDisplayName">
<mt:SetVarBlock name="Autr">
<$mt:EntryAuthorLink show_hcard="1"$>
</mt:SetVarBlock>
 By <mt:If name="Autr" like="href="><span class="vcard author"><mt:Else><span class="author"></mt:If><$mt:Var name="Autr" /></span> on <abbr class="published" title="<$mt:EntryDate format_name="iso8601"$>"><$mt:EntryDate format="%x %X"$></abbr>
<mt:Else>
・・・・以下略・・・・

ここではAutrという変数名にEntryAuthorLinkの内容を与え、href属性があるかで判断しております。リンクがないと、vcardが付かないので、Operatorでは抽出されなくなります。細かくて伝わらないと思いますけど、複数記事作成者がいて、URLの登録を統一できないようなときなどに。

ちょっと小技で改造する

一寸だけ改造をしてみます。テンプレートを見ると、<mt:If tag="EntryAuthorDisplayName">とあることから、表示名はニックネームだろうと、決め付けてしまうならば、オプションのnicknameをつけて以下のようにしてみるとか。

<$mt:EntryAuthorLink show_hcard="1" regex_replace="/fn url/","fn nickname url"$>

あと思いつたのは、hAtom関連で、updated情報もというときに。

<abbr class="updated" title="<$mt:Date format_name="iso8601"$>">Update: <$mt:Date format="%x %X"$></abbr>

といった感じです。最後に、show_hcardの情報はMovableType.orgの以下を参考にしました。