我的项目中有 GridView 的问题。我正在开发一个 Yii 应用程序并在我项目的不同视图中使用标准 zii 网格视图。我的问题是找到一种方法来从我的项目中的一个地方更改他们的 CSS 样式。我真的不想逐个更改它。有什么建议吗?
4 回答
对于全局设置,您可以像这样编辑应用程序配置文件 main.php:
return array(
…
'components'=>array(
'widgetFactory'=>array(
'widgets'=>array(
'CGridView'=>array(
'cssFile' => Yii::app()->request->baseUrl.'/css/gridview.css',,
),
请参阅指南中的全局自定义小部件部分。
我只是想添加一个片段来阻止它一起加载。添加到主配置中的组件数组中。这从 1.1.3 开始可用
//stop zii loading css
'widgetFactory'=>array(
'widgets'=>array(
'CGridView'=>array(
'cssFile' => FALSE,
),
),
),
或者加载一个特定的样式表
//stop zii loading css and load a specific stylesheet
'widgetFactory'=>array(
'widgets'=>array(
'CGridView'=>array(
'cssFile' => Yii::app()->request->baseUrl.'/css/gridview.css',
),
),
),
要按视图更改它(我知道您说过您不想这样做,但无论如何对于可能正在搜索的任何人来说都是如此)是更改实例的cssFile
属性,如下所示:CGridView
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'user-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'ajaxUpdate' => false,
'cssFile' => Yii::app()->request->baseUrl.'/css/gridview.css',
...
在上面的示例中,我们使用了一个名为gridview.css的 CSS 文件,而不是默认的 CSS 文件。
要全局更改它(跨所有实例CGridView
),您可以在其中一个 CSS 文件中手动覆盖 gridview 的 CSS 属性(请记住文件的加载顺序,您可能需要使用!important
)
或者
您可以简单地编辑位于以下位置的 gridview 的框架资产:
framework/zii/widgets/assets/gridview/styles.css
在搜索了很多关于这个问题之后,我找不到任何好的和标准的解决方案。因此,我使用了一种不寻常且可能不是标准的方法来解决该问题,并将其放在这里以供可能也遇到我的问题的人使用。
这个想法是,当您使用 zii yii 网格视图时,默认情况下,在运行时它会发送一个请求以获取其适当的 CSS 文件,因此在控制器中我不允许它使用以下代码获取其原始文件:
Yii::app()->clientScript->scriptMap = array(
'pager.css' => false,
'styles.css' => false,
);
关键是这段代码阻止了对项目中所有styles.css 文件的所有请求。所以要小心。
我做的下一件事是将请求更改为 sytles.css 和 pager.css 文件。我定义了两个名为 gridStyle.css 和 pager.css 的自定义 css 文件,并使用它们代替这两个原始文件。因此,通过以下代码,我为此使用了一些映射:
Yii::app()->clientScript->scriptMap = array(
'pager.css' => Yii::app()->theme->baseUrl . '/css/pager.css',
'styles.css' => Yii::app()->theme->baseUrl . '/css/gridStyle.css',
);
通过这段代码,我说如果有对 styles.css 和 pager.css 文件的请求,请将它们替换为我的自定义文件。正如我所说,这可能不是一个好的解决方案,但它是我唯一的解决方案。