Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP для продвинутых.docx
Скачиваний:
16
Добавлен:
01.07.2025
Размер:
12.54 Mб
Скачать

20. Виджет cDetailView

С данным виджетом мы уже сталкивались, когда генерировали шаблон с помощью gii-генератора. Виджет CdetailView позволяет осуществить детальный просмотр записей таблицы базы данных.

Рассмотрим сгенерированный с помощью gii-генератора шаблон view, находящихся в папке views/имя_контроллера.

Сгенерированный виджет CDetailView. Листинг 20.1

<?php $this->widget('zii.widgets.CDetailView', array(

'data'=>$model,

'attributes'=>array(

'id',

'picture',

'name',

'about',

),

)); ?>

Т.е. из модели $model выводятся на экран следующие поля: id, picture, name, about. В модели у каждого поля есть свой label.

Label для полей модели. Листинг 20.2

public function attributeLabels()

{

return array(

'id' => 'ID',

'picture' => 'Фото',

'name' => 'Ф.И.О',

'about' => 'Программа',

);

}

На экране получим следующее:

Входящие параметры:

data – содержит загруженную из контроллера модель.

attributes – следующим параметром передается массив атрибутов. Данный параметр содержит значения всех полей таблицы базы данных, которые нужно вывести в шаблоне.

Данный виджет показывает специальную таблицу, которая выводит на экран поля (из атрибута attributes) таблицы базы данных.

Мы можем добавить поля.

Добавление полей. Листинг 20.3

<?php $this->widget('zii.widgets.CDetailView', array(

'data'=>$model,

'attributes'=>array(

'id',

'picture',

'name',

'about',

array( // related city displayed as a link

'label'=>'ФИО',

'type'=>'raw',

'value'=>CHtml::link(CHtml::encode($model->name),

array('candidats/view','id'=>$model->name)

),

),

),

)); ?>

Для каждого элемента можно указать массив с дополнительными атрибутами, например так можно вместо текстового значения, вывести фото.

Вывод изображения. Листинг 20.4

'picture' => array(

'label'=>'фото',

'type'=>'raw',

'value'=>CHtml::image(Yii::app()->request->baseUrl.'/images/'.$model->picture,'', array('width'=>'200px'))

),

Если не прописть значение raw для элемента type, то вместо изображения увидим html-код изображения.

21. Виджет chml, хелперы html

Хелперы в Yii это такие вспомогательные пользовательские функции, которые могут вызываться из любых мест программы и выполнять какие либо простые преобразования.

Хелперы ссылок

В YII имеется несколько хелперов, позволяющих упростить работу над создаием ссылок: CHtml::link(), CHtml::form(), CHtml::refresh(), CHtml::ajaxLink().

Использование CHtml::link(). Листинг 21.1

<?=CHtml::link('Это ссылка', array('base/index')?>

Обратите внимание, на то, что при формировании ссылок мы не используем url, а обращаемся непосредственно к самому экшну. Поскольку у нас определены правила конфигурации роута, мы получим следующее: index.php/home

Использование CHtml::link() с передачей параметра $_GET[‘name’]. Листинг 21.2

<?=CHtml::link('Это ссылка', array('base/index', 'name'=>'Ok'))?>

Получим такую ссылку: index.php/home?name=Ok

Если необходимо в экшн передать параметры, можно воспользоваться ключом alias

Использование CHtml::link() с передачей параметров через alias. Листинг 21.3

<?=CHtml::link('Это ссылка', array(

'base/page',

alias’=>’about’

'name'=>'Ok'

))?>

Для передачи в ссылку дополнительных атрибутов, нужно воспользоваться еще одним массивом.

Использование CHtml::link() с передачей параметров через alias. Листинг 21.4

<?=CHtml::link('Это ссылка', array('base/page'),

array(‘target’=>’_blank’,

id’=>’link’))?>

Автоматическую генерацию ссылок можно использовать и в контроллерах.

Формирование ссылки в контроллере. Листинг 21.5

public function actionPage($alias){

echo 'Page: ' .$alias.'<br />';

echo $this->createUrl('base/page', array('alias'=>'about'));

echo '<br />';

echo $this->createAbsoluteUrl('base/page', array('alias'=>'about'));

}

На экране увидим следующее:

Page: about

/yii/index.php/about

http://localhost:8080/yii/index.php/about.

Мы также можем использовать методы шаблона. Только при этом необходимо помнить, что если в контроллерах можно не указывать название метода и контроллера, а обращаться к методу через $this->. Тогда как при вызове методов из шаблона, необходимо использовать полное имя класса и метода.

Формирование ссылки в контроллере. Листинг 21.6

echo yii::app()->createUrl(‘base/page’, array(‘alias’=>’about’));

echo yii::app()->createAbsoluteUrl(‘base/page’, array(‘alias’=>’about’));

Хелпер encode()

Данный хелпер предназначен для проверки вводимых пользовтельских значений, например для предотвращения XSS-атаки.

Использование хелпера encode. Листинг 21.7

<?php echo CHtml::encode($data->getAttributeLabel('id')); ?>

Хелпер форм

Форма с кнопкой. Листинг 21.8

<?php echo CHtml::form(‘page/new’,’GET’,array(‘class’=>’form’));?>

<?php echo CHtml::submitButton('Submit'); ?>

<?php echo CHtml::endForm()?>

Первый параметр CHtml::form – экшн обработчик формы, второй – способ передачи данных, POST или GET. Третий параметр – массив дополнительных данных.

Параметр для submitButton – это текст, кнопки,т.е. значение для атрибута value кнопки submit.

Элемент формы text. Листинг 21.9

<?php echo CHTML::textField('name',array('size'=>60)); ?>

Рассмотрим создание выпадающего списка

Выпадающий список для выбора пола. Листинг 21.10

<?php echo CHtml::dropDownList('listname', ‘’,

array('M' => 'Male', 'F' => 'Female'));

Первый параметр – имя атрибута name. Второй параметр – строка, выбранная по умолчанию. Третий параметр – массив данных для option.

Для вывода ассоциативного массива из модели можно воспользоваться методом listData.

Ассоциативный массив из модели. Листинг 21.11

$a = CHtml::listData($model,’id’,’title’);

<?php echo CHtml::dropDownList('listname', ‘’, $a ?>

Для передачи hmlt опций, можно воспользоваться четвертым параметром, массивом данных.

Ассоциативный массив из модели. Листинг 21.12

$a = CHtml::listData($model,’id’,’title’);

<?php echo CHtml::dropDownList('listname', ‘’, $a,

array(‘id’=>’test’) ?>

Элемент формы textarea:

textarea. Листинг 21.13

<?php echo CHTML::textArea('about',array('rows'=>6, 'cols'=>50)); ?>

Элемент формы file:

file. Листинг 21.14

<?php echo CHTML::fileField('picture'); ?>

Хелпер изображений

image. Листинг 21.15

CHtml::image(Yii::app()->request->baseUrl.'/images/'.$model->picture,'', array('width'=>'200px'))

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]