ウェブページのdescriptionをMTPageExcerptで

Movable Type 4.1のテンプレートで、ウェブページにおいて、概要の記述のないページについては meta description= を出力させないようにしてみました

MTPageExcerptについて

MTのウェブページで、meta要素のdescriptionのcontent属性の値を自動で出力するひとつの方法として、MTPageExcerpt(以下「PageExcerpt」と表記します)という、テンプレートタグを用いる方法があります。

参考:

ウェブページにおいては以下のような、metaタグを記述するようです。

<meta name="description" content="<$MTPageExcerpt remove_html="1"$>" />

参考:

PageExcerptの仕様

さて、 PageExcerpt の仕様ですが、概要記述(記事作成画面の「概要」のフィールドに書かれた内容のこと)がない場合に、ウェブページの先頭からブログ記事の設定で概要の文字数指定をした分だけを出力するという、 つまり、 MTEntryExcerpt と同じ動作ということになります。

このサイトでのウェブページの一覧から、詳細設定表示にしたときのキャプチャを示します

例として、以下の2つのページをみていくとします

なんかへたくそな英語がでてきましたけど、Testpageでの概要は、TestPageに書いてある内容となっており、SiteMapでは概要を手入力にておこなっています。

2つのページのソースでhead要素の内容をみていただいたらわかるかとおもうんですが、SiteMapではmeta description=・・・があり、TestPageではmetaタグがでないようになっています。

ところで、PageExcerptの仕様ですとMTIfNonEmptyによる条件分岐では、内容の有無で条件判断できないようであります。

参考:

EntryExcerptでの動作についての質問ではありますが、PageExcerptでも同様にして、IfNonEmptyではタグの中身があることとなっています。。

そこで、一旦変数に概要をいれることで判断をおこなうことにしました。

概要記述の有無で条件分岐(?)

あっているかどうか不明ですけど、このような形で条件分岐させてみました。

先ず変数に概要をいれる

ここでは、pageExcerptという変数にウェブページの概要をいれることにします。

#ネーミングのセンスがないというのはおいといて (汗;

ウェブページアーカイブテンプレートのMTSetVarタグ群の箇所に以下のコードを。

<MTSetVarBlock name="pageExcerpt"><$MTPageExcerpt no_generate="1"$></MTSetVarBlock>

remove_htmlがないのは、手入力の概要にHTMLタグを書く場合が少ないことからです。

次に変数html_headにmetaタグ

ウェブページアーカイブテンプレートから、<MTSetVarBlock name="html_head">を探して、タグ内に追記します

<MTSetVarBlock name="html_head">
<MTIf name="pageExcerpt">
<meta name="description" content="<$MTGetVar name="pageExcerpt">" />
</MTIf>
    :    :    :
</MTSetVarBlock>

ウェブページアーカイブのみリビルドして、概要のないページでmeta desciption=が出ていなければ成功です。