他ドキュメントを何度も参照する場合のDB負荷軽減用スニペット「SetDocumentVars」 | MODxで作ってみたり改造してみた

他ドキュメントを何度も参照する場合のDB負荷軽減用スニペット「SetDocumentVars」

UltimateParent,GetField等で親ドキュメントや他ドキュメントを何度も参照する場合、当然ですが、その度にDBアクセスが発生するので、DB負荷を軽くする為に、読み込んだドキュメントのテンプレート変数をプレースホルダーに置き換えるスニペットを作ってみました。

ソースにサンプルを記載していますので、参考にしてみてください。
テストはMODx1.0.2J+PHxで行っています。Dittoのプレースホルダーに組み込んでも動作したので、ほぼ大丈夫と思いますです。

ダウンロードはこちら。スニペット名は「SetDocumentVars」としてますが、なんでもいいです。

<?php
#::::::::::::::::::::::::::::::::::::::::
# Created By:Takayuki Hirosawa (speed-fish.com).
#
# Date: Feb 08, 2010
#
# Changelog:
# Feb 08, 2010 -- initial release
#
#::::::::::::::::::::::::::::::::::::::::
# Description:
#    for database access performance snipet.
#    set TemplateValue of document to chunk of placeholder.
#
#    指定されたドキュメントIDのテンプレート変数をプレースホルダーに一括セットします。
#    DBへのアクセス軽減用のスニペットです。
#
# Params:
#     &ph: chunk name for convert.
#     &id : (optional) document id: default current document id.
#     &key : (optional) placeholder's key code. default blank
#
#     &ph [string]
#        プレースホルダー用のチャンクを指定。必須項目
#
#     &id [string]
#        対象のドキュメントIDを指定。UltimateParent等と組み合わせてもOK。オプション項目。
#
#     &key [string]
#        プレースホルダーのキー。使い方はサンプルを参照。オプション項目。
#
# Example Usage:
#
# example 1:
#    [ [SetDocumentVars? &ph=`exsampleChunk` &key=`sdv` ] ]
# placeholder 'exsampleChunk' case 1:
#     [ +sdv.pagetitle+ ]
#     [ +sdv.longtitle+ ] etc...
#
# example 2:
#    [ [SetDocumentVars? &ph=`exsampleChunk` ] ]
# placeholder 'exsampleChunk' case 2:
#    [ +pagetitle+ ]
#    [ +longtitle+ ] etc...
#
#
#::::::::::::::::::::::::::::::::::::::::

/* initialize */
$temp = '';
$id = isset ($id) && intval($id) ? intval($id) : $modx->documentIdentifier;
$key = isset ($key) ? $key . '.' :'';
if (! $ph) return 'Please set placeholder chunkname.';

/* Execution */
$chunkArr = array();
$chunkArr = $modx->getTemplateVarOutput('*',$id);
$temp = $modx->parseChunk($ph, $chunkArr, '[+'.$key, '+]');
return $temp;

?>

#多分もう他の人が作ってると思うんですけどね。これ。探すのがめんどくさかったんで作ったというか。

過去の経緯:
テンプレート変数増やしたら、DBアクセス数増えて遅くなったんだけど


他ドキュメントを何度も参照する場合のDB負荷軽減用スニペット
最終更新日
2010.02.08 (月)
最終更新者
Takayuki Hirosawa