MTEntries タグの lastn 属性と sort_order 属性(ascend)の同時指定が有効にならない件について
Category:[トラブルシューティング]
Tag:[MovableType, MTEntries, TroubleShooting]
テンプレートに対し、一番古いエントリータイトルを取得するタグ(下記)を設定しても、最新のエントリータイトルが取得されます。
<MTEntries lastn="1" sort_order="ascend"><$MTEntryTitle$></MTEntries>
この問題は「『Ajax月送りカレンダー』でデフォルト表示を一番過去の月にしたい」というご質問で発覚しました。
とりあえずネットで類似情報がないか検索したところ、Movable Type Community Forum で下記の記事を発見。
Sort_order Ascend Not Working In 3.33?
lastn 属性は、MTEntries タグで指定された sort_order 属性をくつがえす、内部の「sort_order="descend"」を持っています。 この振舞いのため、lastn 属性が指定された場合、sort_order 属性は無視されます
と、Nov 3 2006, 07:54 PM の回答で書かれています。たしかに lib/MT/Template/ContextHandlers.pm の 1333 行にそのような実装がありました。
仕様か不具合かという話は別として、とりあえず lastn 属性が指定された場合でも sort_order 属性を有効にするためのパッチを作ってみました。
--- lib/MT/Template/ContextHandlers.pm.bak Fri Aug 4 12:31:56 2006
+++ lib/MT/Template/ContextHandlers.pm Wed Dec 27 00:47:35 2006
@@ -1330,7 +1330,7 @@
}
}
$args{'sort'} = 'created_on';
- $args{direction} = 'descend';
+ $args{direction} = $args->{sort_order} ? $args->{sort_order} : 'descend';
if (!@filters) {
if (my $last = $args->{lastn}) {
$args{limit} = $last;
が、このパッチは他の属性と競合した場合の問題等を考慮していません。ご指摘ならびに改善案をお待ち申し上げます(他力本願)。
- Movable Typeでエラー発生箇所を特定する方法
- IE9でMovable Typeを利用する方法
- MTIfタグにtagモディファイアを利用する場合の注意事項
- Movable Type 5のブログの設定で「Can't call method "label" on unblessed reference」が発生する問題について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について(つづき)
- XREA/CORESERVERでMovable TypeのCaptchaが表示されない不具合について
- Movable Type 5.03へのアップグレードで再構築時に「Script Error」が発生する件について
- Movable Typeの復元時に「Malformed UTF-8 character~」エラーとなる対処について
- Movable Type 5で「テンプレート「Create Entry」の再構築中にエラーが発生しました」というエラーが発生する件について
- Movable Type 5で「サーバーに Image::Magickか、Image::Magickの動作に必要な他のモジュールがインストールされていません。」となる事象について
- ダイナミックパブリッシングでURLが重複する事象について
- Movable Type 5(MT5)の FastCGI 環境で管理画面の URL が変更されない事象について
- ブログ記事タイトルを改行できるようにする
- MTEntries タグ + sort_by モディファイアでブログ記事がソートされない件
- 日本語ドメインによると EntryTrackbackData タグの不具合
- Movable Type 5.0(MT5.0)の Include タグと append モディファイア・prepend モディファイアの組み合わせについて
- Movable Type 5.0(MT5.0)で更新通知が送信できない不具合と対処
- Movable Type 5.0 のスケジュールタスクでエラーになる件について
- Movable Type で「~」が「?」に文字化けする事象や日本語のタグが合算できない不具合を解消する
- Movable Type 4.261 でのダイナミックパブリッシングエラーについて
≫ Movable Type 3.34 3.35 不具合・カスタマイズメモ from Back Yard Weblog
ページの改装は大体終わったわけだが、そもそもなかなか改装に踏み切れなかった理由... [続きを読む]
私は、この現象は仕様だと思っています。
だって「lastn」はたぶん「最近のN件(the Last N)」っていう意味ですから。
そう解釈して割り切って、「古い記事からN件」とかそういうニーズがあるときには MTCollate プラグインを使用して対処しています。
おはようございます。
ざっとペーパーデバッグしてみました。
>他の属性と競合した場合の問題
days属性とsort_order="ascend"を指定した場合に、「過去○日分の記事を古い順に表示」、という動作になりますね。
1313行目に
if (my $days = $args->{days}) {
という記述があるので、この$daysを利用してもう一つ条件をかませるとよいかもです。
ほかにも気になるところはあるのですが、時間もないのでとりあえずそれだけ。
また改めて確認したいと思います。
失礼しました。
今朝の書き込みに誤りがありました。
そもそもdaysとsort_orderって併用できますね。両方指定(sort_order="ascend")で古い順に表示、は仕様通りの動作です。
先の書き込みは忘れてください。
引き続き詳しく見てみました。
1409行目に
unless ($no_resort) {
という記述があり、このブロックの中でソートをし直している模様です。
再ソートをする条件は、変数$no_resortが 0 の時で、$no_resortは1304行目で 0 で初期化されたあと、1360行目と1369行目で 1 が代入されています。
1360行目は、MTEntries の recently_commented_on 属性が指定された場合。
1369行目はコンテキストにあらかじめエントリー一覧(の候補)が保管されているとき(=アーカイブテンプレート中に<MTEntries>が記述されていた場合)です。
このうち recently_commented_on が指定された場合の処理の前に、1333行目を通ります。けれども、$no_resort=1;の前に、独自に最近付けられたコメントの新しい順にソートされているので、結局は1333行目の影響は受けません。
ということで、この記事のパッチで「lastnとsort_orderを両方有効」は大丈夫なようです。
そなると気になるのが、たった一行変更するだけで要望が満たせるのにそれに応じていないMTの仕様ですが;;
>あんちもん2さん
こんばんは。
情報&解析ありがとうございました。
ということで、Six Apart にフィードバックしておきたいと思います。
MTEntries の属性の組み合わせは多岐にわたるので、実装は大変そうですね…。
