Подсказки по Yii. Глава тринадцатая.
-
CMaskedTextField.
Для удобства и наглядности ввода значения в поле может послужить виджет CMaskedTextField. Например: ввод номера телефона.
В представление запишем:
- <div class="row">
- <?php echo $form->labelEx($model,'phone'); ?>
- <?php
- $this->widget('CMaskedTextField', array(
- 'model' => $model,
- 'attribute' => 'phone',
- 'mask' => '+7-999-999-9999',
- 'placeholder' => '*',
- ));
- ?>
- <?php echo $form->error($model,'phone'); ?>
- </div>
mask - это маска ввода значения,
placeholder - символы до ввода значений пользователем, в данном случае это '*'
В модели будем проверять введённое значение на корректность по регулярке:
- array('phone', 'match', 'pattern' => '/^((\+?7)(-?\d{3})-?)?(\d{3})(-?\d{4})$/', 'message' => 'Некорректный формат поля {attribute}'),
Кстати, http://regexlib.com - сайт с регулярными выражениями на все случаи жизни.
-
statePersister.
Иногда необходимо хранить состояние (значение) какой-либо переменной, но заводить для этого отдельную таблицу в БД или записывать в файл лень.
На помощь придёт statePersister.
Пользоваться крайне удобно и просто. Рассмотрим сразу пример:
- $data = Yii::app()->statePersister->load();
- if (isset($data['count']))
- $data['count']++;
- else
- $data['count'] = 1;
-
- Yii::app()->statePersister->save($data);
Значения сохраняются в файл protected/runtime/state.bin
-
CListView.
Рассмотрим различные "вкусности" виджета CListView.
Имеется обычный блок:
- $this->widget('zii.widgets.CListView', array(
- 'dataProvider'=>$model->search(),
- 'itemView'=>'_view',
- 'itemsTagName' => 'ol',
- 'itemsCssClass' => 'advertising-blocks',
- 'sortableAttributes'=>array('id', 'advert_block'),
- ));
Меняем шаблон вывода:
- $this->widget('zii.widgets.CListView', array(
- 'dataProvider'=>$model->search(),
- 'itemView'=>'_view',
- 'itemsTagName' => 'ol',
- 'itemsCssClass' => 'advertising-blocks',
- 'sortableAttributes'=>array('id', 'advert_block'),
- 'template' => '{pager} {sorter} {items} {sorter} {pager}',
- ));
Меняем текст "Сортировка" -> "Отсортировать по":
- $this->widget('zii.widgets.CListView', array(
- 'dataProvider'=>$model->search(),
- 'itemView'=>'_view',
- 'itemsTagName' => 'ol',
- 'itemsCssClass' => 'advertising-blocks',
- 'sortableAttributes'=>array('id', 'advert_block'),
- 'template' => '{pager} {sorter} {items} {sorter} {pager}',
- 'sorterHeader' => 'Отсортировать по:',
- ));
Добавляем отображение краткой информации:
- $this->widget('zii.widgets.CListView', array(
- 'dataProvider'=>$model->search(),
- 'itemView'=>'_view',
- 'itemsTagName' => 'ol',
- 'itemsCssClass' => 'advertising-blocks',
- 'sortableAttributes' => array('id', 'advert_block'),
- 'template' => '{summary} {pager} {sorter} {items} {sorter} {pager}',
- 'sorterHeader' => 'Отсортировать по:',
- ));
Меняем вывод краткой информации:
- $this->widget('zii.widgets.CListView', array(
- 'dataProvider'=>$model->search(),
- 'itemView'=>'_view',
- 'itemsTagName' => 'ol',
- 'itemsCssClass' => 'advertising-blocks',
- 'sortableAttributes' => array('id', 'advert_block'),
- 'template' => '{summary} {pager} {sorter} {items} {sorter} {pager} {summary}',
- 'sorterHeader' => 'Отсортировать по:',
- 'summaryText' => 'отображаем: {start} - {end}, а всего: {count}',
- ));
Меняем текст, если таблица пуста или ничего не найдено по заданному критерию:
- $this->widget('zii.widgets.CListView', array(
- 'dataProvider'=>$model->search(),
- 'itemView'=>'_view',
- 'itemsTagName' => 'ol',
- 'itemsCssClass' => 'advertising-blocks',
- 'sortableAttributes' => array('id', 'advert_block'),
- 'template' => '{summary} {pager} {sorter} {items} {sorter} {pager} {summary}',
- 'sorterHeader' => 'Отсортировать по:',
- 'summaryText' => 'отображаем: {start} - {end}, а всего: {count}',
- 'emptyText' => 'Ничего нет',
- ));
Обсудить статью на форуме