PHxを機能追加しました

プログラム(機能)関連の開発の話題
返信する
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

PHxを機能追加しました

投稿記事 by yama »

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と併用すると不具合が起きる件も修正しました
添付ファイル
phx215.zip
(11.73 KiB) ダウンロード数: 733 回
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: PHxを機能追加しました

投稿記事 by yama »

パース処理に一部問題があるようなので、パース処理部分だけ元に戻します。(再現条件・原因はまだ特定できてません)
phx.parser.class.inc.phpのみの差し替えです。チャンクまわりなど追加した機能はそのままです。
添付ファイル
phx215r1.zip
(11.23 KiB) ダウンロード数: 721 回
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: PHxを機能追加しました

投稿記事 by yama »

パース処理を元に戻したことでせっかくのチャンクのパース機能まで元に戻してしまいました。
修正したファイルのみ添付します
添付ファイル
phx.parser.class.inc.zip
(5.64 KiB) ダウンロード数: 735 回
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: PHxを機能追加しました

投稿記事 by kazuike »

たとえば、
Dittoのtplの中で、以下のようにDittoのPHxを使っている場合、
プラグインのPHxを有効にすると問題が出ます。

コード: 全て選択

[+menutitle:is=``:then=`[+longtitle+]`:else=`[+menutitle+]`+]
Dittoのプレイスホルダが置換される問題があったため、
今までプラグインのPHxは使っておらず、
この問題が以前からなのかどうかはわかりません。

とりあえず、プラグインのPHxを停止すると、この問題は起きませんので、
今はそのようにして回避しています。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: PHxを機能追加しました

投稿記事 by yama »

PHxはコアのパース処理を横取りする形で変数展開を行なう作りのようですが、この時、最終的には処理から漏れたプレースホルダ文字列を全て削除してからコアに制御を戻すみたいですね。これはコアに任せて問題ないと思うので、最新版では何もせず戻すように改善しています。なので、たぶんその問題に関しては解決しているのではと思います。
が、それ以外の問題点もいくつか見つかりました。現時点では、複雑なパース展開を必要とする場合は素直にRevoに移行するのがよいかもです。
ちなみにDitto付属のPHxとプラグイン単体のPHxは全く同一のコードでした。その件に関してだけで言えば、呼び出すタイミングの問題のようですね。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: PHxを機能追加しました

投稿記事 by sama55 »

まだ詳しい状況が整理しきれていませんが、Evo 1.0.5J-r2 から Evo 1.0.5J-r8にアップグレードしたところ、PHxの処理が壊滅状態になりました。
r7からコアのパース処理が変更されたようですが、PHx(V2.1.4)を使用してる前バージョンユーザーはr7以降にはアップグレードしてはいけない(非互換)ということでしょうか?
ここのV2.1.5も試してみましたが、改善されませんでした(PHxコードのパースが変数の展開後に行われているように感じます)。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: PHxを機能追加しました

投稿記事 by yama »

sama55 さんが書きました:まだ詳しい状況が整理しきれていませんが、Evo 1.0.5J-r2 から Evo 1.0.5J-r8にアップグレードしたところ、PHxの処理が壊滅状態になりました。
r7からコアのパース処理が変更されたようですが、PHx(V2.1.4)を使用してる前バージョンユーザーはr7以降にはアップグレードしてはいけない(非互換)ということでしょうか?
ここのV2.1.5も試してみましたが、改善されませんでした(PHxコードのパースが変数の展開後に行われているように感じます)。
赤字の太字で「壊滅状態」とだけ書かれても、何のことかさっぱり分かりません。あなたは素人じゃないんだから、質問の仕方を工夫してください。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: PHxを機能追加しました

投稿記事 by sama55 »

その後の調査で、Cascading Templates という部品との相関関係でテンプレート変数が正しく参照できないケースがあることが徐々に分かってきました。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: PHxを機能追加しました

投稿記事 by yama »

情報ありがとうございます。近日中に調べてみます
返信する