ページ 11

MODx1.0.21JでのDittoに関して

Posted: 2019年1月25日(金) 19:13
by masayasu_s
お世話になっております。
下記環境にてバージョンアップを行ったところ、
Dittoを使用したリスト表示の挙動が異なっておりました。

内容:Dittoにて、公開開始日時(pub_date)の無いリソースが出力されない。
   --------------------------------------------------------
   サンプル①:[!Ditto? &parents=`46` &display=`5` &dateSource=`pub_date` &orderBy=`pub_date DESC`!]

   結果 MODx-1.0.19J:公開開始日時(pub_date) の無いリソースも出力される。
   結果 MODx-1.0.21J:公開開始日時(pub_date) の無いリソースは出力されない。
   --------------------------------------------------------

   --------------------------------------------------------
   サンプル②:[!Ditto? &parents=`46` &display=`5` &filter=`pub_date,1522508400,6|pub_date,1554044399,5`
          &dateSource=`createdon` &orderBy=`createdon DESC`!]

   結果 MODx-1.0.19J:公開開始日時(pub_date) の無いリソースも出力される。
   結果 MODx-1.0.21J:公開開始日時(pub_date) の無いリソースは出力されない。
   --------------------------------------------------------

以前は公開開始日時を入力せずとも表示されていたのですが、
バージョンアップ後表示されなくなってしまいました。

現在はDitto対象のリソースに公開開始日時を入れて対処しておりますが、
編集時の手間が増えてしまっている状態です。
以前と同じ挙動に戻して頂くことは可能でしょうか?

どうぞよろしくお願いいたします。



-----------------------------------
■サーバー環境
OS CentOS 7.5
MODx 1.0.21J

Apache 2.4.37
PHP 7.2.14
MySQL 5.6.43
-----------------------------------

MODx1.0.21JでのDittoに関して

Posted: 2019年1月25日(金) 19:25
by yama
報告ありがとうございます。すぐ修正しますので、しばらくお待ちいただけますでしょうか。
修正できたら動作テストをしていただけると助かります。

MODx1.0.21JでのDittoに関して

Posted: 2019年1月25日(金) 20:35
by masayasu_s
ありがとうございます。
現地環境を触れないため、来週以降に試してみます。

MODx1.0.21JでのDittoに関して

Posted: 2019年1月28日(月) 10:22
by yama
https://github.com/modxcms-jp/evolution ... evelop.zip
上記パッケージでアップデートして試していただけますでしょうか?
原因を調べるために一部の処理を整理しました。

MODx1.0.21JでのDittoに関して

Posted: 2019年1月28日(月) 10:43
by yama
http://modx.jp/docs/extras/snippets/dit ... ilter.html
ドキュメントを整理しました。modeを「5」などと指定するところは「>=」や「gt」などと書くと分かりやすいかも?

https://github.com/modxcms-jp/evolution ... evelop.zip
上記のパッケージでは、比較用の日時の値の指定で「2019-01-28 00:00:00」または「2019-01-28」などの
文字列を指定できるようにしました。(1548601200などと書くのは分かりにくいので)
動作確認してませんが「today」「-1 month」なども指定できると思います。

MODx1.0.21JでのDittoに関して

Posted: 2019年1月28日(月) 23:03
by masayasu_s
テスト版パッケージありがとうございます。
動作テストを試しておりますので、1、2日ほどお時間ください。

MODx1.0.21JでのDittoに関して

Posted: 2019年1月29日(火) 17:13
by masayasu_s
テスト版パッケージ(1/28 14時03分)にて、動作を試してみました。
前回と同様に、公開開始日時を設定したリソースだけがリストに表示されました。

 --------------------------------------------------------
 サンプル①:[!Ditto? &parents=`46` &display=`5` &dateSource=`pub_date` &orderBy=`pub_date DESC`!]
 
 結果 MODx-test-0128:公開開始日時(pub_date) の無いリソースは出力されない。
 --------------------------------------------------------

 --------------------------------------------------------
 サンプル②:[!Ditto? &parents=`46` &display=`5` &filter=`pub_date,2018-04-01,<=|pub_date,2019-03-31,>=`
        &dateSource=`createdon` &orderBy=`createdon DESC`!]

 結果 MODx-test-0128:公開開始日時(pub_date) の無いリソースは出力されない。
 --------------------------------------------------------

よろしくお願い致します。

