September 2004 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
2006年も宜しくです♪最近はmixiとカラオケにうつつを抜かしていますが(^^;

September 25, 2004

複数Categoryなページめくりの再構築(プラグインありなし判定)

一応「複数Categoryなページめくりの再構築(修正)」にて一段落していた改造。
しかし、 nlog(n)さんの「同一カテゴリの前後ナビゲーションと自動再構築」にて、このプラグインを入れていない場合はカテゴリとしての前後のエントリの再構築をしないほーがいいってな記述があった・・。
たしかにそーだよなぁ。プラグインハズしてまたロジック修正っていやだよなぁ。とかふにふに。
まー、他のプラグインのチェックにも応用がきくだろーてとちょっと探してみた。
しかし、今回の対応はおひらの実験環境としてはMovabletype2.661であるが故に、Movabletype3.xシリーズで同様修正をして稼働するか?は不明確である。

もしかしたら他にもっと良い手が多分あるのだろーけれど、おひらのトボケタのーみそではこの程度が精一杯である。

さて、何をどーやったかというと・・・
簡単に言うと前回の修正点にもちっと修正を加えた形となる。

mt.cgiのあるディレクトリをMT_DIRとすると
MT_DIR/lib/MT.pmというファイルである。
このMT.pmの226行目あたりに、

return 1 unless $param{BuildDependencies};

という文字列を探す。
このあたりはコレまでどおりである。
で、その直後がこれまでの修正箇所であるが、その修正箇所を以下の形でif文でくくって、プラグインのエントリが存在すれば処理をするにするといいのでは?と思っている。
  if((defined $MT::Template::Context::Global_handlers{'EntryPreviousInCategory'}->{'is_container'})
  && (defined $MT::Template::Context::Global_handlers{'EntryNextInCategory'}->{'is_container'})) {

      前回までに修正したところ全行
  }

こんな感じである。

よってイメージは以下のよーな感じかな。

  return 1 unless $param{BuildDependencies};
  if((defined $MT::Template::Context::Global_handlers{'EntryPreviousInCategory'}->{'is_container'})
    && (defined $MT::Template::Context::Global_handlers{'EntryNextInCategory'}->{'is_container'})) {

    my $cats = $entry->categories;
# previous
    for my $cat (@$cats) {
        my $prev = $entry->previous(1);
        if($prev && !$prev->is_in_category($cat)) {
            $prev = $entry->previous(2);
            while ($prev && !$prev->is_in_category($cat)){
             $prev = $prev->previous(1);
            }
            if ($prev) {
                $mt->_rebuild_entry_archive_type(Entry => $prev,
                    Blog => $blog,
                    ArchiveType => 'Individual')
                    or die $mt->errstr;
            }
        }
# next
        my $next = $entry->next(1);
        if($next && !$next->is_in_category($cat)) {
            $next = $entry->next(2);
            while ($next && !$next->is_in_category($cat)){
                $next = $next->next(1);
            }
            if ($next) {
                $mt->_rebuild_entry_archive_type(Entry => $next,
                    Blog => $blog,
                    ArchiveType => 'Individual')
                    or die $mt->errstr;
            }
        }
    }
  }


これでやってプラグインが無い場合は処理を通らない形となる。
さて、これでまたしばらく様子見。


ちなみに、この場合でプラグインの記述がテンプレートにあって、プラグインが無い場合はどーいう動きをするかというと、当然Individualアーカイブは自エントリと前後のエントリのみ再構築する。
カテゴリ内の1こ前と前後していない場合は、1こ前は再構築されない。
そしてそれらの、エントリの同一カテゴリ内前後への移動のリンクは後ろにエントリが無くても双方とも自エントリの表示がされる。
またその部分のソースをみると<&/MTEntryPreviousInCategory>と<&/MTEntryNextInCategory>の文字列は残る形となる。
たとえば「夜中になってハラペコさん」の場合今現在後ろのエントリは存在しないが、

« 夜中になってハラペコさん | Food | 夜中になってハラペコさん »

という風に前も後ろも自分になる。
ソースとしては以下のよーなイメージ
<a href="http://ruby.cx/archives/i/2004/09/25_0157.html">
&laquo; 夜中になってハラペコさん</a> |
</MTEntryPreviousInCategory>
<a href="http://ruby.cx/archives/cat_food.php">Food</a>

| <a href="http://ruby.cx/archives/i/2004/09/25_0157.html">夜中になってハラペコさん &raquo;</a>
</MTEntryNextInCategory>

さて、とりあえずマトモに戻しトコっと。

正しい場合は以下のよーになる。

« もちもち ミルクキャラメル蒸し | Food

そしてソースはこんな感じ

<a href="http://ruby.cx/archives/i/2004/09/16_2341.html">
&laquo; もちもち ミルクキャラメル蒸し</a> |

<a href="http://ruby.cx/archives/cat_food.php">Food</a>

ま、ここまで実験することは無かったんだけれどね。なんとなく。
もっといい手があればおせーてちょーだい。
なお、この手は、David RaynesさんのPlugin Managerを参考にさせていただきました。感謝(ぺこ)

今回のタグはタグ名で囲むイメージだったので、'is_container'が設定されているか?を判断材料として使用したが、囲まないタイプだとこの値は0になるはず。(ちなみに、囲むタイプだと1になる)
よって、その場合は'code'の方がいいのかなぁとか思ったりしているが、値を訊いているわけではなくdefinedで設定されているか否かを訊いているんだから、このままでもOKかもしれない。うーん。

Posted by Yacchan at September 25, 2004 03:53 AM Clip!! IB MovableType
コメント(直近6件まで表示、全7件)
Trackback: PreviousNextInCategoryプラグイン
Excerpt: PreviousNextInCategoryというプラグインの導入を試みました。 作業メモとして記述しておきます。 失敗です。 個別エントリーでの再構築は出来るのですが、アーカイブ全体の再構築時にどう...
Weblog: 神奈川,千葉,東京,埼玉 住宅 設計事務所 K2WORKS 一級建築士事務所
Tracked: September 29, 2006 06:17 PM

xjokz wagqx txvndabqf gcvtblon smte tmiw fhane

Posted by: hwrtzj zvcqkhu at December 21, 2006 12:13 PM

pnuczdsi jwavynb bjyzutph ghfy kbynhfcjg vrhco slyvpe

Posted by: qmudzlbin zvkciyp at December 21, 2006 12:49 PM

Hello,cheap cialis hier!

Posted by: buycialis at January 24, 2007 07:29 PM

Deal plainly with me.

Posted by: equestrian jewelry at February 5, 2007 07:44 PM
Trackback: handheld barcode scanners
Excerpt: 複数Categoryなページめくりの再構築(プラグインありなし判定)
Weblog: handheld barcode scanners
Tracked: March 24, 2007 01:53 PM
コメントする









edit for admin