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

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

PHxはプラグインで動作タイミングがスニペットコール前のため、値の入っていないプレイスホルダーとかをブランクにしてくれやがります。

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

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

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

と毎度の書き出しです。

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


対処:
だったら、AjaxSearchと一緒の対応だ。と判断。
以下の箇所を変更。
/assets/snippets/directresize/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();

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

PHxParserASと、修正していないPhxのクラス名にしておけば、複数回は読み込まれないだろうという判断です。

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


最終更新日
2010.03.18 (木)
最終更新者
Takayuki Hirosawa