PHP framework CodeIgniter: создаем небольшой web сайт

23 января, 2008

логотип для каталога книг
В прошлый раз мы установили и настроили CodeIgniter. Теперь посмотрим, какие возможности он нам предоставляет.

Т.к. изучать фрэймворки (да и программирование вообще) лучше всего на примерах, создадим небольшой web сайт.

Допустим, нам нужен каталог книг. Для каждой книги у нас есть следующие данные:
- название;
- автор;
- количество страниц;
- жанр;
- аннотация.

Вся эта информация должна храниться в базе данных, которая называется bookcatalog. Создать ее можно с помощью SQL запроса:

  1. CREATE DATABASE `bookcatalog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

В этой базе создадим таблицу books:

  1. CREATE TABLE `bookcatalog`.`books` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `title` VARCHAR( 100 ) NOT NULL ,
  4. `author` VARCHAR( 100 ) NOT NULL ,
  5. `pages` INT NOT NULL ,
  6. `genre` VARCHAR( 60 ) NOT NULL ,
  7. `annotation` TEXT NOT NULL
  8. ) ENGINE = InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci

Наша таблица содержит шесть полей:
id – порядковый номер записи в таблице (первичный ключ);
title – название книги;
author – имя автора;
pages – количество страниц;
genre – жанр книги;
annotation – аннотация.

Для отображения этих данных нам понадобится две страницы. На главной будет показан общий список книг (без аннотаций). На второй странице поместим подробное описание выбранной книги.

Теперь разберем, как это все реализовать с помощью CodeIgniter.

Все скрипты нашего приложения должны быть размещены в папке system/application/.
Контроллеры в папке system/application/controllers, модели – в system/application/models, а представления – в system/application/controllers/views.

Прежде всего, нам нужно создать контроллер. Для этого в папке system/application/controllers создаем файл catalog.php и записываем в нем следующий код:

  1. <?php
  2. class Catalog extends Controller {
  3.     function Catalog() {
  4.         parent::Controller();
  5.     }
  6. }
  7. ?>

Как видите, мы просто объявили новый класс, который наследует Controller. Имя класса должно совпадать с названием файла и начинаться с заглавной буквы.

Примечание. Вы, наверное, заметили, что в папке system/application/controllers уже находится файл wellcome.php. Этот контроллер создает стандартное приветственное сообщение.

Теперь нам нужно сделать наш контроллер используемым по умолчанию. Для этого в файле system/application/config/routes.php изменяем значение переменной $route['default_controller']:

  1. $route['default_controller'] = "catalog";

Прежде чем продолжить, я хочу немного рассказать о системе навигации фрэймворка.

Все ссылки для навигации внутри сайта должны иметь следующую структуру:

http://www.sitename.domain/index.php/controller/method/value1/value2/value3/...

Первым, как обычно, идет адрес сайта. Сразу за ним файл index.php, который находится в корне нашего сайта и обрабатывает все вызовы.

Третий параметр (controller) – это имя файла контроллера.
Четвертый (method) – имя метода контроллера, который мы хотим вызвать.
Пятый, шестой и т.д. (value1, value2, value3) – параметры, которые будут переданы методу. Эти параметры необязательные.

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

  1. function index() {
  2. }
  3. function bookdetails($bookid) {
  4. }

Метод index() будет вызван, если название метода в адресе не указано. Например, http://www.mysite.com/index.php/catalog будет автоматически преобразовано в http://www.mysite.com/index.php/catalog/index/.

Этот метод будет создавать главную страницу нашего каталога.

Второй метод (bookdetails) создает страницу с подробной информацией о выбранной книге. Поэтому в качестве параметра мы передаем номер книги (чтобы упростить задачу, здесь просто используется значение поля id из БД).

Таким образом, ссылка http://www.mysite.com/index.php/catalog/bookdetails/4 приведет нас на страницу с подробным описанием книги, для которой в БД значение поля id равно 4. При этом, значение переменной $bookid будет равно 4. Т.е. мы сразу получаем доступ к значениям, переданным в запросе, без обработки массивов $_GET и $_POST.

Примечание. Это не единственный способ передачи данных. Например, значения, отправленные странице с помощью формы, будут передаваться в массиве $_POST. Кроме того, мы в любом случае должны проверить полученные данные перед использованием.

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

До встречи!

Интересные материалы

Любите общаться в интернете? У нас вы можете бесплатно скачать квип – один из лучших мессенджеров.

Понравилась статья? Подписывайтесь на продолжение rss link !

Или на мой твиттер twitter link

]]>

Добавьте эту страницу в google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

]]>

Опубликовано в CodeIgniter, PHP View Comments

]]>
  • Diz
    Есть такой урл:
    http://localhost/main/pics/toyota/corolla , где
    main - имя контроллера
    pics - имя метода в нем
    toyota,corolla - параметры
    Отмечу что нет упоминания об index.php, т.к. на него перенапр. запросы с помощью .htaccess
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    </IfModule>
    В routes.php прописан контроллер по-умолч. $route['default_controller'] = "main";
    Вопрос: как убрать в урле "main", чтобы было
    http://localhost/pics/toyota/corolla
    Ведь по идее контроллер по-умолч. задан.
  • У вас всего один контроллер?
    Я спрашиваю, потому что вам нужно обеспечить, чтобы фреймворк мог однозначно определить какой контроллер и метод ему вызывать.

    В вашем случае нужно создать правило для роутера.

    Что-то вроде
    $route['car/(:any)/(:any)'] = "main/pics/$1/$2";
  • Diz
    Ага, спасибо за ссылку и пример, разобрался!
  • ИВан
    скажите а как css файлы и изображения загружать .В какой директорий их хранить?
  • Там, где вам удобнее. Главное, чтобы из этой директории можно было файлы загружать. Я обычно в папке в которой находится index.php делаю папку css.
  • Воланд
    Теперь нам нужно сделать наш контроллер используемым по умолчанию. Для этого в файле system/application/config/routes.php изменяем значение переменной $route['default_controller']


    Когда меняю значение переменной, выдает ошибку 404, страница не найдена. Если прописан wellcome, т овсе в поряжке, отображается страница приветствия CI.


    Сразу за ним файл index.php, который находится в корне нашего сайта и обрабатывает все вызовы.


    Опять же, где именно, я имею в виду пути.

    Где описываются методы:
    function index() {
    }
    function bookdetails($bookid) {
    }

    ?
  • 1) Страница 404 если вы указали название не существующего контроллера.
    2) Корень сайта - папка на которую указывает переменная DOCUMENT_ROOT вашего сервера.
    3) Эти методы относятся к классу Catalog.
  • infoman
    Скачал пример приложения Прочел файл setup.txt Все стало ясно вы строили специализированное приложение на "CI" и под него же делали базу :) Извините Я несколько озадачен своими проблемами и не сразу вник Меня интересует более фунциональное приложение, не только каталог (чего-тот там), с фуккциями импорта (CSV), предварительного резервирования, каталога статей, фотогалереи и мультимедийных вставок, ... Потому и хочу основаться на "MaxSite CMS", следовательно залез в "первоисточник" этого фреймворка
    Может дадите подскажете ссылочку на пример реализации (можно на "ящик")? Благодарю за ответ
  • Лучше всего вам подойдет книжка Thomas Myer "Professional CodeIgniter", правда она на английском, но читается легко. По сути вся книга - пример создания online магазина. Если нужно, могу выслать.
    Думаю, это будет лучше чем анализировать чужие приложения, которые писались под другие задачи.
    А MaxSite CMS практически идеально подходит для реализации любых не стандартных функций, т.к. не ограничивает вам возможности использования фреймворка.
  • infoman
    Лучше всего вам подойдет книжка Thomas Myer "Professional CodeIgniter", правда она на английском, но читается легко.
    Благодарю, скачал отсюда: http://depositfiles.com/ru/files/8517289
  • dima
    parol: ebibla.ru
  • У меня нет пароля, но книгу я вам могу отправить почтой :)
  • BierBauch
    А паролем от архива не поделитесь? Заранее мерсите... :-)
  • infoman
    Здравствуйте Я правильно понял? Вы создаете новую базу и в ней таблицу данных приложения (пользователя), через консоль "phpMyAdmin_MySQL" Вы пробовали написать плагин, типа этого: http://codex.wordpress.org/Creating_Tables_with...
    меня интересует подобная задача на платформе "MaxSite CMS" На сколько это возможно и есть ли смысл? Вы не обосновали преимущества работы с двумя базами, а недостатки очевидны. Благорарю за ответ.
  • Спасибо! пока не разобрался полностью, но добавил в закладки!
  • горящие туры
    всегда удивлялся на программистов.наверно надо иметь ума палату.две.
  • Ума палату нужно иметь в любом деле, если вы хотите делать его хорошо.
    P.S. А ссылки из таких комментариев я удаляю...
blog comments powered by Disqus ]]>