Movable Typeの最近のブログ記事

Movable Type で記事を投稿した際に、エントリーのタイトルとパーマリンクのTinyURLをTwitterへ自動的に投稿するプラグイン「PostToTwitter」を使っていましたが、

「Open MagicVox.net」 で、「エントリーのタイトルとURLをTwitterへポストするのを支援するMovableTypeプラグイン:TwitterSupport」という記事が公開されていたので、試してみました。

エントリーを投稿してから間違(複数ブログで運用しているサイトなので、本来投稿したいブログとは異なるブログに投稿したり)いに気づいたりして、慌てることが少なくないので、ワンクリック動作が増えますが、現在はこのプラグインを利用しています。

MovableType の検索結果テンプレートはわりあいあっさりしていて、Google のような検索結果のハイライト表示ができません。そこで、プラグインの登場です。

「Open MagicVox.net」で公開された、「検索キーワード付近を抜き出して表示するMovableTypeプラグイン:SearchStringHighlight」の出番です。

MovableType の可能性って本当にすごい。もちろんプラグイン作者の皆さんのおかげです。感謝、感謝。

検索結果テンプレートもしくは代替の検索結果テンプレート(MT/search_templates/altsearch.tmpl)からインクルードしている、ブログ記事の概要テンプレート20行目あたり、

<div class="asset-body">
        <$mt:EntryBody$>
</div>

を、

<div class="asset-body">
        <$mt:SearchStringHighlight$>
</div>
<$mt:SearchStringHighlight length="20" words="40" tag="strong"$>

というように、オプション指定もできます。

とすればよいのですが、ブログ記事の概要テンプレートには手を加えず、書き換えたものを、検索結果テンプレートからインクルードしている部分に丸ごと上書きしたほうが吉でしょう。

MovableType4からは、年別アーカイブがプラグイン無しで作成できますが、月毎にヘッダーをつけるにはどうすればよいか?

デザインユニット「linker」のwebsiteにピッタリの記事が出ていましたので早速採用しました。

実際のコードは次の通りです。

<mt:IfArchiveType archive_type="Yearly">
<div class="section">
<mt:SetVar name="match" value="1">
<mt:Entries sort_order="ascend">
<mt:SetVarBlock name="thisMonth"><mt:EntryDate format="%b"></mt:SetVarBlock>
<mt:If name="match" eq="1">
<h3><mt:GetVar name="thisMonth">月</h3>
<div class="asset-content">
</mt:If>
<dl class="archive_list">
<$mt:Include module="ブログ記事の概要"$>
</dl>
<mt:EntryNext><mt:SetVarBlock name="entryMonth"><mt:EntryDate format="%m"></mt:SetVarBlock></mtEntryNext>
<mt:If name="entryMonth" ne="$thisMonth">
</div>
<mt:SetVar name="match" value="1">
<mt:Else>
<mt:SetVar name="match" value="0">
</mt:If>  
<mt:EntriesFooter>
<mt:If name="match" eq="0">
</div>
</mt:If>
</mt:EntriesFooter>
</mt:Entries>
</div>
</mt:IfArchiveType>

検索テンプレートは&とかが、&amp;と実体参照されていないので、Validになりません。が、どうしてもValidにしたい場合の、あまり役立たないTipsです。

【2009-11-28 追記】
保存していたつもりが、途中で切れていました。

mt/lib/MT/Template/ContextHandlers.pmとmt/lib/MT/Template/Context/Search.pmを書き換えます。

ContextHandlers.pmは、19977行目

if ( $link ) {
	if ( index($link, '?') > 0 ) {
		$link .= '&';
	}

if ( $link ) {
	if ( index($link, '?') > 0 ) {
		$link .= '&amp;';
	}

19984行目

$link .= "limit=$limit";
$link .= "&offset=$offset" if $offset;
return $link;

を、

$link .= "limit=$limit";
$link .= "&amp;offset=$offset" if $offset;
return $link;

に変更。

Search.pmは、387行目

if ( my $include_blogs = $ctx->stash('include_blogs') ) {
	$link .= "&IncludeBlogs=$include_blogs";
}

if ( my $include_blogs = $ctx->stash('include_blogs') ) {
	$link .= "&amp;IncludeBlogs=$include_blogs";
}

とします。

LightBoxプラグインで自動化という記事で、「a要素にrel="lightbox"を毎回書くのは大変なので、自動化させたいが、ソースコードを書きかえるのは面倒だし、間違いのもとにもなりですし、かといって完全に自動化するのもどうか?」と書きましたが、LightBoxで画像のタイトルを表示させるには、画像へのアンカーにtitle属性がないといけません。LightBoxを使わないにしろ、title属性が有るに越したことはありません。

というわけで、禁断のソースコードに手を加えます(笑)必ずバックアップを取ってください。

mt/lib/MT/Asset/Image.pmに手を加えます。334行目あたりの

if ( $param->{thumb} ) {
    $text = sprintf(
        '<a href="%s"><img alt="%s" src="%s" %s %s /></a>',
        MT::Util::encode_html( $asset->url ),
        MT::Util::encode_html( $asset->label ),
        MT::Util::encode_html( $thumb->url ),
        $dimensions,
        $wrap_style,
    );
}

if ( $param->{thumb} ) {
    $text = sprintf(
        '<a href="%s" title="%s"><img alt="%s" src="%s" %s %s /></a>',
        MT::Util::encode_html( $asset->url ),
        MT::Util::encode_html( $asset->label ),
        MT::Util::encode_html( $asset->label ),
        MT::Util::encode_html( $thumb->url ),
        $dimensions,
        $wrap_style,
    );
}

と書きかえれば、画像へのアンカーにtitle属性が付加されます。一応アイテムの名前が、title="アイテムの名前"というふうに挿入されます。

参考までに、

MT::Util::encode_html( $asset->label ),

MT::Util::encode_html( $asset->description ),

とすれば、アイテムの概要が挿入されます。

関連エントリー

このアーカイブについて

このページには、過去に書かれたブログ記事のうちMovable Typeカテゴリに属しているものが含まれています。

次のカテゴリはweb デザインです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Twitter Updates

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja