Yii2 如何更好的在页面注入CSS
首先
先添加一个widgets,代码如下(提示:使用时注意修改命名空间)
<?php /** * User: yiqing * Date: 2014/12/15 * Time: 0:21 */ namespace year\widgets; use yii\widgets\Block; class CssBlock extends Block { /** * @var null */ public $key = null; /** * @var array $options the HTML attributes for the style tag. */ public $options = []; /** * Ends recording a block. * This method stops output buffering and saves the rendering result as a named block in the view. */ public function run() { $block = ob_get_clean(); if ($this->renderInPlace) { throw new \Exception("not implemented yet ! "); // echo $block; } // $block = trim($block) ; $block = static::unwrapStyleTag($block); $this->view->registerCss($block, $this->options, $this->key); } /** * @param $cssBlock * @return string */ public static function unwrapStyleTag($cssBlock) { $block = trim($cssBlock); /* $jsBlockPattern = '|^<script[^>]*>(.+?)</script>$|is'; if(preg_match($jsBlockPattern,$block)){ $block = preg_replace ( $jsBlockPattern , '${1}' , $block ); } */ $cssBlockPattern = '|^<style[^>]*>(?P<block_content>.+?)</style>$|is'; if (preg_match($cssBlockPattern, $block, $matches)) { $block = $matches['block_content']; } return $block; } }
使用
示例如下:
<?php \year\widgets\CssBlock::begin() ?> <style type="text/css"> .fr { float: right; } .mt10 { margin-top: 10px; } .mt15 { margin-top: 15px; } </style> <?php \year\widgets\CssBlock::end()?>
总结
为什么要这么写?
这样写的好处有两个,有代码提示和有代码高亮!!