Расширить CFormatter, таким образом: при выводе длинных предложений
наш фильтр резал текст и на выходе отдавал 5 первых слов с добавлением многоточия.
В том же GridView или DetailView мы частенько задаём тип поля, например:
'type' => 'raw', 'type' => 'text'
и т.д.
Для GridView это может выглядеть так:
array(
'name' => 'text',
'type' => 'raw',
),
Для DetailView так:
array(
'label' => 'Email',
'value' => ' email@email.com',
'type' => 'email',
'template' => "<tr class=\"{class}\"><th>{label}</th><td>{value}</td></tr>\n"
),
Но, в основном, используется типы такие, как: raw
, email
, image
да url
.
В папке protected/components
создадим новый файл CCFormatter.php
с содержимым:
<?php
class CCFormatter extends CFormatter {
public $numOfWords = 5;
public function formatTtext($value) {
$value = CHtml::encode($value);
$lenBefore = strlen($value);
if($this->numOfWords){
if(preg_match("/\s*(\S+\s*){0,$this->numOfWords}/", $value, $match)){
$value = trim($match[0]);
}
if(strlen($value) != $lenBefore){
$value .= ' ...';
}
}
return $value;
}
}
В файл config/main.php
секцию components
добавим три строчки:
'format' => array(
'class' => 'application.components.CCFormatter'
),
После всех этих несложных манипуляций проверим работоспособность в CDetailView
:
array(
'label' => 'Текст',
'value' => 'Lorem Ipsum - это текст-"рыба", часто используемый в печати и
вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для
текстов на латинице с начала XVI века.',
'type' => 'ttext',
'template' => "<tr class=\"{class}\"><th>{label}</th><td>{value}</td></tr>\n"
),
Автор
: Сергей Жолобов, Xpycm (monoray.ru).