MODx1.0.21JでのDittoに関して

質問全般・改善要望
返信する
masayasu_s
メンバー
メンバー
記事: 32
登録日時: 2012年9月14日(金) 07:55

MODx1.0.21JでのDittoに関して

投稿記事 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
-----------------------------------
アバター
yama
管理人
記事: 3237
登録日時: 2009年7月29日(水) 02:50

MODx1.0.21JでのDittoに関して

投稿記事 by yama »

報告ありがとうございます。すぐ修正しますので、しばらくお待ちいただけますでしょうか。
修正できたら動作テストをしていただけると助かります。
masayasu_s
メンバー
メンバー
記事: 32
登録日時: 2012年9月14日(金) 07:55

MODx1.0.21JでのDittoに関して

投稿記事 by masayasu_s »

ありがとうございます。
現地環境を触れないため、来週以降に試してみます。
アバター
yama
管理人
記事: 3237
登録日時: 2009年7月29日(水) 02:50

MODx1.0.21JでのDittoに関して

投稿記事 by yama »

https://github.com/modxcms-jp/evolution ... evelop.zip
上記パッケージでアップデートして試していただけますでしょうか?
原因を調べるために一部の処理を整理しました。
アバター
yama
管理人
記事: 3237
登録日時: 2009年7月29日(水) 02:50

MODx1.0.21JでのDittoに関して

投稿記事 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」なども指定できると思います。
masayasu_s
メンバー
メンバー
記事: 32
登録日時: 2012年9月14日(金) 07:55

MODx1.0.21JでのDittoに関して

投稿記事 by masayasu_s »

テスト版パッケージありがとうございます。
動作テストを試しておりますので、1、2日ほどお時間ください。
masayasu_s
メンバー
メンバー
記事: 32
登録日時: 2012年9月14日(金) 07:55

MODx1.0.21JでのDittoに関して

投稿記事 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) の無いリソースは出力されない。
 --------------------------------------------------------

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

MODx1.0.21JでのDittoに関して

投稿記事 by yama »

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

MODx1.0.21JでのDittoに関して

投稿記事 by yama »

2つ目の例に関しては、pub_dateの値がない場合はゼロと見なすため、出力されないのが
正しい動作のような気がしますが、以前のバージョンでは出力されていたのでしょうか?

http://190129224635-24256.evo.demo.modx.jp/manager/
(ユーザ名・パスワードともにmodx)
1.0.18Jでも同様にサンプルを作ってみましたが、pub_dateを設定していないと出力されないです。
masayasu_s
メンバー
メンバー
記事: 32
登録日時: 2012年9月14日(金) 07:55

MODx1.0.21JでのDittoに関して

投稿記事 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) の無いリソースが出力されました。

よろしくお願い致します。
添付ファイル
debug比較.zip
(26.68 KiB) ダウンロード数: 562 回
アバター
yama
管理人
記事: 3237
登録日時: 2009年7月29日(水) 02:50

MODx1.0.21JでのDittoに関して

投稿記事 by yama »

_ss0205.png
ありがとうございます、とても分かりやすいです。
見たところ古いバージョンでは、pub_dateを設定していないはずなのにデバッグコンソールでは値が取得できているようです。
おそらくpub_dateが設定されていない場合はpublishedonをpub_dateとして見なす仕様になっているのではないかという気がしますが、調べてみます。
アバター
yama
管理人
記事: 3237
登録日時: 2009年7月29日(水) 02:50

MODx1.0.21JでのDittoに関して

投稿記事 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の値と見なす、といった
指定がスニペットコール内で簡潔にできるとよいのかな?と考えています。
masayasu_s
メンバー
メンバー
記事: 32
登録日時: 2012年9月14日(金) 07:55

MODx1.0.21JでのDittoに関して

投稿記事 by masayasu_s »

ありがとうございます。
よろしくお願いいたします。
返信する