-
-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathform.extend.cformatter.txt
96 lines (73 loc) · 2.55 KB
/
form.extend.cformatter.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
Расширяем CFormatter
=========================
Задача
------
Расширить [CFormatter], таким образом: при выводе длинных предложений
наш фильтр резал текст и на выходе отдавал 5 первых слов с добавлением многоточия.
Вступление
----------
В том же GridView или DetailView мы частенько задаём тип поля, например:
`'type' => 'raw', 'type' => 'text'` и т.д.
Для GridView это может выглядеть так:
```php
array(
'name' => 'text',
'type' => 'raw',
),
```
Для DetailView так:
```php
array(
'label' => 'Email',
'value' => ' [email protected]',
'type' => 'email',
'template' => "<tr class=\"{class}\"><th>{label}</th><td>{value}</td></tr>\n"
),
```
Но, в основном, используется типы такие, как: `raw`, `email`, `image` да `url`.
Решение
-------
В папке `protected/components` создадим новый файл `CCFormatter.php` с содержимым:
```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` добавим три строчки:
```php
'format' => array(
'class' => 'application.components.CCFormatter'
),
```
После всех этих несложных манипуляций проверим работоспособность в `CDetailView`:
```php
array(
'label' => 'Текст',
'value' => 'Lorem Ipsum - это текст-"рыба", часто используемый в печати и
вэб-дизайне. Lorem Ipsum является стандартной "рыбой" для
текстов на латинице с начала XVI века.',
'type' => 'ttext',
'template' => "<tr class=\"{class}\"><th>{label}</th><td>{value}</td></tr>\n"
),
```
Стоит изучить
-------------
- [CFormatter](http://www.yiiframework.com/doc/api/CFormatter).
- [CDetailView](http://www.yiiframework.com/doc/api/CDetailView).
- [CGridView](http://www.yiiframework.com/doc/api/CGridView).
---
- `Автор`: Сергей Жолобов, Xpycm ([monoray.ru](http://monoray.ru/)).