2009年8月12日

Movable Type 4.2 のダイナミックパブリッシングでプロフィール画像関連のテンプレートタグが動作しない不具合について

Movable Type 4.2(動作確認は4.261)でダイナミックパブリッシングを使用している場合、プロフィール画像関連のテンプレートタグが正常に動作しないケースがあります。

ご質問を頂きましたので、本エントリーにて情報展開致します。

1.事象

例えば、プロフィール画像を登録しているユーザーがコミュニティブログに記事を投稿した場合、スタティックパブリッシングではメインページで次のようにプロフィール画像が表示されます。

スタティックパブリッシング

このページをダイナミックパブリッシングにするとデフォルトの画像になります。

ダイナミックパブリッシング

なお、いくつかのテンプレートタグを試したところ、以下のテンプレートタグから正常な出力を得られませんでした。

  • MTAuthorUserpic
  • MTAuthorUserpicURL
  • MTEntryAuthorUserpic
  • MTEntryAuthorUserpicURL

2.原因

php のソースをトレースしたところ、上記の各テンプレートタグの処理で php/lib/MTUtil.php の userpic_url という関数を起動しています。この関数はプロフィール画像のURLを返却するもので、その中で次の処理がありました。

if (!$thumb->get_thumbnail($dest, $thumb_w, $thumb_h, $asset['asset_id'], $scale, $thumb_name, 'png', true)) {
    return '';
}

赤字の部分が示すように、png 画像に限定した処理になっています。テストしたプロフィール画像は jpg だったため、この処理でエラーとなり、テンプレートタグで何も表示されなかったようです。最初に png 画像で実験していたら、この原因には気がつかなかったと思います。

ちなみに、冒頭に示した画像がデフォルトのプロフィール画像になるのは、次のように MTIf タグで MTEntryAuthorUserpicURL タグを判定しているためです(分かりやすくするため改行しています)。

<img src="
    <mt:If tag="EntryAuthorUserpicURL">
        <$mt:EntryAuthorUserpicURL$>
    <mt:Else>
        <$mt:StaticWebPath$>images/default-userpic-90.jpg
    </mt:If>
" width="<$mt:Var name="userpic_size"$>" height="<$mt:Var name="userpic_size"$>" alt="user-pic" />

3.対処

根本的な解決ではありませんが、とりあえずプロフィール画像に png を利用すれば、ダイナミックパブリッシングでも正常に画像が表示されます。

4.Windows での挙動

Windows(XPなので公式のインストール環境ではありません)では、パスのセパレータが「¥」になるのですが、png 画像を利用しても、次のようにプロフィール画像のパスに「/」と「¥」が混在してしまって正常に画像が表示できないようです。

/mt-static/support/assets_c¥userpics/userpic-1-100x100.png

とりあえず、php/lib/MTUtil.php の userpic_url の処理を一部書き換えると正常に表示できるようになりました。赤字を削除して青字の内容に書き換えます。

...前略...
function userpic_url($asset, $blog, $author) {
    global $mt;
    $format = $mt->translate('userpic-[_1]-%wx%h%x', array($author['author_id']));
    $max_dim = $mt->config('UserpicThumbnailSize');
 
    # generate thumbnail
    $src_file = asset_path($asset['asset_file_path'], $blog);
 
    $cache_path = $mt->config('AssetCacheDir');
    $image_path = $cache_path . DIRECTORY_SEPARATOR . 'userpics';
    $image_path = $cache_path . '/' . 'userpics';
    $static_file_path = static_file_path().'support';
...後略...
Comments [0] | Trackbacks [1]
2009年8月 6日

ダイナミックパブリッシングによるページ分割

Movable Type 4.2 ではダイナミックパブリッシングによるページ分割が行なえます。

カテゴリーアーカイブのページナビゲーション
カテゴリーアーカイブ

月別アーカイブのページナビゲーション
月別アーカイブ

メインページのページナビゲーション
メインページ

本エントリーでは、以下の解説を元に「既定のブログ」へのページ分割設定方法を紹介します。

1..htaccess の変更(4.2 以前からダイナミックパブリッシングを導入している場合)

参考とした元記事では 以下のように .htaccess の変更を行なっていますが、4.2 からダイナミックパブリッシングの運用を開始している場合は設定不要です。

変更前

RewriteRule ^(.*)$ $mtview_server_url [L,QSA]

変更後

RewriteRule ^(.*)(\?.*)?$ $mtview_server_url$2 [L,QSA]

2.「ブログ記事リスト」アーカイブテンプレートにページナビゲーションの追加

ブログ記事管理画面の「デザイン」→「テンプレート」→「カテゴリ別ブログ記事リスト(または月別ブログ記事リスト)」をクリックし、以下のサブテンプレート(青色部分)を追加します。

...前略...
    <div class="content-nav">
        <mt:ArchivePrevious><a href="<$mt:ArchiveLink$>">&laquo; <$mt:ArchiveTitle$></a> |</mt:ArchivePrevious>
        <a href="<$mt:Link template="main_index"$>">メインページ</a> |
        <a href="<$mt:Link template="archive_index"$>">アーカイブ</a>
        <mt:ArchiveNext>| <a href="<$mt:ArchiveLink$>"><$mt:ArchiveTitle$> &raquo;</a></mt:ArchiveNext>
    </div>
 
    <div class="content-nav">
        <mt:IfPreviousResults><a href="<mt:PreviousLink encode_html="1">" rel="prev">&laquo; Previous</a>&nbsp;&nbsp;</mt:IfPreviousResults>
        <mt:PagerBlock>
            <mt:IfCurrentPage><mt:Var name="__value__"><mt:Else><a href="<mt:PagerLink encode_html="1">"><mt:Var name="__value__"></a></mt:IfCurrentPage>
            <mt:unless name="__last__">&nbsp;</mt:unless>
        </mt:PagerBlock>
        <mt:IfMoreResults>&nbsp;&nbsp;<a href="<mt:NextLink encode_html="1">" rel="next">Next &raquo;</a>
        </mt:IfMoreResults>
    </div>
 
</div>
...後略...

3.アーカイブテンプレートの修正

1項の編集画面を開いた状態で、MTEntries タグに offset="auto" を追加し、limit="xx" でページ単位の表示数を設定します。$limit はそのまま使っても構いません。

変更前

<mt:Entries limit="$limit">

変更後

<mt:Entries limit="10" offset="auto">

これでアーカイブページにアクセスすればページ分割が行なえると思います。

なお、カテゴリアーカイブについては、MTEntriesWithSubCategories タグでも動作確認できました。

4.メインページについて

メインページもブログ記事リストのアーカイブページと同様の方法でページ分割可能ですが、ブログ内のすべてのブログ記事がページ分割対象となるため、カスタマイズが必要です(別の機会にエントリーしたいと思います)。

Comments [0] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner


AMN
Categories
Monthly Archives
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3