Архив

Публикации с меткой ‘zii’

Подсветка текста в zii

23 Ноябрь 2010 Михаил Comments off

Marked search text for zii

Все пользуются замечательными виджетами из пакета zii в Yii framework, но иногда в них не хватает приятных мелочей, которые могли бы улучшить их вид. Asics Gel Lyte 3 Pas Cher Вот я и решил показать как можно приукрасить виджет zii.widgets.grid.CGridView подсвечивая текст при использовании поиска в текстовых полях. mu2legendzen fjallraven kanken pas cher

За вывод в ячеек таблицы отвечает класс пакета zii CDataColumn::renderDataCellContent() который мы и будем менять. Nike Air Max 2016 Heren wit Ну точнее не менять (менять сорсы фреймворка некрасиво), а сделаем свой виджет унаследовавшись от него. Maglie Houston Rockets

Создаем новый класс UDataColumn.php в директории для расширений (/protected/extensions/), который унаследуем от от вышеуказанного. Scarpe Nike Online Shop Outlet

 Yii::import('zii.widgets.grid.CGridColumn'); class UDataColumn extends CDataColumn { protected function renderDataCellContent($row,$data) { if($this->value!==null) $value=$this->evaluateExpression($this->value,array('data'=>$data,'row'=>$row)); else if($this->name!==null) $value=CHtml::value($data,$this->name); if ($value===null) { echo $this->grid->nullDisplay; } else { if ($this->grid->filter->attributes[$this->name]) { $find_replace = array(trim($this->grid->filter->attributes[$this->name])=>'<span class="marktext">'.trim($this->grid->filter->attributes[$this->name]).'</span>'); $parts = preg_split('/(< (?:\?[^?]+\?>|[A-Za-z]+(?:[^">]+|"[^"]*")*|!(?:\[CDATA\[(?:[^\]]+|](?:[^\]]|][^>]))*]]|--(?:[^-]+|-(?!->))*--))>)/', $this->grid->getFormatter()->format($value,$this->type), -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); foreach ($parts as $part) { if(!preg_match('/^< (a|img|h)/i',$part)) $part = strtr($part,$find_replace); echo $part; } } else { echo $this->grid->getFormatter()->format($value,$this->type); } } } }

Но это класс не виджета, по-этому еще создаем файл (UGridView.php) уже с самим виджетом и заменяем в нем методы использующие CDataColumn и добавляем новый CSS стиль для подсветки при инициализации виджета.

Yii::import('zii.widgets.grid.CGridView'); Yii::import('ext.UDataColumn'); class UGridView extends CGridView { public function init() { parent::init(); $css =' /* UGridView marked text */ .grid-view .marktext { font-weight: bold; } '; $cs = Yii::app()->getClientScript(); $cs->registerCss(__CLASS__.'#form', $css); Yii::app()->getClientScript()->registerCssFile($this->cssFile); } /** * Creates column objects and initializes them. <a href="http://www.sacadoskanken.fr/">sac a dos fjallraven kanken femme</a> */ protected function initColumns() { if($this->columns===array()) { if($this->dataProvider instanceof CActiveDataProvider) $this->columns=$this->dataProvider->model->attributeNames(); else if($this->dataProvider instanceof IDataProvider) { // use the keys of the first row of data as the default columns $data=$this->dataProvider->getData(); if(isset($data[0]) && is_array($data[0])) $this->columns=array_keys($data[0]); } } $id=$this->getId(); foreach($this->columns as $i=>$column) { if(is_string($column)) $column=$this->createDataColumn($column); else { if(!isset($column['class'])) $column['class']='UDataColumn'; $column=Yii::createComponent($column, $this); } if(!$column->visible) { unset($this->columns[$i]); continue; } if($column->id===null) $column->id=$id.'_c'.$i; $this->columns[$i]=$column; } foreach($this->columns as $column) $column->init(); } /** * Creates a {@link CDataColumn} based on a shortcut column specification string. <a href="http://www.sfgiantsuniform.com/authentic/madison-bumgarner-authentic-jersey.html">Madison Bumgarner Authentic Jersey</a> * @param string $text the column specification string * @return CDataColumn the column instance */ protected 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 UDataColumn($this); $column->name=$matches[1]; if(isset($matches[3])) $column->type=$matches[3]; if(isset($matches[5])) $column->header=$matches[5]; return $column; } }

Теперь везде (по-умолчанию данный виджет используется в admin.php) заменяем старый виджет

...  <a href="https://www.mu2legendzen.com/">buy mu legend zen</a> <a href="http://www.alumip.fr/stats/ctry_usage/">nike air max femme pas cher</a> $this->widget('zii.widgets.grid.CGridView', array( ...

на новый

... <a href="http://www.thefashionoutlet.nl/new-balance-heren.html">New Balance Heren</a> $this->widget('ext.UGridView', array( ... <a href="http://www.sacadosfjallraven.fr/">sac fjallraven pas cher</a>

и наслаждаемся подсветкой текста как тут.

Categories: Coding Tags: , , ,