Movable Type 4.2:カテゴリー名にタグを入れると、Atomで出力エラーがおきる

1月 16, 2009 in MT4.2


livedoor Reader

Movable Type 3.3から、Movable Type 4.1にアップグレードして以降、atom.xmlが読めなくなり、更新が11ヶ月止まっていた(恥)

昨年春頃、ブログをRSSで読まれている方から、「atom.xmlが読めません」と、ご指摘があった。特にその時は何をしたというわけでもないので、どうやらMT3.3から、MT4.1にアップグレードしてから、読めなくなったようだ。
ということで、あれこれ修正を試みたのだが、atom.xmlをオリジナルに戻しても駄目で、原因がさっぱりわからず、index.xmlを購読していただくように、問い合わせのあった方には個別に返答をしていた。
かように、あきらめモードでいたのだが、年末にlivedoor Readerでatom.xmlを購読されている方から、「登録の購読者数が多いので、もったいないな~ 」と、ご指摘があり、実際にlivedoor Readerを確認すると、購読者数が195件もある上に、表示画面が11ヶ月前で止まっており、これはいけないと、真剣に対策に取り組むことにした。
同じ現象で悩んでいる方もいるかもしれないので、以下に、原因と対策を記載したい。


■エラーの原因

Internet Exploreのエラー表示を確認して、ようやく、これが原因らしいということがわかった。
#エラーはきちんと読みましょう(恥)

文字 '< ' は、属性値内に使用できません。リソース 'http://www.dakiny.com/atom.xml' の実行エラーです。ライン 25、位置 25 

該当するソースを確認すると

<category term="<![CDATA[<010>Movable Type]]>" scheme="http://www.sixapart.com/ns/types#category" /&g...

atom.xmlが読めなかったのは、カテゴリー名の前に入れた<001>等のタグが原因だった。MT3.3までは問題が起きていなかっただけに、原因がわからなかったのだ。

■修正前の状態

カテゴリーの編集

Movable Typeでは、標準機能では、カテゴリーの順番を決めることができない。

そこで、カテゴリー名に<010>とか順番を入れてあげて、順位を表示していたのだが、MT3.3までは問題がおこらなかった、このハックも、MT4.1(おそらくMT4.0以降)にアップグレードした時点で、Atomの出力で問題が出たのだな。MT3.3以前では問題がなかったので、まったく気づかなかった。
ついでに言えば、MT3.17から、このブログを利用しており、名前に<010>等の数字を入れて表示順を決めていた関係で、「カテゴリーの説明」 をカテゴリー名表示にしていた。
MT3.3以前は、テンプレート以外の管理画面にHTMLタグを入れていても問題は生じなかったのだ。

◇ソース

<!-- カテゴリー -->
<MTIfArchiveTypeEnabled archive_type="Category">

<h2>Categories</h2>

<div class="em2">
<MTTopLevelCategories sort_method="SortCatFld::Sort">

<MTSubCatIsFirst>
<ul>
</MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryDescription$>"><MTCategoryLabel> (<$MTCategoryCount$>)</a>
<MTElse>
<li><MTCategoryDescription>
</MTElse> </MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast>
</ul>
</MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</MTIfArchiveTypeEnabled>

■修正後の状態

カテゴリーの編集

ひとまず、表示順は無視して、atom.xmlの出力を試みる。

<010>等のタグで挟んだ数字をすべて削除して、「カテゴリーの説明」も別の用途で利用したいので、出力表示も「カテゴリーの名前」が表示されるように修正した。

◇ソース

<!-- カテゴリー -->
<MTIfArchiveTypeEnabled archive_type="Category">

<h2>Categories</h2>

<div class="em2">
<MTTopLevelCategories sort_method="SortCatFld::Sort">

<MTSubCatIsFirst>
<ul>
</MTSubCatIsFirst>
<MTIfNonZero tag="MTCategoryCount">
<li><a href="<$MTCategoryArchiveLink$>" title="<$MTCategoryLabel$>"><MTCategoryLabel> (<$MTCategoryCount$>)</a>
<MTElse>
<li><MTCategoryLabel>
</MTElse> </MTIfNonZero>
<MTSubCatsRecurse>
</li>
<MTSubCatIsLast>
</ul>
</MTSubCatIsLast>
</MTTopLevelCategories>
</div>
</MTIfArchiveTypeEnabled>

 と修正した後、オリジナルのMovable Type 4.23から atom.xmlをコピー&ペーストし、再構築して、完了。
※壊れたままのatom.xmlを再構築しても、エラーが出ることに変わらないので、オリジナルのatom.xmlに入れ替えること

■表示結果

http://www.dakiny.com/atom.xmlの表示を確認してみた。

IE7のRSSリーダー

Internet Explorer 7の表示

順序が異なるのは、更新日で取得しているからのようだ。

FirefoxのRSSリーダー

Firefox 3.0.5の表示

問題なく表示できるようだ。

livedoor Reader

livedoor Readerの表示

11ヶ月ぶりに更新されました(恥)

atom.xmlを購読されていた方々、今まで。長らく放置しておいて、ほんとうにごめんなさい。

■備考

推測にすぎないのだが、MT3.3以前を使っていた方は、あたりまえのように、テンプレート以外の管理画面にタグを入れていた。
上記の手法はあくまでもハックであり、正しい手法ではない。MT4で、Atomで出力が得られないとしたら、上記の設定を疑ってみてもいいかもしれない。

参考になれば幸い。

Facebookフィード購読のおすすめ

僕はFacebookのウォールでブログ記事に書いた以外にも、ソーシャルメディアや、Web制作に関する情報、ライフハック情報などをつぶやいてます。フィード購読を希望の方は、下記の「フィード購読」をクリックするか、Facebookの蒲生 トシヒロのページからお願いします。

ブログの最新投稿はFacebookページ「Hoppos.JP」を購読すれば、あなたのウォールにお知らせが届きます。ブログ記事以外にも、Web制作、ソーシャルメディアに役立つ情報を1日2~3通程度流してます。よろしければ「いいね!」をクリックして購読してください。