Итак, как я и обещал, начинаем цикл статей о разработке барахолки на Codeigniter.
Мы вместе, пошагово будем разрабатывать барахолку.
Давайте сначала подготовимся. Что нужно для работы?
Для этого сайта я зарезервировал домен baraholka.rv.ua, потому что я живу в Украине, в городе Ровно.
Для нормального понимания нужно быть знакомым с Php, Mysql, CSS, HTML, JS(jQuery) и все-таки с Codeigniter`ом.
Будем предполагать, что шаблон у нас уже есть. И хотя в моем случае не супер дизайнерский – для обучения подойдет.
Я думаю установку denwer`a можно пропустить. Теперь в папке home, куда вы установили Denwer, создаем папку baraholka.local. В ней папку www.
Также нужно поставить и сам Codeigniter. Заходим на сайт codeigniter.com, качаем последнюю версию.
Распаковываем содержимое архива в папку www.
С этого момента, в статьях путь к папке www я буду заменять на WEB_ROOT, то есть стандартно это Z:\home\baraholka.local\www
Также иногда будет употребляться сокращенная форма Codeigniter — CI
Перезапускаем Apache, и пытаемся зайти на baraholka.local – если сработало, значит все ок.
Итак, я сверстал вот такой шаблон – baraholka.rv.ua/lesson/1/template.zip. Распаковываем архив также в WEB _ROOT.
Что же мы сейчас имеем? Шаблон и установленный Codeigniter.
Теперь, мы должны подготовить настройки Codeigniter к правильной работе. В файле WEB_ROOT/system/application/config находятся все основные конфигурационные файлы.
Также, что бы убрать из URL index.php, мы должны добавить .htaccess в папку WEB_ROOT
Качаем его baraholka.rv.ua/lesson/1/htaccess. Переименовываем в .htaccess
Кто не разобрался с некоторыми значениями – прошу в документацию — codeigniter.com/user_guide
Теперь нужно порезать наш шаблон на основные части – header,footer. Кто то может спросить:
«Зачем таким заниматься? Можно же просто для каждого нового контроллера создавать отдельный шаблон»
А если вы захотите сменить логотип? Будете каждую страницу менять?
Поэтому давайте создадим новый контроллер – WEB_ROOT/ system/application/controllers/main.php
У него будет вот такой код:
Как видно по коду, мы должны так разделить шаблон, что бы при соединении header + footer мы получили полностью изначальный шаблон. А граница между ними – это место, куда мы будем загружать наши шаблоны. Таким образом у нас будет такая методика:
Мы всегда подключаем header и footer. Между ними файл, который находится в папке с именем текущего контроллера и в файле с именем действия. Такая структура есть достаточно удобной и не путает.
Теперь нужно все-таки поделить шаблон.
Создаем файлы header.php и footer.php и main/index.php в
WEB_ROOT/ system/application/views/footer.php
WEB_ROOT/ system/application/views/header.php
WEB_ROOT/ system/application/views/main/index.php
Теперь берем наш шаблон, который подготовил я и открываем его редактором. Выделаем все содержимое до строки
Включительно. Все перемещаем в файл header.php и сохраняем.
Теперь, ищем закрывающий тег этого div (что бы проще найти, используйте редакторы с подсветкой кода)
И все, начиная с него и до конца копируем в footer.php.
В файл main/index.php пишем просто TEST.
Теперь если вы загрузите baraholka.local, вы должны увидеть наш шаблон, но уже теперь он выводится с помощью PHP.
Казалось бы, что все хорошо. Но посмотрите – в footer.php мы держим шаблоны левой и правой колонки, что есть не правильно. Поэтому вырезаем их содержимое из footer
от
до закрывающего тега. Аналогично с правой колонкой. Вырезанные данные помещаем в left.php и right.php соответственно. На месте выреза пишем:
соответственно.
В Украине популярный как украинский язык, так и российский. Никого из пользователей обижать не хочется, поэтому нужно поддерживать два языка. Сама идея такая – в файле мы держим набор преопределенных названий выражений. И используем их из разных файлов в зависимости от текущего языка. Техническая реализация мне понравилась от человека с ником mihailt — habrahabr.ru/blogs/codeigniter/30521. Я возьму от его примера только часть – реализация многоязычности.
Вырезка из его статьи:
Измените наш контроллер main. Теперь он должен наследоватся от MY_Controller, а не от Controller.
Протестируйте нашу страницу. Она должна откликаться на
Перейдем к последней главе в этой части.
Теперь нам нужно продумать хоть немного структуру БД.
Сначала нужно создать саму БД. Я назвал ее baraholka.
Так как я планирую выводить в левой колонке список разделов и категорий, нам нужно их описать в базе.
Я выбрал названия таблиц cat_main и cat_sub.
cat_main //таблица разделов
cat_sub //таблица категорий
Я подготовил дампы этих двух таблиц, так что вам остается только выполнить запросы
baraholka.rv.ua/lesson/1/cat_main.sql
baraholka.rv.ua/lesson/1/cat_sub.sql
В этой части все. В следующей части мы будем добавлять боковую панель категорий, с использованием jQuery. А также сделаем авторизацию пользователей.
Цикл статей «Барахолка с нуля»
Часть 1
Мы вместе, пошагово будем разрабатывать барахолку.
1.1 Начало
Давайте сначала подготовимся. Что нужно для работы?
- Конечно Apache + Mysql + PHP = Denwer (для начинающих — супер)
- Редактор – в моем случае это простенький блокнот-редактор PsPad с подсветкой синтаксиса. Знаю, что есть навороченные Zend Studio и Eclipse – мы не будем себе пока ничего усложнять
- Связка IE 6 + Opera + Firefox – нужно делать сайт кроссбраузерным
Для этого сайта я зарезервировал домен baraholka.rv.ua, потому что я живу в Украине, в городе Ровно.
Для нормального понимания нужно быть знакомым с Php, Mysql, CSS, HTML, JS(jQuery) и все-таки с Codeigniter`ом.
Будем предполагать, что шаблон у нас уже есть. И хотя в моем случае не супер дизайнерский – для обучения подойдет.
Я думаю установку denwer`a можно пропустить. Теперь в папке home, куда вы установили Denwer, создаем папку baraholka.local. В ней папку www.
Также нужно поставить и сам Codeigniter. Заходим на сайт codeigniter.com, качаем последнюю версию.
Распаковываем содержимое архива в папку www.
С этого момента, в статьях путь к папке www я буду заменять на WEB_ROOT, то есть стандартно это Z:\home\baraholka.local\www
Также иногда будет употребляться сокращенная форма Codeigniter — CI
Перезапускаем Apache, и пытаемся зайти на baraholka.local – если сработало, значит все ок.
Итак, я сверстал вот такой шаблон – baraholka.rv.ua/lesson/1/template.zip. Распаковываем архив также в WEB _ROOT.
Что же мы сейчас имеем? Шаблон и установленный Codeigniter.
1.2 Настройка Codeigniter
Теперь, мы должны подготовить настройки Codeigniter к правильной работе. В файле WEB_ROOT/system/application/config находятся все основные конфигурационные файлы.
- Правим autoload.php
$autoload['libraries'] = array('database', 'session'); - мы все равно будем использовать базу данных и сессии. А остальное допишем потом.
- Правим config.php
$config['base_url'] = "http://baraholka.local/"; - базовый урл, используется хелпером для создания ссылок
$config['index_page'] = ""; - так как мы хотим иметь красивый URL, нужно будет еще добавить файлик .htaccess + изменить индексную страницу на пустую
$config['charset'] = "Windows-1251"; - и хотя все гласят использовать UTF-8, мне пока это по душе
- Правим database.php
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "baraholka";
Думаю добавить новую базу “baraholka” смогут все. А сами параметры подключения – стандартные для Denwer`a
$db['default']['char_set'] = "cp1251";
$db['default']['dbcollat'] = "cp1251_general_ci";
Так как кодировка на сайте 1251, то и с базой должны работать в этой кодировке
- Правим routes.php
$route['default_controller'] = "main"; - как то более правильно, чем welcome.
Также, что бы убрать из URL index.php, мы должны добавить .htaccess в папку WEB_ROOT
Качаем его baraholka.rv.ua/lesson/1/htaccess. Переименовываем в .htaccess
Кто не разобрался с некоторыми значениями – прошу в документацию — codeigniter.com/user_guide
1.3 Дефолтный контроллер и нарезка шаблона
Теперь нужно порезать наш шаблон на основные части – header,footer. Кто то может спросить:
«Зачем таким заниматься? Можно же просто для каждого нового контроллера создавать отдельный шаблон»
А если вы захотите сменить логотип? Будете каждую страницу менять?
Поэтому давайте создадим новый контроллер – WEB_ROOT/ system/application/controllers/main.php
У него будет вот такой код:
<?php
class Main extends Controller {
function Main()
{
parent::Controller();
}
function index()
{
$this->load->view('header');
$this->load->view('main/index');
$this->load->view('footer');
}
}
?>
Как видно по коду, мы должны так разделить шаблон, что бы при соединении header + footer мы получили полностью изначальный шаблон. А граница между ними – это место, куда мы будем загружать наши шаблоны. Таким образом у нас будет такая методика:
Мы всегда подключаем header и footer. Между ними файл, который находится в папке с именем текущего контроллера и в файле с именем действия. Такая структура есть достаточно удобной и не путает.
Теперь нужно все-таки поделить шаблон.
Создаем файлы header.php и footer.php и main/index.php в
WEB_ROOT/ system/application/views/footer.php
WEB_ROOT/ system/application/views/header.php
WEB_ROOT/ system/application/views/main/index.php
Теперь берем наш шаблон, который подготовил я и открываем его редактором. Выделаем все содержимое до строки
<div id="center" class="column" >
Включительно. Все перемещаем в файл header.php и сохраняем.
Теперь, ищем закрывающий тег этого div (что бы проще найти, используйте редакторы с подсветкой кода)
И все, начиная с него и до конца копируем в footer.php.
В файл main/index.php пишем просто TEST.
Теперь если вы загрузите baraholka.local, вы должны увидеть наш шаблон, но уже теперь он выводится с помощью PHP.
Казалось бы, что все хорошо. Но посмотрите – в footer.php мы держим шаблоны левой и правой колонки, что есть не правильно. Поэтому вырезаем их содержимое из footer
от
<div id="left" class="column">
до закрывающего тега. Аналогично с правой колонкой. Вырезанные данные помещаем в left.php и right.php соответственно. На месте выреза пишем:
<?$this->load->view('left');?>
и <?$this->load->view('right');?>
соответственно.
В Украине популярный как украинский язык, так и российский. Никого из пользователей обижать не хочется, поэтому нужно поддерживать два языка. Сама идея такая – в файле мы держим набор преопределенных названий выражений. И используем их из разных файлов в зависимости от текущего языка. Техническая реализация мне понравилась от человека с ником mihailt — habrahabr.ru/blogs/codeigniter/30521. Я возьму от его примера только часть – реализация многоязычности.
Вырезка из его статьи:
Для начала подготовим наше приложение:
расширяем роуты:
Открываем routes.php(/system/application/config/routes.php)
добавляем следующие строчки:
$route['(ru|ua)'] = $route['default_controller'];
$route['(ru|ua)/(.+)'] = "$2";
таким образом, теперь мы к любому методу, любого контроллера можем обращаться 3 способами:
baraholka.local/controller/action
http:// baraholka.local/ru/controller/action
http:// baraholka.local/ua/controller/action
Создаём также 2 языковых файла main_lang.php (/system/application/language/english/main_lang.php и /system/application/language/russian/main_lang.php)
Создадим файл My_Controller.php (/system/application/libraries/My_Controller.php)
<?php class MY_Controller extends Controller { var $language; public function MY_Controller() { parent::Controller(); //$this->output->enable_profiler(true); // определяем язык $lang = $this->uri->segment(1); if($lang == 'ru') { $this->language = $lang; } else { $this->language = 'ua'; } // подгружаем нужный язык switch($lang) { case 'ru': $this->lang->load('main', 'ru'); $this->config->set_item('language', 'ru'); break; default: $this->lang->load('main', 'ua'); $this->config->set_item('language', 'ua'); break; } } }
Измените наш контроллер main. Теперь он должен наследоватся от MY_Controller, а не от Controller.
Протестируйте нашу страницу. Она должна откликаться на
Перейдем к последней главе в этой части.
1.4 Структура базы данных
Теперь нам нужно продумать хоть немного структуру БД.
Сначала нужно создать саму БД. Я назвал ее baraholka.
Так как я планирую выводить в левой колонке список разделов и категорий, нам нужно их описать в базе.
Я выбрал названия таблиц cat_main и cat_sub.
cat_main //таблица разделов
- INT main_id PK autoincrement //ид раздела
- VARCHAR(50) main_name_ua //имя раздела на украинском
- VARCHAR(50) main_name_ru //имя раздела на русском
cat_sub //таблица категорий
- INT main_id //ид раздела к которому принадлежит эта категория
- INT sub_id PK autoincrement //ид категории
- VARCHAR(50) sub_name_ua //имя раздела на украинском
- VARCHAR(50) sub_name_ru //имя раздела на русском
Я подготовил дампы этих двух таблиц, так что вам остается только выполнить запросы
baraholka.rv.ua/lesson/1/cat_main.sql
baraholka.rv.ua/lesson/1/cat_sub.sql
В этой части все. В следующей части мы будем добавлять боковую панель категорий, с использованием jQuery. А также сделаем авторизацию пользователей.
Цикл статей «Барахолка с нуля»
Часть 1