Советы по CMF Yii. Глава шестая.
-
Label, помеченный как обязательный для заполнения.
Крайне редко, но бывает необходимо пометить label, как обязательный для заполнения (звёздочкой), но в правилах написать required нельзя.
Для этого в массив htmlOption передайте required => true:
- echo CHtml::activeLabel($model, 'name', array('required' => true));
-
CGridView. Добавляем раскрывающийся список для сортировки/поиска.
По-умолчанию, в CGridView filter, установленный в значение true, является текстовым полем.
Разберём как сделать его раскрывающимся списком (dropDownList).
В представление добавьте следующий код:
- 'filter' => array(0 => 'Все', 1 => 'Продажа', 2 => 'Аренда'),
Должно получиться типа такого:
- $this->widget('zii.widgets.grid.CGridView', array(
- 'id'=>'apartments-grid',
- 'dataProvider'=>$model->search(),
- 'filter'=>$model,
- 'columns'=>array(
- ...
- array(
- 'name' => 'type',
- 'type' => 'raw',
- 'value' => 'Apartment::getNameByType($data->type)',
- 'filter' => array(0 => 'Все', 1 => 'Продажа', 2 => 'Аренда'),
- ),
- ...
- )
- ));
Осталось добавить в метод search модели нижеприведённый код:
- if ($this->type)
- $criteria->compare('type', $this->type);
В итоге получим такой фильтрующий раскрывающийся список:
-
Одна форма с данными из двух и более моделей.
Предположим, что нам нужна одна форма для добавления/редактирования данных с выводом ошибок из двух моделей (категории и подкатегории).
Экшен для модели Категорий:
- <?php
- ...
- public function actionCreate() {
- $category = new Category;
- $subCategory = new SubCategory;
-
- if(isset($_POST['Category'], $_POST['SubCategory'])) {
-
- $model->attributes = $_POST['Category'];
- $sub->attributes = $_POST['SubCategory'];
-
-
- $valid = $model->validate();
- $valid = $sub->validate() && $valid;
-
- if($valid) {
-
- if($model->save(false)) {
- $sub->category_id = $model->id;
- $sub->save(false);
- $this->redirect(array('view','id'=>$model->id));
- }
- }
- }
-
- $this->render('create', array(
- 'model'=>$model,
- 'sub'=>$sub,
- ));
- }
- ...
- ?>
Представление create модели Category имеет вид:
- <?php
- $this->breadcrumbs=array(
- 'Управление категориями' => array('admin'),
- 'Добавить категорию',
- );
-
- $this->renderPartial('_form',array(
- 'model'=>$model,
- 'sub' => $sub,
- ));
- ?>
И представление _form:
- <div class="form">
- <?php $form=$this->beginWidget('CActiveForm', array(
- 'id'=>'category-form',
- 'enableAjaxValidation'=>false,
- )); ?>
-
- <p class="note">Поля, отмеченные <span class="required">*</span> являются обязательными.</p>
-
- <?php echo $form->errorSummary(array($model, $sub)); ?>
-
- <div class="row">
- <?php echo $form->labelEx($model, 'model_field1'); ?>
- <?php echo $form->textField($model, 'model_field1'); ?>
- <?php echo $form->error($model, 'model_field1'); ?>
- </div>
-
- <div class="row">
- <?php echo $form->labelEx($sub, 'sub_field1'); ?>
- <?php echo $form->textField($sub, 'sub_field1'); ?>
- <?php echo $form->error($sub, 'sub_field1'); ?>
- </div>
-
- <div class="row buttons">
- <?php echo CHtml::submitButton($model->isNewRecord ? 'Добавить' : 'Сохранить'); ?>
- </div>
-
- <?php $this->endWidget(); ?>
- </div>
Обсудить статью на форуме