我是Yii的新手。
将registerCssFile调用置于控制器的操作中是否正确?
我的意见是,正确的地方是内部视图
例如,我创建了一些用户菜单,并将其包含在我的视图的部分中。我为用户菜单分配了css文件,我不想在每个操作或控制器中包含此user_menu.css
哪个视图使用此用户菜单。所以我在parts/user_menu.php
视图中使用此代码:
<?php
Yii::app()->getClientScript()->registerCssFile(yii::app()->request->baseUrl.'/css/user_menu.css', 'screen');
?>
<ul class="user-menu">
...here comes menu
是对还是我必须在每个操作或控制器中包含此css文件?
也许有一些关于此的风格指南?任何链接都赞赏...
答案 0 :(得分:6)
我不能代表“官方”正确的地方,但我有一个自定义的基本控制器,我的所有控制器都扩展。我将全局registerCssFile()
调用放在此基本控制器的init()
方法中,因此它们会自动在整个站点上注册。
如果您正在重复使用部分视图文件,我可以看到在视图中注册CSS 我猜但是 ......
在init()
控制器方法中包含整个网站的所有CSS可能最有意义,然后使用extensions like these 组合并压缩它。
(除非一个视图在网站上的其他地方没有使用过很多自定义CSS,否则可能。)
编辑:如下面briiC.lv所述,使用themes
意味着您需要将所有CSS保留在视图/布局文件中,与Controller代码分开。
答案 1 :(得分:1)
首先,如果我是你,我会完全忘记registerCssFile
并且始终只使用registerPackage
。通过这种方式,您可以在一个明确定义的位置更换一个字符串,从而交换整个样式。
两个选项:
您为控制器类创建基类,并将所有register
语句放在beforeRender
中。这样,您需要为网站上需要不同样式的每个部分使用单独的控制器类。
您使用模块。然后,您可以在模块类的register
调用中放置init
次调用。
不要将registerCss
次电话放入视图中。这会很快适得其反。无论您拥有小型网站还是大型网站都无关紧要。
我个人更喜欢始终使用beforeRender
,因为这意味着只会为您的“页面”处理资产,也就是说,路由响应者会向客户端呈现类似HTML的内容。