1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

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

1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月16日(月) 15:43

-----
ご利用のサーバ:ASP
MODXのバージョン:1.0.14J-r7 → 1.0.14J-r9-rc1
PHPのバージョン: 5.5.8
MySQLのバージョン: 5.6.15-log
ブラウザ:firefox 35.0.1
-----

お世話になっております。
変則な使い方だと思うのですが、複数のTVのそれぞれの複数タグにマッチングしたリソースのみを表示するために
dittoの&documents=部分にdittoを入れ子にしています。
以下のような構造です。

コード: 全て選択

[[Ditto?
&documents=`[[Ditto?  &tpl=`@CODE:[+id+],` &tplLast=`@CODE:[+id+]` &extenders=`tagging` &tagDelimiter=`、` &tagMode=`onlyTags` &tags=`TV01aaa` &tagData=`第一のTV`]]`

&display=`all`
&tpl=`tpl_Lists`
&extenders=`tagging`
&tagDelimiter=`/`
&tagMode=`onlyTags`
&tags=`TV02AAA/TV02BBB`
&tagData=`第二のTV`
&filter=`ProductsStatus,endSales,8`
]]


1.0.14J-r7 まではこれで問題なかったのですが
1.0.14J-r9-rc1ではエラーになりました。

« MODX Parse Error »
MODX encountered the following error while attempting to parse the requested resource:
« Execution of a query to the database failed - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[[Ditto? &id=) AND sc.published=1 AND sc.deleted=0 AND (sc.privateweb=0) GROU' at line 3 »
SELECT DISTINCT sc.id,sc.published,sc.pub_date,sc.createdon FROM `****_modx01`.`modx_site_content` sc LEFT JOIN `****_modx01`.`modx_document_groups` dg on dg.document = sc.id WHERE sc.id IN ([[Ditto? &id=) AND sc.published=1 AND sc.deleted=0 AND (sc.privateweb=0) GROUP BY sc.id
Basic info
REQUEST_URI : /*****/5548/6433.html
Resource : [6433]ページタイトル
Current Snippet : Ditto
Referer : http://test02.*****/manager/index.php?a=1&f=tree
User Agent : Mozilla/5.0 (Windows NT 6.1; WOW64; rv:35.0) Gecko/20100101 Firefox/35.0
IP : 61.45.201.25
Benchmarks
MySQL : 0.0369 s (29 Requests)
PHP : 0.1363 s
Total : 0.1732 s
Memory : 10.58 MB

Backtrace
1 $modx->executeParser()
index.php on line 159
2 $modx->prepareResponse()
manager/includes/document.parser.class.inc.php on line 384
3 $modx->parseDocumentSource()
manager/includes/document.parser.class.inc.php on line 481
4 $modx->evalSnippets()
manager/includes/document.parser.class.inc.php on line 2077
5 $modx->_get_snip_result()
manager/includes/document.parser.class.inc.php on line 1661
6 $modx->evalSnippet()
manager/includes/document.parser.class.inc.php on line 1692
7 eval()
manager/includes/document.parser.class.inc.php on line 1622
8 require()
manager/includes/document.parser.class.inc.php(1622) : eval()'d code on line 1
9 ditto->determineIDs()
assets/snippets/ditto/snippet.ditto.php on line 872
10 ditto->getDocuments()
assets/snippets/ditto/classes/ditto.class.inc.php on line 584
11 DBAPI->query()
assets/snippets/ditto/classes/ditto.class.inc.php on line 901


&documents=の中身部分を「要約(序説)」にいれ
&documents=`[*introtext*]`
とすると表示されるのですが、使用個所が多いため、変更なしで使えるようにならないでしょうか?

よろしくお願いします。
最後に編集したユーザー min-o on 2015年2月17日(火) 10:12 [ 編集 1 回目 ]
アバター
yama
管理人
記事: 3154
登録日時: 2009年7月29日(水) 02:50

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by yama » 2015年2月16日(月) 15:56

http://mng.demo.modx.jp/pack_list/Evolu ... 4j-r7.html
了解です、上記でサンプルを作っていただいてよいでしょうか?
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月16日(月) 17:20

http://150216165713-8500.evo.demo.modx.jp/manager/
サンプル作りました
http://150216165713-8500.evo.demo.modx.jp/features/

MODXの主な特長 (8)に入れ子のdittoを設置
(8)の子リソースにTV01 TV02をつけました。

確認ください

※リンク先がmodx r7ですがここでOKですか?
アバター
yama
管理人
記事: 3154
登録日時: 2009年7月29日(水) 02:50

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

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

確認しました。なるほど、たしかにr7では動作してますね。
スニペットコールの各パラメータの「値」であることを明示するデリミタ文字(3種のクォート文字)は、そのデリミタ文字ではさんだ文字列を値とみなすので、
[[Ditto?
&documents=`[[Ditto? &tpl=`@CODE:[+id+],` &tplLast=`@CODE:[+id+]` &extenders=`tagging` &tagDelimiter=`、` &tagMode=`onlyTags` &tags=`TV01aaa` &tagData=`第一のTV`]]`
たとえば上記のようなスニペットコールの場合、

[[Ditto?
&documents=`[[Ditto? &tpl=`@CODE:[+id+],` &tplLast=`@CODE:[+id+]` &extenders=`tagging` &tagDelimiter=`、` &tagMode=`onlyTags` &tags=`TV01aaa` &tagData=`第一のTV`]]`

このように値として認識します。そのため今回のようなエラーが発生します。

にも関わらずr7で意図通りにパースできているのは、それぞれのスニペットコールを処理する順番がたまたま都合よくできていたのだと思います。この点をヒントにしてもう少し考えてみます。
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月17日(火) 10:07

にも関わらずr7で意図通りにパースできているのは、それぞれのスニペットコールを処理する順番がたまたま都合よくできていたのだと思います。この点をヒントにしてもう少し考えてみます。


なるほど。サンプルでは省略してしまいましたが、実際では入れ子dittoでは以下のパラメーターをこの順で書いています。

コード: 全て選択

&documents=`[[Ditto? &id=`名前` &parents=`親ID` 
&tpl=`@CODE:[+id+],` &tplLast=`@CODE:[+id+]` &extenders=`tagging` &tagDelimiter=`、` &tagMode=`onlyTags` &tags=`[*pagetitle*]` &tagData=`TV01`]]`


参考になれば。
アバター
yama
管理人
記事: 3154
登録日時: 2009年7月29日(水) 02:50

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by yama » 2015年2月17日(火) 10:28

viewtopic.php?p=8175#p8175
こちらを試していただいてよいでしょうか?
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月17日(火) 12:48

1.0.14J-r9-b11サンプルで作ってみましたところうまく動いています。
(下の方■ditto documentsに入れ子部分)
http://150217104207-6744.evo.demo.modx.jp/features/

のちほどアプデしてみます。
ありがとうございます。
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月18日(水) 14:32

1.0.14J-r9-rc1 から 1.0.14J-r9-b11 にアップデートしてみました。
入れ子ditto問題ないです。

1つ見つけた問題個所は
スニペットStartIf と EndIf の
endの方が出力されないようです。

StartIf で<span style="display:none;">が挿入されても
EndIf  の</span>が入らず、StartIf以下が非表示になってしまいます。
アバター
yama
管理人
記事: 3154
登録日時: 2009年7月29日(水) 02:50

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by yama » 2015年2月18日(水) 16:11

後ほどまたベータパッケージをまとめます。パーサ処理に余分な処理があることが分かってまた手を入れたので、また同じテストをしていただく必要があるかも・・すみません。

http://www.hikidas.com/hikidas/modx_res ... _EndIf.php
StartIfは上記のスニペットですよね?どのように書くとよいでしょうか?
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月18日(水) 17:51

こちらこそ、何度もすいません。
テストはできる限り協力させていただきます。

StartIfですが、こんなふうに記述しています。
内側の振り分けがややこしいので、phxを減らすためにStartIf使用しています。

コード: 全て選択

[!StartIf? &not=`1` &var=`ProductsStatus` &value=`endSales` &hoge=`cart`!]
[!StartIf? &not=`1` &var=`ProductsStatus` &value=`previous_noSales` &hoge=`cart-pnrnon`!]
[!StartIf? &not=`1` &var=`ProductsStatus` &value=`soldout` &hoge=`cart-SO`!]
      <div class="cartBox">
        <ul>
[+phx:if=`[*isfolder*]`:is=`0`:then=`<li>[*ProductsOnlineShopcode*]</li>`:else=`[[Ditto? &id=`cart1` &orderBy=`menuindex ASC` &tpl=`@CODE:<li>[+ProductsOnlineShopcode+]</li>` &showPublishedOnly=`1`]]`+]
       </ul>
      </div>
[!EndIf? &hoge=`cart-SO`!]
[!EndIf? &hoge=`cart-pnrnon`!]
[!EndIf? &hoge=`cart`!]


以下のように出力されるはずが

<span style="display:none;">
<div class="cartBox">

</div>
</span>

赤字の閉じspanがなくなってしまいます。
アバター
yama
管理人
記事: 3154
登録日時: 2009年7月29日(水) 02:50

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by yama » 2015年2月18日(水) 18:10

http://150217104207-6744.evo.demo.modx.jp/
こちらにサンプルを作っていただいてよいでしょうか?
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月18日(水) 18:48

作ってみました。
http://150217104207-6744.evo.demo.modx. ... res/menus/

xRayテンプレートにStartIfをつかって記述しています。
メニューとリスト はProductsStatusがsoldoutなので、StartIfで<span style="display:none;">が追加されますが
閉じ/spanがないため、下のcontent部分も非表示になってしまいます。

コンテンツ管理 のProductsStatus=endSalesも同じです。

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

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by yama » 2015年2月18日(水) 19:07

コードが見えやすいようにコンテントタイプをtext/plainに設定してみました。
<span style="display:none;">というのはどこで指定するのかな?と思ったのですが、これってスニペットが追加するんですね?このスニペットが行なうことは出力の出し分けではなく表示(見える/見えない)の出し分けと理解しました。後ほど調べてみます。
アバター
yama
管理人
記事: 3154
登録日時: 2009年7月29日(水) 02:50

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by yama » 2015年2月18日(水) 21:51

http://150217104207-6744.evo.demo.modx. ... res/menus/
調べる前にとりあえず最新のベータの修正ぶんを反映してみましたが、直ってますか?
アバター
min-o
メンバー
メンバー
記事: 305
登録日時: 2009年10月07日(水) 18:32

Re: 1.0.14J-r9-rc1 ditto &documents=にditto入れ子が動かない

投稿記事by min-o » 2015年2月19日(木) 09:58

ありがとうございます。
直っています! :D