- •Оглавление
- •I. Инструментарий
- •II. Шаблоны проектирования
- •1. Простой
- •2. Шаблонная функция
- •3. Метод буферизации
- •III. Фрэймворк Kohana
- •1. Знакомство с Kohana
- •2. Роутинг
- •7. Взаимодействие модели, контроллера и шаблона
- •8. Создание новых классов и подключение сторонних библиотек
- •9. Конфигурирование
- •10. Языковые файлы
- •11. Системные сообщения
- •12. Хелперы
- •Мы можем использовать любые строковые функции php, добавляя к ним класс utf8
- •13. Этапы создания проекта
- •14. Виджеты
- •Сложные запросы
- •17. Модуль orm
- •Т.Е. Если мы вторым параметромне указываем идендификатор, мы добавляем запись, если указываем – мы обновляем строку с указанным идентификатором.
- •Но если мы попытаемся удалить запись, которой не существует, то увидим сообщение об ошибке. Чтобы избавиться от этой ошибки, есть специальный метод, который проверяет, возвращает ли запрос результат.
- •Если метод возвращает true, то происходит удаление записи.
- •Если таблица userimage связана стаблице user связью belongs_to, то таблица user связана с таблицей userimage связью has_many.
- •19. Использование orm в виджетах
- •20. Модуль Auth
- •21. Модуль Image
- •22. Совместное использование модуля Image и js-скриптов, об-рабатывающих изображения.
- •Далее в контроллер добавим функцию для работы с изображениями.
- •В контроллере произведем вставку изображений в папку и запись в таблицу.
- •Чтобы вывести постраничную навигацию, например, на страницу пользователей, нам сперва нужно узнать общее количество пользователей, которое впоследствии нужно передать в параметр total_items.
- •А вот и сам экшн:
- •Как видно из листинга в шаблон мы передали переменную pagination, в которой будет находиться шаблон вывода ссылок на страницы. Осталось только вывести данную переменную в шаблоне.
- •Если в роуте используются параметры controller, action, directory либо id, то их необходимо передавать в класс pagination в метод route_params().
- •24. Операции crud. Разработка системы администрирования.
- •25. Модуль кэширования
- •В kohana также имеется отдельный модуль cache. Для его подключения необходимо раскомментировать нужную строку в файле bootstrap.Php
- •После подключения модуля необходимо скопировать из папки с модулем конфигурационный файл и переместить его в папку config/ в конфигурационном файле cache.Php имеется несколько групп настроек.
- •Каждая группа настроек работает со своим драйвером для кэширования. В зависимости от выбранного типа настроек, закэшированные файлы будут храниться либо в памяти компьютера, либо в других файлах.
- •28. Многоуровневые комментарии. Алгоритм NestedSets. Модуль orm-mptt
- •29. Модальное окно на ajax
- •30. Парсинг
- •31. Отладка
- •32. Профилирование
- •33. Документация kohana, модуль Userguide
- •34. Модуль Codebench
- •36. Другие модули Kohana
- •37. Состояние проекта
- •38. Дополнительное конфигурирование
- •39. Уязвимость Kohana
- •Установка yii
- •2. Структура yii
- •3. Конфигурирование yii, файл config/main.Php
- •4. Маршрутизация
- •7.Подключение шаблонов
- •8. Полезное.
- •9. Модель. Работа с базой данных.
- •11. Валидация
- •1. Определение класса модели
- •2. Определение правил проверки
- •4. Стандартные правила валидации
- •12. Конструктор форм
- •13. Хелперы форм
- •14. Обработка изображений
- •15. Постраничная навигация и cActiveDataProvider
- •16. Виджеты
- •17. Создание виджета круговой диограммы
- •18. Виджет cMenu
- •19. Хлебные крошки. Виджет cBreadcrumbs
- •20. Виджет cDetailView
- •21. Виджет chml, хелперы html
- •22. Виджет cListView
- •23. Виджет cGridView, таблица администратора
- •25. Модули
- •26. Авторизация
- •27. Контроль доступа на основе ролей
- •V. Краткий обзор и сравнение фрэймворков yii и Kohana
- •VI. Система контроля версий
- •Синхронизация локальных файлов с репозиторием
- •Открытие проекта Mercurial в среде ide
- •Получение файлов из репозитория
- •Импорт файлов в репозиторий
- •Изменение файлов исходного кода
- •Просмотр изменений в редакторе исходного кода
- •Просмотр информации о состоянии файла
- •Метки и условные цвета
- •Ярлыки состояния файлов
- •Окно контроля версий
- •Сравнение редакций файлов
- •Внесение изменений в локальную рабочую копию
- •Переходы между различиями в сравниваемых файлах
- •Изменение критериев просмотра
- •Слияние редакций файлов
- •Фиксация исходных файлов в репозитории
- •Обновление локальных копий
- •Выполнение фиксации
- •Обновление проблем
- •Выгрузка локальных изменений в общий репозиторий
- •Клонирование репозитория Git из GitHub с использованием протокола ssh
- •VI. Обзор рынка
- •VII. Программа курса php для продвинутых
- •Обзор рынка.
- •Php для продвинутых
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'))
