2013-01-10 22 views
1

在YiiBootstrap TbGridView中,列標題默認使用^來排序,如下所示。文件\protected\extensions\bootstrap\widgets\TbDataColumn.php在像Yii Bootstrap Gridview列標題顯示脫字符號

if ($sort->resolveAttribute($this->name) !== false) 
    $label .= '<span class="caret"></span>'; 

由於此其表示作爲列標題與旁邊的標籤向下箭頭的提及就行28

及其。

我想我的列標題旁邊沒有插入符號,但我不想在源小部件中更改此標記,因爲這意味着我們未來可能會更新擴展。

有什麼辦法可以用TbGridView小部件本身的屬性來做到這一點嗎?

+1

我明白YiiBootstrap在做什麼,爲什麼你不想改變它,但不清楚有什麼問題?你不想要脫字符嗎?你想定製它嗎? – Paystey

+0

是的。我不希望在標題中出現插入符號。有什麼方法可以在我們的編碼中自定義它,而不是在文件TbDatacolumn中進行更改 – ASD

回答

1

如果你不想禁用對該列的排序(這也將擺脫它),那麼你唯一的方法就是使用你自己的小部件。由於某種原因,TbDataColumn類被硬編碼到TbGridView中。 (你可以在這裏看到Source

您可以從TbGridView繼承,覆蓋該功能與調用您的EDataColumn類,而不是一個函數替換它。然後,您可以繼續從TbDataColumn繼承ETbDataColumn,並覆蓋您需要的功能。

例如

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使用參數來確定要使用的列類,並提交pull請求到這裏YiiBootstrap:https://bitbucket.org/Crisu83/yii-bootstrap/pull-requests 要獲得更改放在源代碼中,併爲其他人解決這個問題:)

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; 
}