最近の更新

関連


その他いろいろ

多機能フィードリーダSynapse製作中

2月までは目が回るほど忙しい

MODxでつくる! 最強のCMSサイト カバー
MODxでつくる! 最強のCMSサイト

Inherited Document Local CSS

TVを使用してドキュメント固有のCSS(生/URL指定でlink)をheadに。階層対応
初出:2007年04/08 更新:2007年04/09

この文書のキーワード: PHP, MODx

$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;
}

/*?>*/