テンプレート変数で 選択肢名A==値A|| の場合、Dittoのtaggingは?

質問全般・改善要望
アバター
min-o
メンバー
メンバー
記事: 302
登録日時: 2009年10月07日(水) 18:32

テンプレート変数で 選択肢名A==値A|| の場合、Dittoのtaggingは?

投稿記事by min-o » 2011年8月05日(金) 18:15

お世話になっております。
-----
[サーバ]
 ホスト:さくらインターネット ビジネスプロ
 ネットワーク:インターネット
 PHP Version 5.2.17
 データベースのバージョン:5.1.51-log
[modx]
 バージョン:1.0.5J
[クライアント]
 ブラウザ:Firefox3
-----

テンプレート変数の入力タイプChackBoxを使って、入力時のオプションを以下のように設定し

コード: 全て選択

対象商品A==<img src="/assets/images/A.png" alt="商品A" />||対象商品B==<img src="/assets/images/B.png" alt="商品B" />||対象商品C==<img src="/assets/images/C.png" alt="商品C" />


Dittoで以下のように出力していました。
-----------------------
項目1【対象商品A画像、対象商品B画像、対象商品C画像】
項目2【対象商品B画像、対象商品C画像】
項目3【対象商品A画像、対象商品C画像】
項目4【対象商品C画像】


------------------------
項目ひとつに付き1リソースで、リソースページのテンプレートに上記のテンプレート変数を関連付けています。


この項目が増えたので、見やすいように以下のように表示したページを別に作りたいのです。
-----------------------
【対象商品A】
項目1、項目3、項目4

【対象商品B】
項目1、項目2

【対象商品C】
項目1、項目2、項目3、項目4


-----------------------

Dittoのtaggingを使ってみたのですが
スニペットコールで以下のどちらにしても何も表示されませんでした。
&tagDelimiter=`,` &tagData=`tv名` &tagMode=`onlyTags` &tags=`対象商品A`
&tagDelimiter=`,` &tagData=`tv名` &tagMode=`onlyTags` &tags=`<img src="/assets/images/A.png" alt="商品A" />`

スニペットコール中の<や="が問題かと、
= => %3D
< => %3C
> => %3E
" => %22
に変更してみましたが、同じでした。

入力時のオプションで 選択肢名A==値A|| の場合はDittoのtaggingは使えないのでしょうか?

説明がすごくややこしくてすいません…。
よろしくお願いします。
kazuike
メンバー
メンバー
記事: 480
登録日時: 2009年8月12日(水) 12:53

Re: テンプレート変数で 選択肢名A==値A|| の場合、Dittoのtaggingは?

投稿記事by kazuike » 2011年8月05日(金) 19:09

色々と条件の組み合わせがありそうな話ですが、
とりあえず、先に確認した方がよさそうなところから…

1)
Dittoのパラメータに「&tagDelimiter=`,`」を指定されているということは、
テンプレート変数の「ウィジェット」に「Delimited List」を指定しているということですよね?

2)
スニペットコールのパラメータに「=」等使えなかったような気がします。
代わりに、コンフィギュレーションファイルを使って、
以下のようにPHPで直接文字データとして指定すれば使えるかもしれません。
(こういうことはやったことが無いので、間違ってたらごめんなさい)

コード: 全て選択

<?php
$tags='<img src="/assets/images/A.png" alt="商品A" />';
?>
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 3077
登録日時: 2009年7月29日(水) 02:50

Re: テンプレート変数で 選択肢名A==値A|| の場合、Dittoのtaggingは?

投稿記事by yama » 2011年8月05日(金) 21:00

kazuike さんが書きました:スニペットコールのパラメータに「=」等使えなかったような気がします。

上記の件ですが、6月にリリースした1.0.5J-r4で使えるようになってると思います。
チェックが少し甘いので、もし今回の件が関係ありそうで且つアップデートできる状況なら確認いただけると助かります・・
(※問題ないはずの%3Dなどでも使えないのは、たぶんTinyMCEが自動的に変換してしまうからではと思いますが)

http://code.google.com/p/modx-ja/source/detail?r=1132
http://code.google.com/p/modx-ja/source/detail?r=1137
「=」と「?」が使えると思います。「&」はまだ対応できてません
「< 」や「 " 」はもともと問題なく使えるはずです
アバター
min-o
メンバー
メンバー
記事: 302
登録日時: 2009年10月07日(水) 18:32

Re: テンプレート変数で 選択肢名A==値A|| の場合、Dittoのtaggingは?

