- •Оглавление
- •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 для продвинутых
22. Виджет cListView
CListView — это стандартный виджет для отображения записей. В отличии от виджета CDetailView, данный виджет выводит все записи по заданному условию выборки. Поддерживает сортировку по определенным атрибутам и постраничную навигацию.
Виджет расположен в /framework/zii/widgets/CListView.php.
Минимальный код необходимый для вызова виджета:
-
Использование CListView. Листинг 22.1
$dataProvider = new CActiveDataProvider('Model');
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
)); ?>
Разберем, какие параметры передаются в CListView.
dataProvider — запрос в модель.
itemView — представление, в котором будет рендерится каждая запись выводимая в CListView.
sortableAttributes — атрибуты, по которым происходит сортировка. Параметр принимает массив значений.
-
sortableAttributes. Листинг 22.2
$dataProvider = new CActiveDataProvider('Model');
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'sortableAttributes'=>array(
'rating',
'create_time',
),
)); ?>
emptyText – выводимый текст, если не найдено записей.
summaryText – подсчет элементов. Формат использования: {start} - {end} из общего количества {count}.
-
Использование CListView. Листинг 22.3
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
‘summaryText’ => {start} – {end} из {count}
'sortableAttributes'=>array(
'rating',
'create_time',
),
)); ?>
Рассмотрим объявление $dataProvider в контроллере, с ограничением записей и с формированием постраничной навигации.
-
Уточненный запрос и постраничная навигация в $dataProvider. Листинг 22.4
$criteria = new CDbCriteria;
$criteria->condition = 'id<10';
$criteria->order = 'id DESC';
$dataProvider = new CActiveDataProvider('page', array(
'criteria' => $criteria,
'pagination' => array(
'pageSize' => 1
)
));
$this->render('index', array(
'dataProvider' => $dataProvider
));
23. Виджет cGridView, таблица администратора
Данный виджет используется в экшне admin:
Рассмотрим вызов данного виджета:
-
Уточненный запрос и постраничная навигация в $dataProvider. Листинг 23.1
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'candidats-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'picture',
'name',
'about',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Чтобы виджет работал, необходимо передать в параметр dataProvider объект CActiveDataProvider.
Рассмотрим параметры элемента columns. Это значения ассоциаций модели, которые необходимо вывести на экран. Вместо ассоциации можно использовать массив. Рассмотрим пример использования:
-
Использование массива настроек. Листинг 23.2
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'candidats-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
array(
‘name’=>’picture’,
‘header’=> ‘Изображение’,
‘cssClassExpression’ => ‘($data->id > 5) ? ’my’ : ‘’ ’,
‘headerHTMLOptions’=> array(‘width’=>30),
‘value’=>'CHtml::image(Yii::app()->request->baseUrl."/images/".$data->picture,"", array("width"=>"200px"))'
)
'name',
'about',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Разберем значение атрибута cssClassExpression:
‘($data->id > 5) ? ’my’ : ‘’ ’ – значит создать класс с именем my для записей с id > 5, в противном случае класс не создавать.
Также необходимо обратить внимание на атрибут value, в котором вместо значения, мы вывели изображение. Обратите внимание на одинарные ковычки. Любые php-конструкции в этом параметре необходимо заключать в такие ковычки. Внутри этих ковычек мы можем использовать двойные.
Мы можем к каждой записи добавить элемент формы checkbox.
-
Добавляем к каждой записи checkbox. Листинг 23.3
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'candidats-grid',
'dataProvider'=>$model->search(),
'selectableRows'=>2,
'filter'=>$model,
'columns'=>array(
array(
'class'=>'CCheckBoxColumn',
'id'=>'checked',
),
array(
'name'=>'picture',
'header'=> 'Изображение',
'type' => 'raw',
'headerHtmlOptions'=> array('width'=>200),
'value'=>'$data->picture'
),
'name',
'about',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
Новый массив содержит класс CCheckBoxColumn, который непосредственно и создает чекбоксы. Кроме этого можем указать атрибут selectableRaws, содержащий количество отмеченных чекбоксов.
24. ORM
Задача ORM – это организация связей между моделями.
При генерации модели Gii создает метод relations, содержащий пустой массив:
-
Метод relations. Листинг 24.1
public function relations()
{
return array(
);
}
Чтобы данную модель связать с другой моделью, нужно в массиве создать ассоциацию необходимой модели с нужной связью:
BELONGS_TO
-
Связь BELONGS_TO. Листинг 24.2
public function relations()
{
return array(
'Candidat'=>array(self::BELONGS_TO, 'Candidats', 'candidat_id')
);
}
Вывод данных из другой модели осуществляется так:
-
Вывод данных из другой модели, связь BELONGS_TO. Листинг 24.3
$data->Candidat->name
Чтобы перевести ассоциации на русский язык, можно использовать labels.
HAS_MANY
-
Связь HAS_MANY. Листинг 24.4
public function relations()
{
return array(
'Candidat'=>array(self::HAS_MANY, 'Candidats', 'candidat_id')
);
}
Т.к. связь HAS_MANY возвращает массив данных, то для прохода по массиву нужно использовать foreach:
-
Вывод данных из другой модели, связь HAS_MANY. Листинг 24.5
foreach($data->Candidat as $one){
echo $one->name;
echo “<hr />”;
}
