After reading the guide and looking at the API, I'm still not exactly clear how to have a widget load it's own CSS file.
I see CClientScript has some 'register' functions, then I would call render() in some fashion?
I don’t get it
After reading the guide and looking at the API, I'm still not exactly clear how to have a widget load it's own CSS file.
I see CClientScript has some 'register' functions, then I would call render() in some fashion?
I don’t get it
Here's what I have. The CSS file does not get loaded into the head. I need some call in the view, right? But what it is? I pieced this together from the guide's 'Creating Extensions' section:
I can see the CSS file placed into an Assets directory, so that part is working.
Might it be that
should be:
?Ah, good catch, I corrected that.
I still don't see the CSS though.
Here's what works:
Maybe there's a better way.
Did you read the “Creating Extensions” section of the guide? I think it describes exactly what you want. E.g. you could use CWebApplication::assetManager to publish any CSS file that is bundled with your widget.
I read it and did manage to get the asset published but couldn't get the CSS to load. Would you happen to have a working example with minimal code I could look at? I also looked at the components/widgets included with the framework but couldn't get my own version to work.
I would like to get it done in the most Yii-ish way to avoid problems when deploying
Your example above should work. Lets put it together again (with some cleanup ):
<?php class detailBar extends CWidget { public $cssFile; public function run() { $cs=Yii::app()->getClientScript(); if($this->cssFile===null) { // detailBar.css must be in the same directory as detailBar.php $file=dirname(__FILE__).DIRECTORY_SEPARATOR.'detailBar.css'; $this->cssFile=Yii::app()->getAssetManager()->publish($file); } $cs->registerCssFile($this->cssFile); $this->render('detailBar'); } }
Also make sure that in your Action that renders the view which uses your widget you call render() not renderPartial().
Works perfectly. Thanks Mike