1.0.5J-r7からパーサの自由度が上がったため、PHxの出番が増えてきました。
久しぶりにPHxを機能追加しました。チャンクに対応しました
{{chunk:modifier}}
上記のように記述すると、チャンクに対してモディファイアをかけることができます。
また、カスタムモディファイアを作る時にもチャンクを使えるようにしました。
<h2>[+output+]</h2>
上記のようなモディファイアを「 phx:title 」などの名前でチャンクとして作り、
[*longtitle:title*]
上記のように記述すると、自動的にh2タグをつけることができます。もしlongtitleの入力がない場合は何も出力しません。
PHPでモディファイアを作る場合と同じように、オプションも使えます。
<[+options+]>[+output+]</[+options+]>
同じように上記のようなチャンクを作って、
[*longtitle:title=`h2`*]
上記のように記述すると、要素名(h2)を呼び出し側で指定できます。
なおDittoと併用すると不具合が起きる件も修正しました
PHxを機能追加しました
PHxを機能追加しました
- 添付ファイル
-
- phx215.zip
- (11.73 KiB) ダウンロード数: 748 回
Re: PHxを機能追加しました
パース処理に一部問題があるようなので、パース処理部分だけ元に戻します。(再現条件・原因はまだ特定できてません)
phx.parser.class.inc.phpのみの差し替えです。チャンクまわりなど追加した機能はそのままです。
phx.parser.class.inc.phpのみの差し替えです。チャンクまわりなど追加した機能はそのままです。
- 添付ファイル
-
- phx215r1.zip
- (11.23 KiB) ダウンロード数: 733 回
Re: PHxを機能追加しました
パース処理を元に戻したことでせっかくのチャンクのパース機能まで元に戻してしまいました。
修正したファイルのみ添付します
修正したファイルのみ添付します
- 添付ファイル
-
- phx.parser.class.inc.zip
- (5.64 KiB) ダウンロード数: 752 回
Re: PHxを機能追加しました
たとえば、
Dittoのtplの中で、以下のようにDittoのPHxを使っている場合、
プラグインのPHxを有効にすると問題が出ます。
Dittoのプレイスホルダが置換される問題があったため、
今までプラグインのPHxは使っておらず、
この問題が以前からなのかどうかはわかりません。
とりあえず、プラグインのPHxを停止すると、この問題は起きませんので、
今はそのようにして回避しています。
Dittoのtplの中で、以下のようにDittoのPHxを使っている場合、
プラグインのPHxを有効にすると問題が出ます。
コード: 全て選択
[+menutitle:is=``:then=`[+longtitle+]`:else=`[+menutitle+]`+]
今までプラグインのPHxは使っておらず、
この問題が以前からなのかどうかはわかりません。
とりあえず、プラグインのPHxを停止すると、この問題は起きませんので、
今はそのようにして回避しています。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
http://d.hatena.ne.jp/hikidas_ikeda/
Re: PHxを機能追加しました
PHxはコアのパース処理を横取りする形で変数展開を行なう作りのようですが、この時、最終的には処理から漏れたプレースホルダ文字列を全て削除してからコアに制御を戻すみたいですね。これはコアに任せて問題ないと思うので、最新版では何もせず戻すように改善しています。なので、たぶんその問題に関しては解決しているのではと思います。
が、それ以外の問題点もいくつか見つかりました。現時点では、複雑なパース展開を必要とする場合は素直にRevoに移行するのがよいかもです。
ちなみにDitto付属のPHxとプラグイン単体のPHxは全く同一のコードでした。その件に関してだけで言えば、呼び出すタイミングの問題のようですね。
が、それ以外の問題点もいくつか見つかりました。現時点では、複雑なパース展開を必要とする場合は素直にRevoに移行するのがよいかもです。
ちなみにDitto付属のPHxとプラグイン単体のPHxは全く同一のコードでした。その件に関してだけで言えば、呼び出すタイミングの問題のようですね。
Re: PHxを機能追加しました
まだ詳しい状況が整理しきれていませんが、Evo 1.0.5J-r2 から Evo 1.0.5J-r8にアップグレードしたところ、PHxの処理が壊滅状態になりました。
r7からコアのパース処理が変更されたようですが、PHx(V2.1.4)を使用してる前バージョンユーザーはr7以降にはアップグレードしてはいけない(非互換)ということでしょうか?
ここのV2.1.5も試してみましたが、改善されませんでした(PHxコードのパースが変数の展開後に行われているように感じます)。
r7からコアのパース処理が変更されたようですが、PHx(V2.1.4)を使用してる前バージョンユーザーはr7以降にはアップグレードしてはいけない(非互換)ということでしょうか?
ここのV2.1.5も試してみましたが、改善されませんでした(PHxコードのパースが変数の展開後に行われているように感じます)。
Re: PHxを機能追加しました
赤字の太字で「壊滅状態」とだけ書かれても、何のことかさっぱり分かりません。あなたは素人じゃないんだから、質問の仕方を工夫してください。sama55 さんが書きました:まだ詳しい状況が整理しきれていませんが、Evo 1.0.5J-r2 から Evo 1.0.5J-r8にアップグレードしたところ、PHxの処理が壊滅状態になりました。
r7からコアのパース処理が変更されたようですが、PHx(V2.1.4)を使用してる前バージョンユーザーはr7以降にはアップグレードしてはいけない(非互換)ということでしょうか?
ここのV2.1.5も試してみましたが、改善されませんでした(PHxコードのパースが変数の展開後に行われているように感じます)。
Re: PHxを機能追加しました
その後の調査で、Cascading Templates という部品との相関関係でテンプレート変数が正しく参照できないケースがあることが徐々に分かってきました。
Re: PHxを機能追加しました
情報ありがとうございます。近日中に調べてみます