变态方法解决css顺序问题

如果在views里面添加cssfile,默认会输出到最上面,这样的话,有时候views里注册的cssfile的某些样式会被layout里注册的cssfile的样式覆盖。造成显示问题。此变态类就是让在views层添加的cssfile输出到所有cssfile的最下面。把layout的样式覆盖掉。




/**

 * Description of BTClientScript

 * 变态处理css顺序问题。。。

 * @author bamboo

 */

class BTClientScript extends CClientScript

{


    protected $secondCssFiles = array();


    public function registerSecondCssFile( $url, $media='' )

    {

        $this->secondCssFiles[$url] = $media;

        $params = func_get_args();

        $this->recordCachingAction('clientScript', 'registerCssFile', $params);

        return $this;

    }


    public function render( &$output )

    {

        if (!empty($this->secondCssFiles))

        {

            foreach ($this->secondCssFiles as $cssFile => $media)

                $this->cssFiles[$cssFile] = $media;

        }

        parent::render($output);

    }


}



然后在config里配置




'components' => array(

        'clientScript' =>array(

            'class' => 'BTClientScript',

        ),

        ...

),



如果大家有更好的方法,请告诉我~~~

你可以把你自己的css file放到<title>后。不用写新的代码。

感谢强的回复,views里面没有<title>啊, 要写也只能写到layout里,这样每个页面也都要加载了。

貌似我就是写在view里面,css文件放在页面任何地方都能生效

不是生效问题,而是css 有重复定义的样式的话,下面的会覆盖掉上面的。如果顺序发生问题,就会导致错误

实际上,没必要添加代码,qiang的回复不太详细,具体的做法应该是:

layout中导入css文件的位置应该在<title>标签前面,这样,view文件中的css文件就会被插在laoyout和<title>之间。位置示意如下:



layout_css_file


&gt;your_view_css_file  // will be inserted automaticly


&lt;title&gt;&lt;/title&gt;


如果你在layout中把




<link rel="stylesheet" type="text/css" href="xxx.css">



插入在了<title>下面,view中的css就只有被覆盖的份儿了。

我来分享一下我的办法,我就是在重写的Controller基类里面新建了一个属性,cssFiles,然后在layout里面判断文件是否存在,并且输出,这样就可以达到目的了,即便JS文件文件也可以这么解决