![]() |
Начальный практикум в Kohana
Начальный практикум в Kohana Официальный сайт фреймворка: http://kohanaphp.com/Русскоязычный сайт фреймворка: http://kohanaphp.ru/ (на данный момент крайне плохо проработан, лучше посещать официальный ресурс) Версия фреймворка на момент написания статьи: 2.3.2 К сожалению редактор не позволяет создавать структурированный текст, из-за чего большие части кода порой трудно читаются. В этом случае рекомендую Вам скачать PDF-вариант статьи: http://kuzya.name/files/kohana/practical_intro_kohana.pdf (22 страниц, шрифт Times New Roman, 12pt). Здравствуйте. Данная статья, как и все остальные из этой серии, ориентирована на людей которые умеют пользоваться документацией и хотя бы в малой степени с ней ознакомились. Англоязычное описание фреймворка построено довольно хорошо и понятно. По моему можно даже не знать английского языка, а руководствоваться примерами которые приводят авторы. Многие моменты в статье описываться не будут так как уже описаны в документации. В тексте статьи я постарался выставить ссылки на определённые разделы руководства везде где могут возникнуть вопросы. Вообщем, проблем быть не должно. А если Вы ранее работали с Code Igniter, то постигнуть Kohana не составит никакого труда. Ведь это прямой потомок CI, модернизированный и лишённый многих недостатков. Думаю стоит отметить что в статье я немного отступаю от стандартов разработки кода в Kohana. В каждый файл разработчики рекомендуют встраивать следующий код. PHP код:
Ниже я опишу использование базовых инструментов Kohana на примере создания сайта компании торгующей своим программным продуктом (в качестве подопытного будет программа Bred 3). Сайт будет крайне простой и незамысловатый. Состоять он будет из следующих частей: 1. Главная страница с новостями 2. Страница скриншотов программы 3. Раздел оформления заказов 4. Гостевая книга 5. Раздел загрузки программы В процессе написания ресурса мы постараемся задействовать как можно больше полезных компонентов фреймворка. 1. Подготовка Первым делом скачайте свежую версию фреймворка. Что интересно, при скачивании Вы можете указать какие модули, библиотеки и языки включать в будущий архив. Дистрибутив, который я использовал при написании этой статьи, не включал в себя никаких дополнительных модулей кроме Archive. Из библиотек я выбрал только SwiftMailer. Ну и в варианте языков кроме английского был выбран русский. После скачивания распакуйте архив на "чистый" хост (у меня он называется kohana, у Вас он может иметь другое имя, учитывайте это в будущем) и обратитесь к нему через браузер. Обращаться следует именно в корень хоста, а не к файлу install.php. Никаких проблем возникнуть не должно и в низу страницы появится надпись "Your environment passed all requirements. Remove or rename the install.php file now." гласящая о том что всё хорошо. Удалите файл install.php и откройте example.htaccess для редактирования. В нём строку RewriteBase /kohana/ измените на RewriteBase / После чего переименуйте файл в .htaccess. Этим мы включили использование mod_rewrite для красивого вида URL. Теперь пройдите по ссылке http://kohana/welcome/index. Браузер должен отобразить страницу приветствия. Если бы мы не производили вышеописанные манипуляции с .htaccess то тоже самое обращение выглядело вот так http://kohana/index.php/welcome/index. Полную информацию по установке фреймворка Вы найдёте тут: http://docs.kohanaphp.com/installation и тут http://docs.kohanaphp.com/installation/troubleshooting (на случай если возникнут какие-то проблемы). Так же нам нужно немного подчистить конфигурацию от значений по умолчанию. Откройте файл /application/config/config.php. Нас интересуют параметры site_domain и index_page. Из комментариев понятно что первый параметр содержит директорию в которой установлена Kohana. Его значение можно либо вообще удалить, либо заменить на одиночный слэш (корень сайта). Второй параметр обозначает индексный файл фреймворка. Так как мы с помощью .htaccess избегаем использования index.php при обращении к сайту, значение этой ячейки тоже нужно очистить. Если этого не сделать то при автоматической генерации ссылок (например при разбитии материала на страницы) это всплывёт и будет серьёзно мешать. Вообщем, придётся изменять в любом случае. Теперь займёмся базой данных. Создайте у себя на сервере базу с любым именем. Затем выполните в ней код из файла database.sql. Он создать 2 таблицы - kh_news и kh_gb. Они содержат информацию о новостях и отзывах в гостевой книге соответственно. Для того что бы фреймворк мог нормально к ней подключаться нужно указать необходимые настройки в файле /system/config/database.php. Изначально он имеет следующее содержимое: PHP код:
Возьмёмся за локализацию. Если при скачивании дистрибутива Вы выбирали поддержку русского языка то в дирекотрии /system/i18n должна находится папка ru_RU с языковыми файлами. Зайдите в /system/config и откройте файл locale.php. В нём есть всего одна строка отвечающая за используемый язык. По умолчанию она настроена на работу с английским языком. PHP код:
PHP код:
2. Дизайн Все необходимые элементы дизайна находятся в соответствующем архиве. В корень хоста, туда где находятся папки application и system, скопируйте директорию images и файл стилей. Находящийся там же шаблон index.php скопируйте в папку application/views, откройте и разбейте на следующие части. Код находящийся с начала шаблона и до открывающего тега "body" поместите в файл header.php. Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">PHP код:
Код:
<!-- start header -->PHP код:
PHP код:
|
Тема сисек не раскрыта, пересмотри материал, не нужно "тупо" копипастить со своего ресурса.
Опиши все по подробней или дай ссылки где про то или иное можно прочитать. не добавишь, придеться удалить из за недостатка материала. |
3. Программирование
3.1 Главная страница, новости. Новости должны располагаться в виде ленты на главной странице. Для начала сделаем обычный вывод тех шаблонов, которые мы только что сформировали. Создадим контроллер новостей и как действие по умолчанию впишем это отображение (Информация по контроллерам - http://docs.kohanaphp.com/general/controllers и работе с отображениями - http://docs.kohanaphp.com/general/views). PHP код:
http://kuzya.name/images/kohana_1.jpg Из за того что на главной странице всегда должна отображаться лента новостей мы сделаем её контроллер контроллером по умолчанию. Для этого откройте файл /system/config/routes.php и единственную настройку установите в значение "news" PHP код:
Вернёмся к коду. Сейчас нам нужно вывести все имеющиеся новости на экран. Они находятся в базе и надо их оттуда достать. Для этого создадим новую модель (http://docs.kohanaphp.com/general/models) News_Model в файле /application/models/news.php. В неё поместим конструктор создающий объект БД для этой модели и пустой метод который будет получать список новостей. Назовём его "newsList" PHP код:
PHP код:
PHP код:
PHP код:
Код:
<?foreach ($newsList as $news):?>Отойдём от основной темы и вернёмся к модели новостей. Формируя запрос в методе newsList мы написали 3 строки кода. Но конструктор запросов к БД в Kohana имеет одну интересную особенность. Вызываемые методы конструктора возвращают в качестве результата свой же объект (в нашем случае $this->db). То есть мы из вызова одного метода можем вызывать другие методы, выстраивая так называемую "цепочку". Вот пример такого вызова. Этот код можно поставить за место тех трёх строк. PHP код:
В начале статьи я писал про разбиение контента на страницы. У нас 4 новости, давайте разобьём их на 2 страницы, отображая 3 новости за раз. Воспользуемся классом "Pagination" (http://docs.kohanaphp.com/libraries/pagination). Перед тем как его задействовать нужно определится с настройками. При разбиении контента они передаются классу Pagination двумя способами - через специальный конфигурационный файл (/system/config/pagination.php) или же массивом прямо при создании объекта. Мне кажется что первый вариант лучше не использовать так как он является "центральным", а разбиение может понадобится не только в одном контроллере или методе. Пойдём по пути массива с настройками. Нам понадобится всего 4 опции 1. base_url - ссылка куда будет подставляться номер страницы. В нашем случае эта опция примет значение "/news/index/" потому что третьей частью адреса будет именно номер страницы. 2. total_items - общее количество объектов. В модель мы добавим метод который вернёт число новостей. 3. items_per_page - сколько объектов отображать на страницу. Мы отображаем по 3 новости. 4. style - стиль отображения ссылок. Здесь укажем "digg". На мой взгляд он выглядит приличнее остальных. Метод возвращающий количество новостей в базе будет называться "newsCount" и содержать всего одну строку: PHP код:
PHP код:
PHP код:
Код:
<center><?=$this->pagination->render()?></center>На очереди ограничение вывода новостей. Ссылка на вторую страницу имеет вид http://kohana/news/index/2, то есть номер страницы передаётся методу index как единственный параметр. Обозначим его, изменив объявление метода. PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
Действие просмотра новости крайне простое. Нужно лишь взять информацию из базы и вывести её в шаблон. Ссылка показа новости имеет следующий вид: http://kohana/news/view/4. То есть в качестве идентификатора новости у нас передаётся её id. Он же является единственным параметром для нашего метода. Сначала создадим в модели функцию которая будет получать данные о новости по её id. PHP код:
PHP код:
Код:
<?=$header?> |
3.2 Скриншоты.
Отображать скриншоты программы мы будем на отдельной странице. Они будут считываться из директории /images/screenshots (скопируйте туда содержимое соответствующей папки из архива с дополнительными файлами) и выводится в уменьшенном размере на страницу. Директория здесь используется для того что бы не заморачиваться с различными панелями загрузки скриншотов. Закинул картинку в папку - она отобразилась на сайте. Всё просто. В самом начале мы получим список уже имеющихся в директории изображений. Это действие я решил поместить в модель. Возможно помещение его в контроллере тоже было бы правильным, но мне кажется что раз происходит операция с данными то находится она должна в модели. Создайте пустую модель Screenshots_model и поместите туда единственный метод под именем imagesList. PHP код:
PHP код:
PHP код:
Так как мы собрались передавать массив изображений в шаблон, то нам ничего не стоит вывести код показа изменённого изображения. В самом контроллере нам нужно лишь поработать с отображениями - вывести их и передать результат работы "imagesList" PHP код:
/screenshots/resize/имя_изображения/300 Так же мы организуем в отображении счётчик и после вывода каждых двух картинок будем создавать новую строку. PHP код:
В итоге мы должны получить следующее. http://kuzya.name/images/kohana_2.jpg И сколько бы мы не клали изображений в директорию скриншотов - страница будет вытягиваться только вниз. Вы могли заметить что в коде шаблона, при отображении картинки, указывается событие onClick. В нём прописан код открытия скриншота шириной 800 пикселей. |
3.3 Оформление покупки.
В отдельном разделе нашего сайта посетителям должна предоставляться возможность оформить заказ на программу. Они будут делать это с помощью формы, в которой нужно указать все необходимые регистрационные данные. После чего запрос уйдёт на E-mail менеджеру. Создайте контроллер buy с методом index. Разместим в нём код показа формы, которую клиент должен будет заполнить. Вот её шаблон. Сохраните его в директории отображений, в папке buy, под именем index.php. Код:
<?=$header?>PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
PHP код:
Но, что бы клиент случайно не пропустил одно из важных полей, мы организуем проверку данных с помощью валидации (http://docs.kohanaphp.com/libraries/validation). Создадим объект класса Validation, передав ему в конструктор массив $_POST. После этого мы обозначим 2 правила. Обязательно должны быть заполнены поля с ФИО и E-mail`ом. И указанный E-mail должен иметь соответствующий формат. PHP код:
Немного отойдём от основной темы. Для того что бы отобразить пользователю тексты ошибок мы должны создать языковой файл с ними. Пройдите в директорию /system/i18n/ru_RU и создайте там файл form_errors.php. В него мы должны поместить массив с фраз. Он будет состоять из двух ячеек, названных аналогично полям формы. В ячейках будет содержаться текст ошибок, у которого ключами будут имена правил. PHP код:
PHP код:
Код:
<?if(isset($validation_errors)):?>http://kuzya.name/images/kohana_3.jpg При правильном же заполнении формы пользователь увидит то же сообщение что и раньше. |
3.4 Гостевая книга.
Поработаем над гостевой. В базе данных, во второй таблице, kh_gb, уже имеется 2 отзыва о программе. Сделаем сначала их вывод, а затем и добавление. Сперва создайте пустую модель Gb_Model с конструктором, в котором создаётся объект класса Database (как в модели новостей) PHP код:
PHP код:
PHP код:
PHP код:
Код:
<?=$header?>Теперь разберёмся с формой добавления отзыва. Она будет содержать всего 2 поля - имя и текст сообщения. Код:
<br />PHP код:
PHP код:
Дальше введём валидацию. Нам нужно будет лишь проверять поля формы на пустоту. PHP код:
PHP код:
PHP код:
Код:
<?=$header?>PHP код:
PHP код:
Код:
<tr>PHP код:
PHP код:
PHP код:
Код:
<?if($captcha_error):?> |
3.5 Страница загрузки
Самый последний и самый лёгкий раздел. На этой странице пользователю будет предложено скачать программу в различных вариантах (архивы или exe-файл). Создайте контроллер download, а в нём метод отображающий страницу applications/views/download/index.php. Кода контроллера я приводить не буду потому что выше такие простые операции уже описывались. Вот код шаблона. Код:
<?=$header?>PHP код:
4. Заключение. Мне очень понравился данный фреймворк. Раньше я думал что фреймворков проще Code Igniter просто быть не может. Но, как говорится, нет пределов совершенству. Вообщем от работы с Kohana я в восторге. Надеюсь на Вас он произвёл то же самое впечатление. Удачи! P.S. Если у Вас что-то не получилось то Вы можете взять готовый исходный код в файле ready.zip. 5. Приложенные файлы 1.http://kuzya.name/files/kohana/ready.zip – готовый вариант сайта 2.http://kuzya.name/files/kohana/design.zip — дизайн 3.http://kuzya.name/files/kohana/database.sql — код базы данных 4.http://kuzya.name/files/kohana/additional_files.zip — дополнительный файлы (скриншоты + дистрибутив Bred3). |
Извиняюсь перед посетителями за то что после публикации первой части долго не было остальных. В силу определённых обстоятельств я не смог сразу опубликовать остальные куски статьи.
Цитата:
Цитата:
Цитата:
|
| Время: 11:04 |