在YiiBootstrap TbGridView
中,列标题默认为^以进行排序。
它在第28行的\protected\extensions\bootstrap\widgets\TbDataColumn.php
文件中提及,如
if ($sort->resolveAttribute($this->name) !== false)
$label .= '<span class="caret"></span>';
因为它显示为列标题,标签旁边有向下箭头。
我希望我的列标题旁边没有插入符号,但我不想在源小部件中更改它,因为这意味着将来更新扩展时会出现问题。
有没有办法用TbGridView
小部件本身的属性做这个?
答案 0 :(得分:1)
如果您不想在该列上禁用排序(也可以删除它),那么您唯一的方法就是使用自己的小部件。因为TbDataColumn
类由于某种原因硬编码到TbGridView中。 (你可以在这里看到Source)
您可以从TbGridView
继承,覆盖该函数并将其替换为调用EDataColumn
类的函数。然后,您可以使用ETbDataColumn
中的TbDataColumn
继承执行相同操作,并覆盖您需要的功能。
e.g。
Yii::import('Bootstrap.widgets.TbGridView');
Yii::import('ext.widgets.ETbDataColumn');
/**
* Bootstrap grid data column.
*/
class ETbGridView extends TbGridView
{
public function createDataColumn($text)
{
if (!preg_match('/^([\w\.]+)(:(\w*))?(:(.*))?$/', $text, $matches))
throw new CException(Yii::t('zii', 'The column must be specified in the format of "Name:Type:Label", where "Type" and "Label" are optional.'));
$column = new ETbDataColumn($this);
......
但是如果你感觉有回馈心情,你可以随时更改YiiBootstrap TbGridView
以使用参数来确定要使用的列类,并在此处向YiiBootstrap提交拉取请求:https://bitbucket.org/Crisu83/yii-bootstrap/pull-requests
要获得源代码中的更改并为其他人解决此问题:)
答案 1 :(得分:0)
我知道我正在回答一个旧问题,但希望这会帮助其他人寻找解决方案。以下是我解决此问题的方法:
假设原始问题是关于在排序中未使用的列上隐藏插入符号,以下css更改应该有助于实现结果而不进行扩展源代码更改。我认为在所有可排序列上显示插入符号是一个错误,而插入符号应仅出现在用于对当前结果集进行排序的列上,并且它应该有正确的方向。
.grid-view thead .caret {
display: none;
}
.grid-view thead .asc .caret,
.grid-view thead .desc .caret {
display: inline-block;
}
.grid-view thead .asc .caret {
border-top: none;
border-bottom: 4px solid;
}