2009年8月21日

Movable Type 4.261 でのダイナミックパブリッシングエラーについて

Movable Type 4.261 で、特定のケースでダイナミックパブリッシングが正常に動作しないケースがありました。ご質問を頂きましたので、本エントリーにて情報展開致します。

1.事象

Movable Type 4.261で、新規作成したアーカイブテンプレート(確認したのはブログ記事リストのみ)でダイナミックパブリッシングを行ない、該当のページにアクセスすると、以下のエラーとなります。

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

エラーとなるのは新規追加分のみで、以下の場合は正常に動作します。

  • 既存のアーカイブテンプレートのダイナミックパブリッシング
  • 既存のアーカイブテンプレートにアーカイブマッピングを追加した場合(例えば「既定のブログ」テンプレートセットの「月別ブログ記事リスト」に日別アーカイブを追加)のダイナミックパブリッシング

ダイナミックパブリッシングの変更方法は、

  • 公開プロファイルによる設定
  • アーカイブテンプレートのテンプレートマッピング設定画面による個別の設定

で同様の事象となるようです。Windows/Linuxいずれも同様です。データベースはMySQLで動作確認しています。すべての環境で同様の事象が発生するかどうかは不明です。

4.25では正常に動作しました。4.3 も Windows では正常に動作することを確認しました。

2.原因

MT 4.3 のリリースノートを見ていると、以下が該当するように思われます。

[PATCH] Dynamically published weblog pages display "Page not found" error

Fixed an error where viewing a dynamically published weblog page results in a "Page not found" error being displayed if the template which publishes the page has a template_identifier field value of "NULL" in the mt_template table in the Movable Type database.

これを見る前にとりあえずシックスアパートにフィードバックしてしまいました。既知のバグでしたらすいません。

3.対処方法

2009.08.22 追記しました。「うろうろ...」さんの「MTOS導入日誌 2009年07月29日」に対処方法がありました。

php/lib/mtdb_base.php の 90行目を以下のように修正します。

変更前

and template_identifier != 'backup'

変更後

and template_type != 'backup'
Comments [0] | Trackbacks [0]
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]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

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

AMN
Categories
Monthly Archives
2020年
2019年
2018年
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