みなさんこんにちは、小ネタ第6弾です。
今回は、ページが増えてきた時に管理画面の操作を楽にする改造です。変更するのは2行だけですが、
コアソースに手を入れますので、バージョンアップの際のメンテナンス作業が煩雑になるとお考えの方は
適用しないでください。
1.リソース保存時のキャッシュクリアを理解する
MODxがリソース(ドキュメント含む)の保存タイミングでキャッシュをクリアすることは皆さんご存知だと思います。
クリア処理では主に以下のことが行われます(assets/cache/siteCache.idx.phpを見ると理解が深まります)。
(1) assets/cache内のファイル削除(*.html, siteCache.idx.php, sitePublishing.idx.php)
(2) システム設定キャッシュ($modx->config --> siteCache.idx.php)
(3) ページインデックス、エイリアスパス、コンテントタイプキャッシュ( --> siteCache.idx.php)
(4) チャンクキャッシュ( --> siteCache.idx.php)
(5) スニペットキャッシュ( --> siteCache.idx.php)
(6) リフレッシュタイム(公開/非公開スケジュール)の設定( --> sitePublishing.idx.php)
キャッシュのクリアと言うと(1)を想像しますが、実際には全体の処理のほんの一部にすぎません。
MODxは、上記(2)~(5)を事前に行い、データベースへのアクセスを最小限に留めることでページを高速に表示します。
2.ページが増えてくると発生する問題
ページの増加とともに上記(3)の処理時間がリニアに増大していきます。サイト内のページ数が数十ページの場合は、
それほど気になりませんが、数百、数千、・・になると、この待ち時間が耐え難いものになってきます。
3.キャッシュをクリアせずにドキュメントを保存するには・・・
ドキュメントの編集 > ページ設定 > キャッシュのクリア? のチェックを外して保存します。
但し、このチェックは保存するときに一度だけ働き、次回編集するとONに戻ってしまいます。
詳しくはこちら >
http://modxcms.com/forums/index.php/topic,31438.msg190763.html#msg190763
4.コアの改造
改造は簡単。上記3.の「キャッシュのクリア?」のデフォルトをOFFにします。
(バージョンによってコードが変わりますのでご自分のバージョンに合わせて改造してください。下は0.9.6.3の改造例です)
"name=syncsitecheck"のinput要素の"checked"属性を外します。
manager/actions/mutate_content.dynamic.php L750近辺
<?php /* <td><input name="syncsitecheck" type="checkbox" class="checkbox" checked="checked" onclick="changestate(document.mutate.syncsite);" /> */ ?>
<td><input name="syncsitecheck" type="checkbox" class="checkbox" onclick="changestate(document.mutate.syncsite);" />
value="1" をvalue="0"に変更します。
manager/actions/mutate_content.dynamic.php L790近辺
<?php /* <input type="hidden" name="syncsite" value="1" /> */ ?>
<input type="hidden" name="syncsite" value="0" />
5.活用シーンと注意点
上記の改造は、ドキュメント数が多いサイトほど効果が高くなりますが、ドキュメントの保存操作を繰り返し行う、
サイトの初期作成シーンでも効果を発揮します。また、運用者権限を分けて、ドキュメントの編集を専門に行う人に
キャッシュをクリアさせない効果も期待できます。
言うまでもありませんが、上記の改造を施した場合、修正前の古いページが表示されたままになりますので、
ドキュメントの修正&承認がとれた段階で、メニューの「キャッシュのクリア」を行ってください。
「サイトの設定」でドキュメント保存時のキャッシュクリアのデフォルト値を切り替えられると最高なのですが、
それはまた別の機会に。。。
簡単な改造ですが効果抜群です。是非お試しください。