スニペット記法+内蔵PHx出力のモディファイア内での`?`  【解決済み】

質問全般・改善要望
kazh
メンバー
メンバー
記事: 12
登録日時: 2010年2月26日(金) 20:18

スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by kazh » 2015年6月02日(火) 10:57

お世話になっております。
PHxのthen:elseをログイン情報などユーザ固有値に基づいて使用することがあり、
この場合、キャッシュさせないため、[! !]で書いていたりするのですが、

[!スニペット:is=`1`:then=`1`:else=`2`!]
[!スニペット:is=`1`:then=`?1`:else=`2`!]
↑パラメータに?が含まれると動作しないようです。

スニペット記法のパースのせいですかね。
then:elseの中身はリンクURLだったりすることが多いので、`index.php?id=1`みたいなものが書けなくて困ってしまいました。
出力結果を見ると、?の前までしか出力されない(前行の例だとindex.phpまで)ようです。
これを回避する手段が、何かありますでしょうか。
アバター
yama
管理人
記事: 2852
登録日時: 2009年7月29日(水) 02:50

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by yama » 2015年6月18日(木) 14:19

document.parser.class.inc.zip
(28.95 KiB) ダウンロード数: 70 回
お待たせしました。添付のファイルを解凍してmanager/includes/ディレクトリに上書きしてみてください
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by iwa » 2015年6月19日(金) 14:34

すみません。よこから失礼します。

私も kazh さんと同様な状況でして、便乗させてください。

yama さんからいただいたソースを適用したのですが、正しく動作しないところも発生したためご相談です。

以下のように スニペットのパラメータをスニペットで生成している場合に、echo_id スニペットが動作しないようです。

[!Ditto?&tpl=`@CODE:[+id+],`&id=`id1`&documents=[!echo_id?&id=`8`!]!]

以下にテストサイトを作成しました。
(とはいえ、パッチが当たっていないので、問題なく動作します。パッチをあてたら動作しないと思います。)

http://150619142146-19507.evo.demo.modx.jp/manager/

もし、スニペットの呼び出しが誤っていたらごめんなさい。

> 1816 if($pos['?'] !== false && $pos['?']<$pos[':'])

を元に戻すと、 ? は利用できませんが、他は大丈夫でした。
込み入った部分なので、手出しができなく、ご報告のみとなります。
アバター
yama
管理人
記事: 2852
登録日時: 2009年7月29日(水) 02:50

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by yama » 2015年6月19日(金) 14:36

コード: 全て選択

if($pos['?'] !== false && ($pos[':']===false || $pos['?']<$pos[':']))

その部分をこのように書き換えてみてください

http://150619142146-19507.evo.demo.modx.jp/1.html
サンプルのほうも変更しました
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by iwa » 2015年6月19日(金) 14:52

yama 様

早速対応いただき、ありがとうございます。

適用をしてみました。

提示させていただいた、サンプルは改善しなかったのですが、同様な処理を行っている内部のサイトでは改善したかもしれません。

サンプルが改善しなかったのが気になります。。
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by iwa » 2015年6月19日(金) 14:53

> 提示させていただいた、サンプルは改善しなかったのですが、

サンプルサイトは治ってますね。あとは私の手元サイト。。

手元サイトは、見直すと、
1809 $pos[':'] = strpos($call, ':');
が抜けてました。
問題なく動作しました。

ありがとうございます!
最後に編集したユーザー iwa on 2015年6月19日(金) 15:03 [ 編集 1 回目 ]
アバター
yama
管理人
記事: 2852
登録日時: 2009年7月29日(水) 02:50

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by yama » 2015年6月19日(金) 15:00

ifの前に $pos[':'] = strpos($call, ':'); を追記する必要があります
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by iwa » 2015年6月19日(金) 16:18

yama 様

五月雨になってすみません。

最後にお教えいただいたパッチでも、以下の処理が NG になってしまいます。

コード: 全て選択

<!--@IF [!echo_id:is(`1`):or:is(`2`)?id=`1`!]-->
しん!
<!--@ELSE-->
ぎ!
<!--@ENDIF-->
<!--@IF [!echo_id:is(`1`):or:is(`2`)?id=`3`!]-->
しん!
<!--@ELSE-->
ぎ!
<!--@ENDIF-->


先ほどのサイトに環境を作りました。本来であれば「しん」「ぎ」と表示されなければならないのですが「ぎ」「ぎ」になってしまいます。
パッチを元に戻すと問題ありません。

http://150619142146-19507.evo.demo.modx.jp/manager/

2.html です。
アバター
yama
管理人
記事: 2852
登録日時: 2009年7月29日(水) 02:50

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by yama » 2015年6月23日(火) 15:46

お返事が遅くなりましたが、土曜日の時点でこの件確認しました。当トピック自体の問題があることが分かったので(※想定以上に精密なパース処理が必要になる)、いったん元の状態に戻した上で対症療法的な方法を提案させてもらうことになると思います。また改めて連絡いたします。
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by iwa » 2015年6月23日(火) 16:11

yama 様

ご返事、ご検討いただきありがとうございます。

引き続きよろしくお願いします
アバター
yama
管理人
記事: 2852
登録日時: 2009年7月29日(水) 02:50

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by yama » 2015年6月29日(月) 09:19

document.parser.class.inc.zip
(29.1 KiB) ダウンロード数: 76 回
お待たせしました。添付のパッチを上書きしてみてください。

コード: 全て選択

[[スニペット:is=`1`:then=`?1`:else=`2`]]
上記の記述は

コード: 全て選択

[[スニペット:is(1):then(?1):else(2)]]
このように、カッコを用いた新記法に書き換える必要があります。
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by iwa » 2015年6月29日(月) 11:26

yama 様

ありがとうございます。

提示させていただいた処理については動作しているようですが、基本的な動作に疑問が残りました。

echo_id スニペットを作成し

コード: 全て選択

echo $id;


参照したのですが、 false になってしまいます。

コード: 全て選択

[!echo_id:is=(1):then=(true):else=(false)?id=1!]


記述に誤りがあるかもしれません。

確認サイトをお知らせします。

http://150629110830-13791.evo.demo.modx.jp/manager/
masco
メンバー
メンバー
記事: 103
登録日時: 2014年9月26日(金) 10:43

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by masco » 2015年6月29日(月) 13:29

iwaさま

すみません、横からですが。。。

コード: 全て選択

[!echo_id:is=(1):then=(true):else=(false)?id=1!]




コード: 全て選択

[!echo_id:is(1):then(true):else(false)?id=1!]


に変更してみたらどうなりますか?新しい記法に=は必要なくなりました。
iwa
メンバー
メンバー
記事: 30
登録日時: 2015年2月16日(月) 13:35

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`

投稿記事by iwa » 2015年6月29日(月) 13:47

masco 様

ありがとうございます。

ご指摘いただいた内容で解決しました。
kazh
メンバー
メンバー
記事: 12
登録日時: 2010年2月26日(金) 20:18

Re: スニペット記法+内蔵PHx出力のモディファイア内での`?`  【解決済み】

投稿記事by kazh » 2015年7月30日(木) 15:30

yama様

亀レスになってしまい申し訳ございません。
ご対応ありがとうございました。

“質問全般・改善要望” へ戻る