在Yii中registerCssFile的正确位置是什么?

时间:2011-12-14 12:11:11

标签: php css yii

我是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文件?

也许有一些关于此的风格指南?任何链接都赞赏...

2 个答案:

答案 0 :(得分:6)

我不能代表“官方”正确的地方,但我有一个自定义的基本控制器,我的所有控制器都扩展。我将全局registerCssFile()调用放在此基本控制器的init()方法中,因此它们会自动在整个站点上注册。

如果您正在重复使用部分视图文件,我可以看到在视图中注册CSS 我猜但是 ......

init()控制器方法中包含整个网站的所有CSS可能最有意义,然后使用extensions like these 组合并压缩它。

(除非一个视图在网站上的其他地方没有使用过很多自定义CSS,否则可能。)

编辑:如下面briiC.lv所述,使用themes意味着您需要将所有CSS保留在视图/布局文件中,与Controller代码分开。

答案 1 :(得分:1)

首先,如果我是你,我会完全忘记registerCssFile并且始终只使用registerPackage。通过这种方式,您可以在一个明确定义的位置更换一个字符串,从而交换整个样式。

两个选项:

  1. 您为控制器类创建基类,并将所有register语句放在beforeRender中。这样,您需要为网站上需要不同样式的每个部分使用单独的控制器类。

  2. 您使用模块。然后,您可以在模块类的register调用中放置init次调用。

  3. 不要将registerCss次电话放入视图中。这会很快适得其反。无论您拥有小型网站还是大型网站都无关紧要。

    我个人更喜欢始终使用beforeRender,因为这意味着只会为您的“页面”处理资产,也就是说,路由响应者会向客户端呈现类似HTML的内容。