modxでPHxをインストールするとDittoでページネーションできなくなる件

2010年01月04日  投稿者:ハセガワ
Dittoの「paginationでページ分割機能」は大変便利だが、PHxをスニペットに別途インストールするとpaginationが無効化される。原因と解決法を探した。
ブックマークする:

2年間ほったらしかったので、デザインからリニューアルしてやり直そうと思い、
modxのバージョンも0.9.6から1.0.2Jにアップデートした。
その際も色々注意すべきことがあったが、それは後日。

DittoとPHxの既知の相性バグ

modxで、MTで言うところの<mt:entries>、wordpressで言うところの<?php query_posts() ?>みたいな、
エントリーを集めて表示させるスニペットがdittoだ。

dittoにはpaginationというオプションがあり、
MTのpagebuteプラグインのようにページ分割を簡単に行ってくれる。

PHxはdittoに同梱されている別のスニペットで、
<mt:if>みたいな、条件分岐をditto内で実現させるためのものだ。

modxはMTタグやwordpress関数のようなものがなく、
条件分岐に対して少々弱い(というかphpなどの知識が必要)ため、
ditto内だけではなく、他の場所でも使いたい。
(簡単に言うと、カテゴリによってテンプレートを変えたい、とか)

そのためにはPHxをmodxに改めてインストールする必要がある。
インストール自体は難しくはないが、
dittoとPHxを両方インストールした状態だと、dittoのページ分割機能が働かなくなってしまう。

これが致命的な問題なため、PHxをインストールしないという意見が多い。

原因

dittoのpaginationはPHxとの共存によって、エラーを吐くのではなく、
単にブランクを返している(指定した内容が反映されない)。
つまり、dittoで指定したプレイスホルダの内容を上書きしているか、消去しているか、
その辺の挙動が怪しいとアタリをつけた。

PHxは、インストールする際、「システムイベント」タブの「OnParseDocument」にチェックを入れる。

modx-PHxシステムイベントタブ

OnParseDocumentイベントは、
ドキュメントを更新したり保存したりしてdittoなどで指定された構文を解析するタイミングで起きるイベントのため、
asset/plugins/phx/phx.parser.class.inc.php
から、余分なものを消していそうな箇所を探す。

62行目に

// clean up unused placeholders that have modifiers attached (MODx can't clean them)

というコメントがあった。
モディファイアで設定した、使われてないプレイスホルダをクリーンアップする、的なものだ。
つまり、dittoで一度コールされたpaginationのプレイスホルダを、インストールしたPHxがクリーンアップしているらしい。

解決

というわけで、
asset/plugins/phx/phx.parser.class.inc.php
の63~67行目をコメントアウトした。

modx-PHxコメントアウト

今のところ、これによる不具合は確認できていないので、
もし他のプラグインとの不具合が現れたら報告する。

僕が買った、もしくは買う予定の参考書
ブックマークする
FlaTech+を購読する
  • 全記事を含むRSSfeed
  • このページをブックマーク: