[ ページコメント(0) ] [ トラックバック(0) ]
Counter: 1958,
today: 2,
yesterday: 10
CSSを分割する
cssの定義が多くなったら
やはりファイルを分割して分けたくなります。
cssの読み込みはレイアウト側で行っているため、
個々のビューで行うことはできません。
ですので別の方法を使用することになります。
今回は2つの方法を説明します。
一つめはアクションでsetする方法です。
専用の配列を決めておき、
コントローラにsetします
$css_array = array( 'form', 'div' ); $this->set( 'css_array', $css_array );
あとはレイアウトファイルにてforeachで回すだけです。
<?php foreach( $css_array as $row ){ ?>
<?php echo $html->css( $row ); ?>
<?php } ?>
ただ、上記の方法ではいちいちsetするのが面倒くさいので、
アクション毎に自動的に読み込むようにします。
専用のCSSヘルパーを作成し、
レイアウトに以下の構文を追加します。
<?php echo $css->css( empty( $css_specify ) ? '' : $css_specify ); ?>
たったこれだけで、
例えば/users/list/にアクセスした時は
css/users_list.cssが読み込まれるようになります。
$css_specifyを指定すれば指定したものを代わりに読み込みます。
一応ファイルがない時は何も出力しないようになっています。
こっちの方が楽ですね。
CSSヘルパーは以下になります。
HTMLヘルパーをぱくっただけです。
class CssHelper extends Helper
{
var $helpers = array( 'Html' );
function css( $path = '', $rel = 'stylesheet', $htmlAttributes = null, $return = false)
{
if( !$path )
{
$path = $this->params['controller'] . '_' . $this->action;
}
$url = "{$this->webroot}" . (COMPRESS_CSS ? 'c' : '') . CSS_URL . $this->themeWeb . $path . ".css";
$fpath = CSS . $path . '.css';
if( !file_exists( $fpath ) ) return '';
if ($rel == 'import') {
return $this->output(sprintf($this->tags['style'], $this->Html->parseHtmlOptions($htmlAttributes, null, '', ' '), '@import url(' . $url . ');'), $return);
} else {
return $this->output(sprintf($this->tags['css'], $rel, $url, $this->Html->parseHtmlOptions($htmlAttributes, null, '', ' ')), $return);
}
}
}
付箋の編集