テンプレート変数の入力時のオプションで@EVALが無効になる  【解決済み】

質問全般・改善要望
返信する
katamarin
メンバー
メンバー
記事: 20
登録日時: 2012年1月17日(火) 14:28

テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by katamarin »

-----
ご利用のサーバ:さくらスタンダード
MODXのバージョン:1.0.6J-r8
PHPのバージョン:5.2.17
MySQLのバージョン:MySQL 5.5
ブラウザ:chrome
-----

テンプレート変数で、
Radio Optionを選択し、

入力時のオプションに
@EVAL return $modx->runSnippet("zzzzz");


【スニペット zzzzz】
<?php
$str = "a||b||c";
return $str;
?>


で、リソース入力画面にいくと

◉@Bindings is disabled.

と表示されてしまいます。
デモサイトで同じ事をしてみましたが、
1.0.6J-r8
1.0.6J-r7
は@Bindings is disabled.
と表示されてしまい、

1.0.6J-r6
では、うまくラジオボタンが3つ表示されました。


何か解決方法がありましたら
すみませんがよろしくお願いいたします。
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

Re: テンプレート変数の入力時のオプションで@EVALが無効になる  【解決済み】

投稿記事 by kazuike »

グローバル設定の「セキュリティ」タブに
「@Bindingsを有効にする」がありますので、
これが「はい」になっているか確認してみてください。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
katamarin
メンバー
メンバー
記事: 20
登録日時: 2012年1月17日(火) 14:28

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by katamarin »

kazuike さんが書きました:グローバル設定の「セキュリティ」タブに
「@Bindingsを有効にする」がありますので、
これが「はい」になっているか確認してみてください。

ありがとうございました。 :D
「はい」に設定で、ちゃんと表示されました。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

r7から「@Bindingsを有効にする」のデフォルト値が「いいえ」になったので、その影響かも?この設定はリソース投稿画面内の記述に対してのみ有効な設定なので、不具合だと思います。後ほど修正パッチを作りますので、もしよければ検証いただけますでしょうか。

※@Bindingsは便利な機能ですが、スニペットやプラグインの作成権限を持たないメンバーでも投稿画面内で任意のPHP文を記述できてしまうため、機能のオンオフを選べるようにしています。
katamarin
メンバー
メンバー
記事: 20
登録日時: 2012年1月17日(火) 14:28

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by katamarin »

yamaさん

ありがとうございます。よろしくお願いいたします。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

パッチを添付しました。解凍するとファイルが2つ出てくるので、これを manager/includes/ ディレクトリに上書きしてください。
「@Bindingsを有効にする」が「いいえ」になっている状態で、ラジオボタンが正しく表示されれば解決と思います。
option(ラジオボタン)以外に、dropdown・listbox・listbox-multipleも同じ原因による不具合があったので、これも修正しました
添付ファイル
tmplvars.inc.zip
(5.74 KiB) ダウンロード数: 628 回
katamarin
メンバー
メンバー
記事: 20
登録日時: 2012年1月17日(火) 14:28

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by katamarin »

早速つくっていただいて、感謝です〜
「@Bindingsを有効にする」を『いいえ』の状態で、
option・dropdown・listbox・listbox-multiple全て検証させていただき、
無事、問題なく動作しました〜。

本当にありがとうございます。
yasu
メンバー
メンバー
記事: 103
登録日時: 2009年9月09日(水) 17:54

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yasu »

お世話になります。

「1.0.7J」リリースのドキュメントに、この件を修正したとされていましたが、どうも修正されていないような気がします。
オプション選択型テンプレート変数の入力オプションで@Bindingsコマンドを使えないため修正
http://forum.modx.jp/viewtopic.php?f=7&t=997
KeyA==@CHUNK 表示AA||KeyB==@CHUNK 表示BB
で表示されなかったので、パッチを当ててみると改善できました。

デモサイトでテストしたので、確認できるかと思います。「チェックBOXテスト」というリソースを作っています。
http://121207090343-1945.evo.demo.modx.jp/manager/
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

http://121207090343-1945.evo.demo.modx.jp/manager/
デモサイトで修正してみました。よく確認できてないですが、どうでしょう?
「1文字目に@があるかどうか」で判定していましたが、どこでもコマンド文字列があれば認識するようにしました。
yasu
メンバー
メンバー
記事: 103
登録日時: 2009年9月09日(水) 17:54

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yasu »

まだ直っていないような気がします…。
念のため、チャンク名も日本語を使わずにテストしてみましたが、まだ表示されないようです。

もしかしてTV入力オプションの記述を間違ってます??
KeyA==@CHUNK AA||KeyB==@CHUNK BB
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

パッチで直っているのは、たぶんたまたまですね。一文字目に「@」がないと正しく処理できないはずなので。たぶん条件によっては意図どおりに処理できないこともあると思います。今回の1.0.7Jでは、負荷への考慮や他の要望に対する対応などとの関係で処理の内容を変更しました。(同じ結果が得られるものと思ってましたが)

「入力時のオプション」に入力された値そのものではなく、結果として渡される値に対してコマンド処理を行なうようにすればよさそうですね。それなら、確実に一文字目から「@chunk」になっているはずなので。あとで修正してみます。
yasu
メンバー
メンバー
記事: 103
登録日時: 2009年9月09日(水) 17:54

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yasu »

了解です。よろしくお願いします。


