We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 23276
    • 85 Posts
    こんばんは、Phizeです。お世話になります。
    Subjectの通りなのですが、ドキュメントの「編集日時」を更新しないで設定等を編集することは可能でしょうか?
    あるいは、一時的に「編集日時」の更新を有効/無効にするようなモジュール(?)等はあったりするのでしょうか?

    というのも、ドキュメントの「内容」に関してはスニペットでファイルをincludeしているので全く問題ないのですが、
    「説明」や「キーワード」等の設定に関しては、少し修正しただけでも「編集日時」が更新されてしまいます。

    Dittoなどで「編集日時」順でリスティングしている場合には、内容自体は編集していないのに上に表示されてしまことになるので、これを避けたいです。
    なにか良い方法はないでしょうか…よろしくお願いします。
      • 23276
      • 85 Posts
      ソースを見ていて気づいたのですが、

      /manage/processors/save_content.processor.php: 422行~

      		$sql = "UPDATE $dbase.`" . $table_prefix . "site_content` SET introtext='$introtext', content='$content', pagetitle='$pagetitle', longtitle='$longtitle', type='$type', description='$description', alias='$alias', link_attributes='$link_attributes',
      				isfolder=$isfolder, richtext=$richtext, published=$published, pub_date=$pub_date, unpub_date=$unpub_date, parent=$parent, template=$template, menuindex='$menuindex',
      				searchable=$searchable, cacheable=$cacheable, editedby=" . $modx->getLoginUserID() . ", editedon=" . time() . ", publishedon=$publishedon, publishedby=$publishedby, contentType='$contentType', content_dispo='$contentdispo', donthit='$donthit', menutitle='$menutitle', hidemenu='$hidemenu'  WHERE id=$id;";


      SQL文生成のところでtime()関数が直書きされているので、直接編集しない限りは現状ではできないみたいですね…残念 :’(
        • 19033
        • 892 Posts
        Phizeさん。こんにちは。
        その辺りは私も手動です。。^^;;。

        うちの場合は、更新日順と称して、リストアップしていますが、
        実は、公開日で調整していたりします。リストアップの順番が
        変わって欲しくないときは、公開日を変更しない、とかですね。

        もう少し、スマートな方法はないかなあと思ってはいるんですけど。。
          • 7037
          • 2 Posts
          こんにちは。
          ネットショップのサイトをMODxで構築しようと思い、最近MODxを使い始めました。
          まだ分からないことだらけなのですが、どうぞよろしくお願いします。

          直接の解決策じゃありませんが、わたしはupdatedという名前でテンプレート変数を
          作成して、dittoのfilterでフィルタかけてます。内容に変更のないような編集の場合
          には、updatedをオフにしてdittoでリストアップされないように。ってことですが。

          フィルタかけてしまうとまったくリストアップされなくなってしまうので、うれしくない場合
          も多い気がしますが。

          ちゃんとやるなら、OnBeforeDocFormSaveで以前のeditedonを退避しておいて、
          OnDocFormSaveで退避しておいた日付にupdateとかでできないでしょうか(他力本願
            • 23276
            • 85 Posts
            >>MEGUさん
            その辺りは私も手動です。。^^;;。
            うちの場合は、更新日順と称して、リストアップしていますが、実は、公開日で調整していたりします。

            ありがとうございます。
            MEGUさんのサイトは更新されたときにも上に来てると思ってたんですが、公開日で調整されてたんですね laugh
            もし、できないならそうするか、あきらめるしかないかと思ったんですが…(dendenさんへのレスに続く)


            >>dendenさん

            私もまだなにができて、なにができないかがよくわかっていないので、ひょっとしてできるかなと思ってポストしてみました。どうぞよろしくお願いします smiley
            フィルタを使う方法、とても参考になりました。そして、

            ちゃんとやるなら、OnBeforeDocFormSaveで以前のeditedonを退避しておいて、
            OnDocFormSaveで退避しておいた日付にupdateとかでできないでしょうか(他力本願

            ここでピンときました。早合点でした。
            editedonをどこに待避するか、というのがまだよい方法が思いつかないのですが、テンプレート変数をうまく使えばできそうな気もしてきました。
            できるかどうか試してみようと思います。もしうまくいけば、改めて報告させていただきたいと思います。
            どうもありがとうございました laugh
              • 23276
              • 85 Posts
              こんばんは。なんとか希望の動作をするものができたのでご報告します。
              結局、OnBeforeDocFormSaveイベントとOnDocFormSaveイベントの間で’editedon’フィールドやテンプレート変数の更新処理がされているため、
              あまりうまい方法が思いつかず、無駄なテンプレート変数なども増やしたくなかったのでグローバル変数を使って保持するようにしてみました。
              以下が今回作ってみたプラグインになります。よろしければご利用ください。

              インストール
               1.ダウンロードしたファイル内の「assets」ディレクトリをMODxのトップディレクトリに転送
               2.「phiEditedon」という名前のプラグインを作成
               3.「プラグイン コード (php)」にダウンロードしたファイル内の「phieditedon.plugin.txt」の内容をコピー&ペースト
               4.「プラグイン設定」に次のコードをコピー&ペースト

              &updateTV=Update TV name;string;pe_update&editedonTV=Editedon TV name;string;pe_editedon


               5.プラグインを「OnBeforeDocFormSave」イベントと「OnDocFormSave」イベントに登録
               6.プラグインを保存

              テンプレート変数の作成
               1.「プラグイン設定」の「Update TV name」で設定した名前のテンプレート変数(初期設定では「pe_update」)を作成
               2.「入力タイプ」を「DropDown List Menu」にして、「入力時のオプション値」に次のコードをコピー&ペースト

              Auto==-1||Manual==0||Disable==1


               3.「デフォルト値」に「-1」を入力して、テンプレート変数を保存
               4.「プラグイン設定」の「Editedon TV name」で設定した名前のテンプレート変数(初期設定では「pe_editedon」)を作成
               5.「入力タイプ」から「Date」を選び、テンプレート変数を保存

              使い方
               ドキュメントを保存すると、テンプレート変数の設定値に合わせてドキュメントの編集日時が更新されます。

                Auto: 現在の日時をドキュメントの編集日時として更新。MODxの標準の動作と同等。
                Manual: テンプレート変数Editedon TV nameで設定した日時をドキュメントの編集日時として更新。テンプレート変数Editedon TV nameが未設定の場合はAutoと同等。
                Disable: 前回の編集日時をドキュメントの編集日時として更新。ドキュメントの新規作成時、複製時はAutoと同等。

               なお、テンプレート変数の設定はドキュメントの保存のたびにリセットされます。

               動作確認はMODx 0.9.6でしていますが、DBを操作するプラグインなのでバージョンが違う場合などには注意してください。
                • 7037
                • 2 Posts
                Phizeさん、こんにちは。

                さっそくPhizeさんのお作りになったプラグインを制作中のサイトに導入してみました。MODxのバージョンは0.96です。

                まだ制作中のサイトということもあって、いろんな設定をちょくちょくいじるので、うちではDisableをデフォルトにしてみました。これは便利ですね~。

                実運用でも使わせていただきたいと思います。すばらしいプラグインをありがとうございました!
                  • 23276
                  • 85 Posts
                  こんばんは。相変わらずの小物プラグインですが、お役に立ててよかったです。
                  これで気がねなく設定を変更できるようになりましたし、改めてMODxの可能性を感じました。
                  アドバイスをいただいていなければ、そのままあきらめてしまっていたと思います。ありがとうございました laugh