2015-05-20 5 views
0

Я просто пытаюсь переопределить класс CGridColumn, но почему-то его не переопределяет.Класс переопределения CGridColumn

мой код ниже

<?php 

Yii::import('zii.widgets.grid.CGridColumn'); 

class CGridColumnCustom extends CGridColumn 
{ 
    // new variable that will bind near header 
    public $headerFilter; 


    public function renderHeaderCell() 
    { 
     $this->headerHtmlOptions['id']=$this->id; 
     echo CHtml::openTag('th',$this->headerHtmlOptions); 
     $this->renderHeaderCellContent(); 
     $this->renderFilterHeaderCellContent(); 
     echo "</th>"; 
    }  

    #------------------------------------------------------------------------------------ 
    # custom function that will concat with renderHeaderCellContent at renderHeaderCell 
    #------------------------------------------------------------------------------------ 
    protected function renderFilterHeaderCellContent() 
    { 
     echo trim($this->headerFilter)!=='' ? $this->headerFilter : $this->grid->blankDisplay; 
    } 

} 
?> 

и я добавил этот файл (CGridColumnCustom.php) в папке компонентов и я также импортировал этот файл в CustomerModule.php файл, как показано ниже

$this->setImport(array(
      'customer.components.*',   
     )); 

но когда я пытаюсь реализовать свою пользовательскую функцию, как показано ниже в файле вида

'columns'=>array(
     array(
     'name' => 'Name', 
     'value' => '$data->Name', 
     'type' => 'raw', 
     'headerFilter'=> '<span class="name-filter-head" onclick="alert(\'test\');">&nbsp;CustomFilter</span>', 
     ), 

затем оно ниже будет

Свойство "CDataColumn.headerFilter" не определено.

Но если я непосредственно добавил эти изменения в файл ядра в CGridColumn.php в gii.widgets.grid то его работает нормально, но я не хочу, чтобы изменить в базовом файле.

+0

В отличие от сайтов форума, мы не используем «спасибо» или «Любая помощь приветствуется», или подписи на [так] См «[Должен„Привет“,„спасибо,“слоганы, и. приветствия удаляются с должностей?] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-sa lutations-быть удалены, от-сообщений). Кстати, это «Спасибо заранее», а не «Спасибо в продвинутый». –

+0

Вы не говорите GridView, чтобы использовать свой настраиваемый столбец, поэтому он использует CDataColumn по умолчанию (у которого нет заголовка headerFilter). Вы должны указать «класс», как в ответе ниже. Возможно, вы должны указать полный путь, то есть '' class '=>' ext.CGridColumnCustom ', '(или где вы его разместили). Что-то в этих строках – Viacheslav

+0

@snegostup я также пробовал с '' class '=>' CGridColumnCustom'', и я добавил этот CGridColumnCustom.php в свою папку компоновщиков. мне нужно положить его в папку расширения? –

ответ

1

Попробуйте сделать это следующим образом:.

Первое, что (на самом деле не уверен, если это уместно, но назвать свой класс CGridCustomColumn со словом «Column» на конце

Во-вторых, вид должен быть таким затем:

'columns'=>array(
     array(
      'header' => 'CGridCustom', 
      'class' => 'CGridCustomColumn' 
      'value' => '$data->Name' 
      'type' => 'raw' 
     ), 
+0

Не работает. –