Главная   Новости   Поиск   
Азбука программиста




Яндекс.Метрика

Yii PHP framework: поиграем?

Yii PHP framework: поиграем?

Разберем каким образом реализована поддержка JS библиотек в фреймворке Yii и попробуем этот фреймворк на деле. Пару слов о том, как будут употребляться JS библиотеки в данном примере.

Для каждой игры есть несколько заблаговременно приготовленных снимков экрана, которые нам необходимо показать на странички с подробным описанием игры. Сами рисунки находятся на веб-сайте партнерки, а в нашей базе данных сохранены ссылки на их, но это не принципно. Для нас главное верно сделать теги img.

Расположить на страничке игры полноразмерные снимки экрана не получится, т.к. они очень огромные, потому мы покажем их миниатюры. А при клике на всякую из миниатюр будет раскрываться галерея с полноразмерными снимками экрана.Для сотворения галереи используем библиотеку jQuery и плагин jQuery Lightbox. Библиотека jQuery идет в комплекте с фреймворком, а Lightbox необходимо скачать.

Разберём принцип подключения.

В принципе, мы можем подключить хоть какой JS файл в макете (layout), но таковой подход не всегда будет удачным. К примеру, в нашем случае, подключать JS файлы необходимо лишь на страничках с подробным описанием игр, для всех других страничек они не необходимы, потому придется или определять в шаблоне тип запрашиваемой странички, или использовать отдельные шаблоны для каждой из страничек. Ни один из этих вариантов комфортным именовать нельзя.

Не считая того, наша страничка может состоять из нескольких блоков, которые создаются при помощи компонент (подробнее о их мы побеседуем в последующий раз). Любой из их может добиваться для собственной работы какие-нибудь JS либо CSS файлы. При всем этом мы должны убедиться, что ни один файл не подключен два раза.

Создание таких проверок изольется в достаточно большой кусочек кода, но фреймворк позволяет просто решить эти трудности. Он предоставляет нам объект CClientScript, который содержит все нужные способы для работы со статическими файлами.

В нашем случае нужно.

1) Скачать плагин jQuery Lightbox и сохранить его в папке js/. Получится такая структура папок: js/ lightbox/ css/ js/ images/ index.php

2) Настроить плагин. Вся настройка заключается исключительно в указании правильных путей к картинам плагина. Для этого создаём файл js/init_lightbox.js

$(function() { 
  $("#screenshots a").lightBox({ imageLoading : "/js/lightbox/images/lightbox-ico-loading.gif" ,imageBtnClose : "/js/lightbox/images/lightbox-btn-close.gif" ,imageBtnPrev : "/js/lightbox/images/lightbox-btn-prev.gif" ,imageBtnNext : "/js/lightbox/images/lightbox-btn-next.gif" ,imageBlank : "/js/lightbox/images/lightbox-blank.gif" 
}); 
});

3) Подключить скрипты и CSS файлы. Разглядим способ actionShow, который создаёт страничку с подробным описанием игры.

public function actionShow() {
$cs = Yii::app()->clientScript;
//подключаем jquery, которая идет в комплекте с фреймворком
$cs->registerCoreScript('jquery');
//подключаем lightbox
$cs->registerScriptFile(Yii::app()->request->baseUrl.'/js/lightbox/js/jquery.lightbox-0.5.min.js', CClientScript::POS_END);
$cs->registerScriptFile(Yii::app()->request->baseUrl.'/js/init_lightbox.js' ,CClientScript::POS_END);
$cs->registerCssFile(Yii::app()->request->baseUrl.'/js/lightbox/css/jquery.lightbox-0.5.css');
//показываем форму
$this->render('show',array('model'=>$this->loadGames()));
}

Сначала, мы получаем объект CClientScript (строчка 3). Используя его мы можем подключать файлы.

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

Файлы библиотек находятся в папке framework/web/js/source. Для того, чтоб гости могли получить к ним доступ, Yii копирует их в папку assets/. Отметим, что для корректной работы фреймоворка у PHP скриптов должен быть доступ для записи в папки assets и protected/runtime.

В итоге, перед тегом title появится соответственный тег script. При повторном вызове registerCoreScript('jquery') не произойдет ничего. Фреймворк обусловит, что эта библиотека уже подключена.

Другие JS файлы подключаем при помощи способа registerScriptFile. При всем этом необходимо указать адресок файла. Здесь комфортно использовать атрибут Yii::app()->request->baseUrl, который возвращает адресок веб-сайта.

Во 2-м параметре можно указать в какую часть странички будет вставлен тег script. По дефлоту он вставляется перед тегом title. CClientScript::POS_END значит, что script будет вставлен в конец странички, перед .

Принцип подключения CSS файлов вточности такой же, только употребляется способ registerCssFile.

Чтоб окончить формирование странички, мы загружаем данные игры из базы (способ loadGames) и передаём их в представление.

Разглядим способ loadGames

public function loadGames($id=null) {
if($this->_model===null) return $this->_model;
}

Здесь всё довольно легко. Id игры может быть передан или в параметре способа, или в параметре GET запроса.

Поиск осуществляется при помощи способа findbyPk модели. Потом мы исполняем расшифровку поля с типами игр (тщательно эта процедура описана в предшествующей части).

Если игры с данным id не существует, то способ возвращает 404-ую ошибку.

Представление полностью приводить я не буду, покажу только код, который сформировывает снимки экрана.

echo CHtml::link(CHtml::image($screenshot->s_thumbnail), $screenshot->s_image); 

В этом случае употребляется так именуемая «ленивая загрузка» (lazy loading). Т.е. в представление мы передали только данные, приобретенные из таблицы ygs_games. Ссылки на снимки экрана находятся в таблице ygs_screenshots. При этом, в модели мы указали связи меж этими таблицами (способ relations), потому фреймворк знает, как их получить. И при первом воззвании к свойству ygs_screenshots делает соответственный запрос к БД. Ссылки на изображения и сами теги img формируются при помощи способов link и image класса CHtml.



Безопасность

В этой статье приводятся методы борьбы с вирусами. Опишем типовую ситуацию, которая знакома многим пользователям ПК: установлен новый антивирус, раз в день обновляются базы, все подозрительные файлы сразу удаляются. В один ясный, солнечный день вы приходите к другу и чтобы показать новые фотки, подключаете свою флешку к его компу. Но антивирус начинает вам говорить, сколько вирусов он отыскал на вашей флешке...

Читать далее