MODx(0961p2)で動的ページを静的ページとしてファイル出力している。
フリーソフトのWeb巡回ソフトで動的ページを出力していたのだが、内部コンテンツの変換(特にリンク関係)に不満があった。
出力されたhtmlファイルに対して、変換補正やファイル名の変更が必要だ。
Web巡回出力と変換補正(perlを使用)で膨大な時間を費やす。
そこで、MODxのエクスポート機能を使用してみた。巡回ソフトのようにページャーで作成された「次へ」リンクページは出力されない(当然か)し、出力が遅い。
topでプロセスを見る。

ソースは見ていないが、1ドキュメント単位にhttpdへパケットが送信されているようだ。
(Web巡回ソフトと基本的に同じ動きだ。)
結局、自前でスニペットを作成してhtmlファイル出力することにした。
ポイントは以下。

  1. document.parser.class.inc.phpのexecuteParserのコピーexecuteParserAを作成する。
  2. document.parser.class.inc.phpのprepareResponseのコピーprepareResponseAを作成する。
  3. document.parser.class.inc.phpのoutputContentのコピーoutputContentAを作成する。
  4. executeParserAのprepareResponseの呼出をprepareResponseAにする。
  5. prepareResponseAのoutputContentの呼出をoutputContentAにする。
  6. outputContentAの最後あたり
    echo $this->documentOutput

    をコメントにし、

    $docout = $this->documentOutput;

    のようにしてprepareResponseAへreturnする。後は、prepareResponseA、executeParserAでも同様だ。(必要に応じて不要部分を削除したほうが良い)

  7. 動的出力スニペット
  8. $_REQUESTにアクセスページ(alias)やパラメータを設定する。
  9. $_GETも$_REQUESTと同様に必要に応じて値を設定。
  10. executeParserAを呼出し、取得したページを出力する。

httpdへ再リクエストしないようにしたら、巡回ソフトの出力時間の約1/5の時間で終了するようになった。
最新のMODxのバージョンではエクスポート機能が改善されているかもしれない。
(まだ、最新もインストールしていない)

※MODxの記事を公開すると海外からのクラッカー攻撃が増えるので悲しいかな今回もコメントとトラックバックを中止します。