Yii2 如何更好的在页面注入CSS

Yii · forecho · 于 4年前 发布 · 5597 次阅读

首先

先添加一个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()?>

总结

为什么要这么写?

这样写的好处有两个,有代码提示和有代码高亮!!

本帖已被设为精华帖!
共收到 0 条回复 Yii2 Widgets CSS
没有找到数据。
添加回复 (需要登录)
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册