投稿記事by min-o » 2011年8月08日(月) 12:31

返信おそくなってすいません。

>kazuike さま
1)はそのとおりです。
テンプレート変数の「ウィジェット」に「Delimited List」を指定しています。

2)の方法でやってみましたが、コンフィギュレーションファイルではなぜかタグが働かなかったです…。
スニペットコールでは、普通に動く 選択肢名A||選択肢名B||選択肢名C タイプのtvでも試してみましたが、$tags='選択肢名A'; にすると何も表示されませんでした。
スニペットコールのテキストを検索置換してコンフィギュレーションファイルにしたので、記述ミスはないはずなんですが(ミスしてたら警告でますし…)


横ですがコンフィギュレーションファイルに $orderBy を設定するとエラーがでましたので報告します。
$orderBy='menuindex ASC,pub_date DESC';
$orderBy='menuindex ASC';

どちらの場合も以下のエラーが出ます。(※ドメインはxxhogexx変換)
$orderByをとるとエラーはでなくなります。

? MODx Parse Error ?
MODx encountered the following error while attempting to parse the requested resource:
? PHP Parse Error ?

PHP error debug
Error: Invalid argument supplied for foreach()
Error type/ Nr.: Warning - 2
File: /home/xxhogexx/www/home/assets/snippets/ditto/classes/ditto.class.inc.php
Line: 158
Line 158 source: foreach ($orderBy['parsed'] as $item) {

Basic info
REQUEST_URI: /index.php?id=99&quickmanagerclose=1
ID: 99
Current Snippet: Ditto
Current Plugin: PHx(OnParseDocument)
Referer: http://home.xxhogexx.jp/manager/index.p ... kmanager=1
User Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.18) Gecko/20110614 Firefox/3.6.18 ( .NET CLR 3.5.30729)

Parser timing
MySQL: 0.4649 s (67 Requests)
PHP: 0.3180 s
Total: 0.7829 s
アバター
min-o
メンバー
メンバー
記事: 302
登録日時: 2009年10月07日(水) 18:32

Re: テンプレート変数で 選択肢名A==値A|| の場合、Dittoのtaggingは?

投稿記事by min-o » 2011年8月08日(月) 12:34

>yama さま
上記の件ですが、6月にリリースした1.0.5J-r4で使えるようになってると思います。

了解しました。お盆明けになりそうですが、modxのアップデートして、確認してみます。

(※問題ないはずの%3Dなどでも使えないのは、たぶんTinyMCEが自動的に変換してしまうからではと思いますが)

問題のページは「リッチテキストで編集」にチェックせず、テキストタグうちなので、TinyMCEではないと思います。
sama55
メンバー
メンバー
記事: 816
登録日時: 2009年8月03日(月) 08:16

Re: テンプレート変数で 選択肢名A==値A|| の場合、Dittoのtaggingは?

投稿記事by sama55 » 2011年8月10日(水) 10:46

途中参入ごめんなさい。

kazuikeさんが仰るように、テンプレ変数の選択肢の中で"="や"|"を使うのはヤバイ気がします("=="や"||"でなくても)。

影響の大きさは分かりませんが、テンプレート変数の利用方法から考え直してみてはいかがでしょう?つまり、テンプレ変数の選択肢の”値”を、商品画像HTMLタグではなく、一意性が保証されるリソースIDにしてみては?ということです。商用サイトでは、1つの商品に1つのレコードを割りあてて管理するのが常ですから、「対象商品A~Z」をそれぞれリソースで定義し(既にあればグッド)、その属性情報(テンプレート変数)として、商品画像をひもづけます。

この前提が整えば・・・

上記のテンプレート変数の選択肢は@EVAL return $modx->runSnippet('Ditto', array('parents'=>'対象商品群の親リソースID', ・・・)) てな感じでCheckboxの選択構文を動的に生成できますし、項目ごとに選択肢を変えたい場合は、"対象商品A==10||対象商品B==11"と静的に定義することもできます。

また、今回の目的である逆引きリストは・・・

 ・新規にスニペットを作成
 ・対象商品群の名称やリソースIDを抽出(Ditto)
 ・商品リソースIDを配列化(explode)
 ・商品ループ(foreach)
 ・ループ内でtagオプション(値は商品リソースID)を指定してDittoをコール(出力値は項目名)

上記の感じで項目を絞り込めそうな気がします。ただし、この方式はクエリーが多く発行されるので性能はよろしくないと思います。DBAPIで組めば高速に処理できそうですが・・・

参考になれば幸いです。