MODX Evolution 1.0.6J-r1をリリースしました
2012年4月30日 23時45分 shortlink:http://modx.jp/?id=820
長年の課題であるキャッシュ改善の第2弾です。今回実装された新キャッシュモードは強力。業界最軽量レベルのメモリ消費です。
▲今回実装された新しいキャッシュモードと各CMSの比較グラフ。ただし他のCMSは標準でキャッシュが有効になっていませんのでご注意ください。MODXのキャッシュはネイティブにシステムに組み込まれているため副作用もほとんどなく、キャッシュの存在を意識することなく安定動作します。
その他、タグの記述方法にバリエーションを加え、Dreamweaverなどのオーサリングツールとの相性のよさをさらに高めました。HTMLコメントに埋め込む形で記述することで、オーサリングツールで作ったHTMLコードをそのままMODXのテンプレートとして利用することができます。
これまでのMODXの弱点を補う機能として、チャンクの公開設定機能を追加しました。リソースと同様、公開・非公開・公開開始日時・公開終了日時などを設定できます。これにより、ページ単位の公開・非公開だけでなく、ページ内の各ブロック単位の公開・非公開が自由にコントロールできるようになりました。
MODX Evolution 1.0.6J-r1 ダウンロード
http://code.google.com/p/modx-ja/downloads/detail?name=modx-1.0.6J-r1.zip
注意事項
古いウィジェットを削除しました
viewport・マーキー・ティッカーなど、古いHTML技術を用いるウィジェットを削除しました。古いタイプのパーツのため利用されているケースはめったにないと思いますが、これらのウィジェットを利用している場合はカスタムウィジェットを自作するなどの対応が必要です。もし困った場合は問い合わせフォームやフォーラムなどを通じてご相談いただければフォローいたします。
アップデートの手順
https://modx.jp/docs/update.html
上記を参照してください。
変更内容
新機能・新仕様
- .htaccess自動設定(.htaccessファイルの生成を自動で行ないます。サブディレクトリ設置にも対応)
- 新API $modx->mergeCommentedTagsContent()を追加 (HTMLコメントによる変数記述を行なう)
- 新config [(site_slogan)]を追加(チャンクなどで代用できるため機能的には必要ありませんが、汎用の配布テンプレートを作る際に都合がよいため標準実装します)
- PHPMailer送信エラー時のログ記録(何らかの理由により送信に失敗した場合にログを残します)
- 新キャッシュ「バイパスモード」を追加
- グローバル設定の更新時、設定値がイレギュラーな場合はアラートを表示
- チャンクにpub_date・unpub_dateを実装(公開期間設定)
- チャンクに「公開ステータス」を追加。必要ない時は「非公開」にできます
- チャンク編集画面に「リッチテキストで編集」を追加
- static_pages機能(仮実装)
不具合修正
- ファイルブラウザのPHP構文ミスを修正
- リソース名でダブルクォートを用いるとリソースツリーでコンテキストメニューが使えなくなるため修正
http://forum.modx.jp/viewtopic.php?f=32&t=806 - eFormで&formidが必須パラメータとなっている件は不具合であることが分かったため修正
- @CODEで[~[+id+]~]を展開できないことがあるため修正
- エクスポート機能 フレンドリーURL運用でない場合にエクスポートに失敗する不具合を修正
http://forum.modx.jp/viewtopic.php?f=7&t=792 - 1.0.5J-r10からの.htaccess正規表現ミスを修正
- eformのバージョンチェック
- チェックボックス10個以上でtoo many nested arrayエラーが発生するため修正
http://forum.modx.jp/viewtopic.php?f=32&t=798 - 投稿画面ツールチップがIEで正しく表示されない
http://forum.modx.jp/viewtopic.php?f=32&t=794 - getTemplateVars()が複数の$idnamesを受けたときに、うまく処理できないバグを修正。
- テンプレート変更の操作を行なうとManagerManagerが無効になる
http://forum.modx.jp/viewtopic.php?f=19&t=785 - 投稿画面の閉じタグ忘れ(本家開発元での報告)
- PHPMailer文字化け修正及び多言語対応(タイトル・送信者名など、これまでの問題点をほぼFIX)
- modxDebugConsole.class.phpの$modx グローバル宣言が抜けているため修正
改善
- インストールガイドのデザインを調整
- インストーラのファイル構成を整理
- MODx→MODX
- Ditto summary.extender.inc.php strip_tagsパラメータを廃止
- ManagerManagerの設定チャンクのデフォルトをmm_rulesに
- getjs.phpを廃止(逆に分かりにくいため)
- エレメントのステータスによるカテゴリーソートの出し分けを廃止
- site_contentのtypeでindexを生成する(高速化)
- $modx->purge_log 実行時に全テーブルの最適化を行なう(高速化)
- $modx->purge_event_logを整理(event_logテーブル以外でも使えるように)
- 管理画面カスタマイズプラグイン - 読み込むチャンクを無効にした場合にシステムデフォルトのコードを出力
- 管理画面カスタマイズプラグインに注釈を追加(トラブルが起きた時の対応について)
- autoload.phpでキャッシュ判定できるようにする(モバイル対応などを考慮)
- バイパスキャッシュモードを追加
- PHP4用のmemory_get_peak_usageの記述を整理
- getenv関数を$_SERVER変数に変更(情報を取得できないことが時々あるため)
- エクスポート機能 文字列置換の必要がない場合は置換しない
- エクスポート機能 フレンドリーURL運用時はprefix・suffix入力欄を表示しない
- エクスポート機能 labelで囲む
- ベンチマークタグのパースを行なう関数を作成($modx->mergeBenchmarkContent)
- ソース中の不要なコメントを整理
- file_get_contents関数のエラー抑制を削除
- テンプレート編集画面デザイン整理
- アップグレードスクリプトを整理
- phpSniff.class関連を削除
- browsercheck.inc.phpなど冗長なブラウザ判定処理を整理
- $modx->getUserData()関数を削除
- veriword.phpをディレクトリ移動(整理)
- 不要ファイル削除
- $modx->parsePlaceholder関数を改善
- バックアップマネージャー内の日本語を言語ファイル化
- viewportウィジェットを削除
- jqueryアップデート(1.7.2)
- QuickManagerのバージョンチェック(アップデートミスを防止)
- モジュール新規作成ボタンのアイコンを変更
- 投稿画面の日付入力フィールドではime-modeをdisabled
- チャンク編集画面でRTE変更時にフォームの値を保持する
- チャンクの公開状態によってエレメント一覧の色を出し分け
- チャンク更新時にsaveWait('mutate')を実行
- 新機能 site_htmlsnippetsテーブルにpublished・pub_date・unpub_dateフィールドを追加
- プラグイン設定画面デザイン微調整
- 管理画面デザイン微調整
- OnLogPageHitの実行タイミングを移動(アクセス解析で使いにくいため)
- 各エレメントの編集画面のデザインを調整
- ページキャッシュ生成の際、クエリストリングの違いを反映
- 整理 $this->sendErrorPage()直後のexit;を削除
- ユーザ一覧画面の項目を整理
- モジュール設定画面デザイン調整
- モジュール設定画面のリソースセレクターのチェックボックス要素をlabelで囲む
- 共有パラメータをもつモジュールとキャッシュの更新 https://github.com/modxcms-jp/evolution-jp/issues/10
- モジュール設定画面デザイン調整
- ユーザ情報編集時のパスワードメール送信タイミングの変更(OnManagerChangePasswordイベント発生後に処理)
- getTemplateVars()が複数の$idnamesを受けたときに、うまく処理できないバグを修正。
- 管理画面テーマは現在配布されていないため記述を削除
- サンプルコンテンツ - 問い合わせフォームのisfolderを1にセット
不具合報告・改善要望について
主な改善内容
▲キャッシュ設定として「バイパスモード」を新しく追加しました。バイパスモードに設定すると15KB程度のメモリで動作します。通常、軽量CMSとして分類されるタイプのCMSでも1MB前後のメモリを消費します。
▲キャッシュモードはグローバル設定で切り替えます。
バイパスモードではページ出力を完全なHTMLとして保存し、二度目からのアクセスではシステム本体の処理を通さずキャッシュの中身をそのまま出力します。そのため、スニペットコールを[!キャッシュ無効書式!]で書いてもキャッシュは無効になりません。また、アクセスのたびごとに動的な制御を行なうようなプラグイン処理も使えません。ただし管理画面にログインしている間や、POST操作を行なった場合は、自動的に通常のキャッシュモードにスイッチしますので、QuickManagerやeFormなどは特に問題なく利用できます。
※当サイトは随所に高度なMODXテクニックを用いてますが、現在パイパスモードで安定動作しております。フッタ付近にメモリ消費を表示しておりますので、参考にご覧ください。
また、通常のキャッシュ処理も改善しました。これまでは、リソースIDごとにしかキャッシュを管理できなかったため、たとえばDittoのページ分割処理(数件ごとにページを分ける機能)を用いる場合はキャッシュを無効にして動的に出力する必要がありました。URI単位でキャッシュを管理するようにしましたので、当サイトのニュース記事一覧のようにページを分割する場合でもキャッシュを利用できます。
▲チャンクに「公開ステータス」「公開開始日時」「公開終了日時」「リッチテキストで編集」の設定を追加しました。たとえばバナーの管理などにチャンクを用いている場合、表示期間を自動的に制御することができます。また、不要になったチャンクを一時的に無効にしておくことができます。
これまでのMODXでは、公開期間を設定できるのはリソースのみでした。ページ自体の公開期間制御は簡単にできますが、ページ内の表示内容の公開期間制御はスニペットなどを利用する必要があるため、多少のスキルが必要でした。今回の改善により、チャンクを使って簡単にページ内各部の公開期間を設定できます。
▲既存サイトのHTMLファイルをそのまま利用できるようにしました。a-blog cmsのthemesディレクトリの機能を参考にしています。対応しているファイルの拡張子は .html .htm .xml .rdf .css .js .txt .ico .jpg .jpeg .png .gif です。物理的に存在するパスが異なりますので、CGIやPHPファイルを実行することはできません。また、a-blog cmsのように、テンプレートの切り替えと連動させることは現在のところできません。
ファイル中にスニペットコールやコンフィグ変数を記述・処理できます。当機能をうまく利用すれば、a-blog cmsと同様、既存サイトの取り込みに強いCMSとしてMODXを活用できます。
[[eForm?tpl=フォーム&report=メール]]
▲eFormではformidパラメータが必須とされていましたが、コーディングミスであることが分かったため修正しました。実際には上記のように2つのパラメータ指定のみが必要です。
▲グローバル設定更新時、各部の設定が間違っている場合にアラートを表示するように改善しました。
▲フレンドリーURL設定時は、自動的に.htaccessファイルを生成しますが、正しく生成できない場合は上記のようなアラートを表示します。上記画像の例では、設置ディレクトリに書き込み権限を与えてなかったために生成処理ができず、エラーとなっています。
<!-- #modx [[Wayfinder?startId=0&level=1]] -->
<ul class="navi">
<li>ダミーのメニュー1</li>
<li>ダミーのメニュー2</li>
<li>ダミーのメニュー3</li>
<li>ダミーのメニュー4</li>
<li>ダミーのメニュー5</li>
</ul>
<!-- /#modx -->
上記のように、HTMLコメントで包んだ形でのMODXタグ記述が可能になりました。上記の記述は、
[[Wayfinder?startId=0&level=1]]
実際にはこのように変換されます。
処理時には、HTMLコメントとダミーのHTML記述部分は削除され、変数部分のみが実行されます。スニペットコール・リソース変数・テンプレート変数・チャンク・コンフィグ変数など、ひととおり対応しています。もちろんスニペットコールの複数行記述にも対応しています。
- <!-- #modx
- <!-- /#modx
上記の2つの文字列がトリガーになります。この2つのコメントにはさまれた部分は出力されません。開始コメント内の#modx文字列以降に記述された部分のみが出力されます。
もともとMODXだけでサイトを組み立てている場合はかえって手間がかかるため意味がありませんが、ダミーのデザインコードを残したままMODXのテンプレートとして使えるため、Dreamweaverなどのオーサリングツールを利用してテンプレートを作っている場合は便利に利用できます。この方法はすでにSOY CMSやa-blog cmsなどで高い評価を受けています。今までは、Dreamweaverで作ったHTMLコードはそのままでは使えず、動的出力部分をスニペットコールなどに置き換える作業が必要なため、頻繁にテンプレートを更新する場合は不便でした。
※過去バージョンのMODXでも、OnParseDocumentイベントを用いて同等の機能実装が可能ですが、負荷が高くなるため注意が必要です。
※注意
この書式は最新版では変更されています。
<!--@MODX: [[スニペットコールなど]]-->
<!--@IGNORE:BEGIN-->
・・・出力しない文字列・・・
<!--@IGNORE:END-->
最新版では上記の2つのコマンドを組み合わせます。
WebMatrix版について
これから調整します。
その他
気付いた点があればフォーラムまたは問い合わせフォームからフィードバックをお願いします。フォーラムやブログ、Twitterなどで寄せられた要望はこまめに拾って対応しておりますので、気軽に要望いただければ反映に努めたいと思います。
継続的にスポンサーを募集しており、ご支援に応じて、活動が安定します(特に印刷物の費用が必要です)。近年の活動の充実も、各方面からのご支援によるものです。具体的な条件については個別に相談させてください。
自慢のMODXサイトがありましたら、ぜひ事例掲載にお立ち寄りください。
1.0.6J-r1