Pull to refresh

Барахолка с нуля. Часть 1

Reading time 6 min
Views 12K
Итак, как я и обещал, начинаем цикл статей о разработке барахолки на Codeigniter.
Мы вместе, пошагово будем разрабатывать барахолку.

1.1 Начало


Давайте сначала подготовимся. Что нужно для работы?
  1. Конечно Apache + Mysql + PHP = Denwer (для начинающих — супер)
  2. Редактор – в моем случае это простенький блокнот-редактор PsPad с подсветкой синтаксиса. Знаю, что есть навороченные Zend Studio и Eclipse – мы не будем себе пока ничего усложнять
  3. Связка 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 находятся все основные конфигурационные файлы.
  1. Правим autoload.php
    $autoload['libraries'] = array('database', 'session'); - мы все равно будем использовать базу данных и сессии. А остальное допишем потом.
  2. Правим config.php
    $config['base_url'] = "http://baraholka.local/"; - базовый урл, используется хелпером для создания ссылок
    $config['index_page'] = ""; - так как мы хотим иметь красивый URL, нужно будет еще добавить файлик .htaccess + изменить индексную страницу на пустую
    $config['charset'] = "Windows-1251"; - и хотя все гласят использовать UTF-8, мне пока это по душе

  3. Правим 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, то и с базой должны работать в этой кодировке

  4. Правим 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. baraholka.local/main/index
  2. baraholka.local/ua/main/index
  3. baraholka.local/ru/main/index


Перейдем к последней главе в этой части.

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

Tags:
Hubs:
+40
Comments 137
Comments Comments 137

Articles