Inherited Document Local CSS
TVを使用してドキュメント固有のCSS(生/URL指定でlink)をheadに。階層対応
初出:2007年04/08 更新:2007年04/09
$modx->regClientRSSをほぼそのまま使っています。
ページ固有のCSSが必要な場合に、テンプレート変数に生CSSを書いたり、URLを指定してheadのlink要素で読み込ませたりします。
プラグイン設定は &tvCSS=CSS TV name;string;documentLocalCSS で、イベントはOnPageWebInit。CSS TV nameで指定したTVにCSSを書きます。
TVのDefaultは空欄にします。親ドキュメントの設定は子ドキュメントで全て有効になるので、単にTextarea;@INHERITなテンプレート変数を作成して[*tvCSS*]する方法と比較すると、前者は子ドキュメントに影響を与えたくないその場限りのCSSを書きたい場合(@INHERITとはいえ、子ドキュメントで何か書いたら親の設定を上書きします)に、このプラグインは綺麗にMODxの階層構造を利用しているサイトに適しています。
/*<?php*/
/*
Title : Inherited Document Local CSS
Version : 2.00
Author : uglydog
Date : 20070408
Website : http://nanabit.net/modx/inherited-document-local-css
Params : &tvCSS=CSS TV name;string;documentLocalCSS
Event : OnWebPageInit
TV : documentLocalCSS (Textarea): write CSS(inside <style>..</style>) or CSS URL
Default: (blank)
*/
$tvCSS = isset($tvCSS) ? $tvCSS : 'documentLocalCSS';
$e = &$modx->event;
switch ($e->name) {
case "OnWebPageInit":
// Assume the document is not digged deep than 1000 level.
$parents = array_reverse($modx->getParentIds($modx->documentIdentifier,
1000, array($modx->documentIdentifier)));
foreach ($parents as $parent) {
$css_source_tv = $modx->getTemplateVarOutput($tvCSS, $parent);
if ($css_source_tv && isset($css_source_tv[$tvCSS]) && $css_source_tv[$tvCSS]) {
$css_source = $css_source_tv[$tvCSS];
$modx->regClientCSS( strpos($css_source, 'http')===0 ? $css_source : '<style type="text/css">'.$css_source.'</style>');
}
}
// break;
default:
return;
}
/*?>*/