MODx1.0.21JでのDittoに関して

Posted: 2019年1月29日(火) 22:42
by yama
debug=1 というパラメータを追加すると、デバッグコンソールが表示されると思います。
その中身を教えていただけますでしょうか?
http://190129223108-24256.evo.demo.modx.jp/news/
こちらにサンプルを作りました。中身の文字列などは必要に応じて適当に書き換えてマスクしてください。

MODx1.0.21JでのDittoに関して

Posted: 2019年1月29日(火) 22:49
by yama
2つ目の例に関しては、pub_dateの値がない場合はゼロと見なすため、出力されないのが
正しい動作のような気がしますが、以前のバージョンでは出力されていたのでしょうか?

http://190129224635-24256.evo.demo.modx.jp/manager/
(ユーザ名・パスワードともにmodx)
1.0.18Jでも同様にサンプルを作ってみましたが、pub_dateを設定していないと出力されないです。

MODx1.0.21JでのDittoに関して

Posted: 2019年2月05日(火) 18:45
by masayasu_s
なかなか返事を返せず、申し訳ございません。

現地テスト環境とデモサイトで動作確認したところ、
1.0.18J/19J以前 と 1.0.20J/21J以降 で挙動が変わっている様に見えます。

 各バージョンのdebugログを取得しましたので添付します。

デモサイトでも同じ条件のリソースを用意しましたので、下記ページをご参照下さい。
http://190129224635-24256.evo.demo.modx ... test3.html

 1.0.18Jでも、公開日時(pub_date) の無いリソースが出力されました。

よろしくお願い致します。

MODx1.0.21JでのDittoに関して

Posted: 2019年2月05日(火) 21:28
by yama
_ss0205.png
ありがとうございます、とても分かりやすいです。
見たところ古いバージョンでは、pub_dateを設定していないはずなのにデバッグコンソールでは値が取得できているようです。
おそらくpub_dateが設定されていない場合はpublishedonをpub_dateとして見なす仕様になっているのではないかという気がしますが、調べてみます。

MODx1.0.21JでのDittoに関して

Posted: 2019年2月05日(火) 23:58
by yama
https://github.com/modxcms-jp/evolution ... #L605-L611
添付のzipファイルなどを観察して、概ね分かりました。1.0.18J以前では、上記の処理を通じて、pub_dateの値が
設定されていない場合はcreatedonの値を代入するようになっています。ただし、&orderByでpub_dateをソート基準
として指定していない場合は、この処理を通過しません。この処理は、&orderByによる並び順を整えるためのものだからです。
しかし実際は、並び順に影響を与えるだけでなく、実際には何も設定されていないpub_dateに値が設定されているように
動作してしまいます。それでは困るという報告が実際にありました。

1.0.18Jの時点ではpub_date・unpub_date・editedon・deletedon・publishedonのいずれかを&orderByに加えた
場合にこの処理を通過するようになっていましたが、pub_dateの値が、実際に設定されてない値(つまりcreatedon)
として表示されてしまうことが問題になることが多いため、とりあえずpub_dateとunpub_dateを処理対象から
外したのが1.0.19Jあたりです。publishedonに関しても1.0.15Jあたりで最適化が行われて、実際に公開されている
リソースに関しては値がゼロになることが起きないようになっているので、この処理は不要ということになります。
editedonもだいぶ以前のバージョンから値がゼロになることは基本的にありませんし、deletedonをソート基準とするケースは
めったにないと思いますし(表示できないため)、この部分の処理は本当に必要かどうか見直す必要があるかもしれません。

Dittoの開発が始まった頃は、MODX本体の不具合を拡張機能が補う傾向があったので、歴史的な経緯として
このような仕様になったものと思います。現在は、MODX本体に不具合がある場合は本体をちゃんと修正
しようという流れになっています。(昔は本体開発チームと拡張機能開発者との間に微妙な距離がありました)

ということで、Dittoの基本設計に問題があることが分かったので、整合性のとれる解決方法を考えてみます。
要は、pub_dateが設定されていない場合はcreatedonかpublishedonの値をpub_dateの値と見なす、といった
指定がスニペットコール内で簡潔にできるとよいのかな?と考えています。

MODx1.0.21JでのDittoに関して

Posted: 2019年2月06日(水) 08:52
by masayasu_s
ありがとうございます。
よろしくお願いいたします。