パラメーターでテンプレートを使用しない
MODxはドキュメント思考のCMSです。ヘッダーやフッターなどサイトに共通する部分は「テンプレート」にまとめ、ページ毎に異なる部分は「ドキュメント」と呼ばれ、表示時にテンプレートに埋め込んで表示されます。(私はXOOPSでいう「テーマ」という言い方のほうが好みです)
Ajaxを使ったサイトでは、あるページの一部分の内容をページ遷移せずに置き換えることが行われます。
この一部分をドキュメントとしたい場合はテンプレートが不要です。MODxではドキュメント毎にテンプレートを指定することができるので、これを「(blank)」と指定すればテンプレートで囲まれずに素のままのドキュメントが得られます。
実際は(blank)指定の場合はテンプレート機能をスキップするわけではなくて、内部的にヘッダー等がないテンプレートを疑似的に使用しているだけです。
ただ、ドキュメント思考のページの優れている点、URIリソースの考え方やSEO的にも、Ajax呼び出しの場合はblank、URLアドレス呼び出しの場合はテンプレートを適用としたいものです。例えばそのページだけにリンクを張りたい時もあります。
POSTまたはGETでパラメーターを渡して、テンプレートを使用しないで表示するようにします。
manager/includes/document.parser.class.inc.php
1167行目あたりの
if (!$this->documentObject['template']) $this->documentContent= "【*content*】"; // use blank template
がblank指定、疑似テンプレート回避をしている個所です。
このブロックの終端に次のコードを追加します。
if($_REQUEST['noTemplate'] == 'blank') $this->documentContent= "【*content*】";
これでGETかPOSTに「noTemplate=blank」とすると、強制的にblank指定と同じ動作をさせることができます。
(「【」と「】」は実際は「[」と「]」です)
例:GETの場合は、
(ドキュメント).html?noTemplate=blank
Extのloadの場合は、
(element).load({url:(url),params:{noTemplate:'blank'}});
jQueryのajaxの場合は、
$.ajax({
url: (url),
dataType: 'html',
data:{noTemplate:'blank'},
success: function(html){
(targetDIV).html(html);
}
});

