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やらおかしくなる