PHxを導入すると、JotやらDittoやらおかしくなる。その2 | MODxでハマるありがちな罠と解決法

PHxを導入すると、JotやらDittoやらおかしくなる。その2

PHxはプラグインで動作タイミングがスニペットコール前のため、値の入っていないプレイスホルダーとかをブランクにしてくれやがります。
かといって、その箇所をコメントアウトすると、今度はAjaxSearchのプレイスホルダーがおかしくなるというのを前回書きました。

コメントアウトの方法はこちら。
[modxでPHxをインストールするとDittoでページネーションできなくなる件]

http://blog.rainyday.jp/modx_list/modx/modxbug.html

どうおかしくなるかというと、デフォルトテンプレートだと、+]とか、明らかにプレイスホルダーの残骸が出力されてしまう。

ですので、トレードオフでPHxを取ったのですが、Dittoのページネートが必要になった訳で。

DittoとPHxとAjaxSearchの共存に問題がでるとは。(苦笑

ということで、PHxを改造すると、AjaxSearchが何故おかしくなるか調べてみました。


原因:
AjaxSearchはPHxが導入されていると、AjaxSearch内にあるPHxではなく、追加で導入したPHxのクラスを使う。
AjaxSearchは意図的に空欄となったプレイスホルダーをブランクに置き換えるPHxのロジックを利用しているため、上記でコメントアウトしたが為に、AjaxSearchでのブランクプレイスホルダーの処理がおかしくなった。


対処:
だったら、AjaxSearchに同梱されているphx.parser.class.inc.phpを使わせればいいと判断。
以下の箇所を変更。
/assets/snippets/ajaxSearch/phx.parser.class.inc.phpのクラス名とコンストラクタを変更。
11行目:
class PHxParser {

class PHxParserAS {
に。

17行目:
  function PHxParser($debug=0,$maxpass=50) {

  function PHxParserAS($debug=0,$maxpass=50) {
に。

/assets/snippets/ajaxSearch/chunkie.class.incのPHxParserを読み込んでいる箇所を修正
15行目:
    if (!class_exists("PHxParser")) include_once(strtr(realpath(dirname(__FILE__))."/phx.parser.class.inc.php", '\\', '/'));

    if (!class_exists("PHxParserAS")) include_once(strtr(realpath(dirname(__FILE__))."/phx.parser.class.inc.php", '\\', '/'));
に。

17行目:
    $this->phx = new PHxParser(0,200);

    $this->phx = new PHxParserAS(0,200);
に。

動作確認中ですが、多分これで大丈夫かな。

というか、Dittoも同じ対処にしとけば、PHxと切り離せるんじゃなかろーか。

前回の経緯:
PHxを導入すると、JotやらDittoやらおかしくなる


PHxを導入すると、JotやらDittoやらおかしくなる。その2
最終更新日
2010.02.26 (金)
最終更新者
Takayuki Hirosawa