それとチェックボックスでの別件ですが、チェックを入れて保存した項目が、次にリソース編集を開くとチェックが外れています。
気付かないまま保存してしまうと表示されなくなります。
これも今回の修正に関係あるのでしょうか?(これはデモサイトでは、まだ再現できていないのですが…)
今回の1.0.7Jでは、負荷への考慮や他の要望に対する対応などとの関係で処理の内容を変更しました。
自サイトでは、TVオプションに、下記のように設定しています。チェックを入れると表示されるという使い方です。

表示する==
<div id="banner">
<!--バナー表示表示-->
[*表示-01*]
[*表示-02*]
<!--/ここまでバナー表示-->
</div>
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

http://121207090343-1945.evo.demo.modx.jp/manager/
修正しました。これでどうでしょう?ドロップダウンタイプのテンプレート変数など、5種類のテンプレート変数に対して修正を加えました。
チェックが記憶されない件はあとで調べてみます。(もしかすると今回の修正で直っているかもしれませんが)
パッチも添付しておきます。解凍してmanager/includes/ディレクトリに上書きです
添付ファイル
tmplvars.inc.zip
(5.76 KiB) ダウンロード数: 455 回
yasu
メンバー
メンバー
記事: 103
登録日時: 2009年9月09日(水) 17:54

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yasu »

ありがとうございます!
デモサイトにて確認いたしました。
自サイトもOKでした。

ただ、このパッチだと今度は、チェックが記憶すらできなくなります。(チェックボックスが働いていない状態)
1.0.7Jの最初のファイルに戻すと、とりあえず1度は記憶されるので、毎回リソース編集画面を開くたびにチェックを確認するということで、一時的にしのいでいきます。

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

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

なるほど、パースされた値で置き換わってしまうので、このパッチだとダメですね。あくまでも値はコマンド書式のままでストアしておき、ページをレンダリングする段階で値を処理する必要があります。あとで調整してみます
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

http://121207090343-1945.evo.demo.modx.jp/manager/
修正してみました。(というか、仕様変更に近いかな?)
パッチも添付しておきます。manager/includes/に上書きです
添付ファイル
tmplvars.inc.zip
(5.43 KiB) ダウンロード数: 436 回
yasu
メンバー
メンバー
記事: 103
登録日時: 2009年9月09日(水) 17:54

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yasu »

yamaさん、いつもありがとうございます。

さっそくパッチを入れてみました。
が、@Bindingsは問題ないのですが、チェックボックスの値は記憶されない状態のままです。
(一度は記憶されるが、再度、編集画面を開くとチェックが外れている状態)


1.0.6-r8から1.0.7にバージョンアップしただけですが、こちら側の使い方に問題があるのでしょうか?
managermanagerでタブ作成して、TVを移動して使っていますが…これは関係なさそうだし…

こちらでも現象を再現したりと原因を探ってみます。
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

いえいえ、2つ、または3つのファイルに特定される問題だと思います。ブラウザやサーバなどの使用環境には関係しないはずなので。
あと少しで解決のところだと思います。

http://121207090343-1945.evo.demo.modx.jp/manager/
こちらのほうは問題なさそうでしょうか?
アバター
yama
管理人
記事: 3236
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yama »

添付のデバッグ用パッチをmanager/includes/ディレクトリに上書きしてみていただけますでしょうか。
01.png
(8.04 KiB) ダウンロード数: 13928 回
「@CHUNK 表示BB」を選んだ状態だと、上記のように$field_valueに@CHUNK 表示BBがセットされれば正しいです。たぶんこうなってないと思うので、実際にどのような値が入っているかを確認できればと思います。
添付ファイル
tmplvars.inc.zip
(3.89 KiB) ダウンロード数: 399 回
yasu
メンバー
メンバー
記事: 103
登録日時: 2009年9月09日(水) 17:54

Re: テンプレート変数の入力時のオプションで@EVALが無効になる

投稿記事 by yasu »

yamaさん

先ほど、パッチをいれてテストしてみました。
いろいろ再現してテストしてみたところ、結果として、自サイトも現在は正常に値が保存されるようになっています。


・XAMPPで、TVやチャンクなど再現してテスト ⇒ 値を正常に取得(パッチあてる前から事象はでなかったのですが…)

・自サイト ⇒ パッチをあてて、値は取得していたようですが、やはりCheckBoxのチェックが外れた状態で今までと同じ。
TV入力オプションの記述を
表示する==
<div id="banner">
<!--バナー表示表示-->
[*表示-01*]
[*表示-02*]
<!--/ここまでバナー表示-->
</div>
から
表示する==<div id="banner"><!--バナー表示表示-->[*表示-01*][*表示-02*]<!--/ここまでバナー表示--></div>
というように、改行を外してみたところ、何故かチェックの状態も正常になりました。
これ以降は、いろりろ試しましたが同じ事象を再現できませんでした。

現在は、2012/12/07/(金) 22:50 のパッチを入れた状態にしています。


素人考えで恐縮ですが、TVの名前やオプションを変更したとき、リソース編集を開くとチェックが外れた状態になりますよね。
もしかしたら、これが影響しているのではとも考えました。(今回は、名前もオプションも変更していない状態でチェックが外れていましたが)

いろいろとお時間いただきましたが、はっきりとした原因はわからなくとも一応正常に動いているので、しばらく様子をみたいと思います。
今回と似たようなサイト設計をしている1.0.6-r8があるので、1.0.7にバージョンアップしたときに同じ事象がでるかもしれません。
その時は、また報告いたします。

ありがとうございました。
返信する