Yii Магазин 1 - Начало

14.02.2012

Жена с ребенком выздоровели, я тоже - самое время заняться тем, что наобещал! В этой статье:

  1. Определяем функционал;
  2. Выбираем инструменты;
  3. Прототип схемы БД;
  4. Первичная инициализация магазина;
  5. Подключение нужных нам модулей.

Всё что накодим - на моём гитхабе - https://github.com/neo-classic/YiiShop

Дамп базы - yii_shop1.sql

1. Определяем функционал

Книжный магазин! Как уже говорил мудрить тут не будим, всё должно быть максимально просто!

Алгоритм работы магазина: зарегистрированный пользователь может совершить покупку; покупка отправляется на e-mail к администратору магазина.

Соответственно должен быть какой-то каталог товара - разделим книги по типу(книги по программированию, фантастика и т.п.) с возможностью бесконечной вложенности (программирование - Php, C++ и т.д.). Типы книг вводятся вручную, а сами книги можно вводить как вручную, так и загружать csv-файлом.

После покупки книг, администратор изменяет состояние заказа на завершено, но и пользователь и администратор могут посмотреть историю покупок.

Таким образом, наша система состоит из: Пользователей, Каталога, Товара, Покупательская корзины и Админки к магазину.

Возможно что-то не учел, либо Вы захотите увидеть что-то дополнительно - разберемся по ходу.

2. Выбираем инструменты

Пользователи

Тут нечего и думать - yii-user - http://www.yiiframework.com/extension/yii-user Подключим его и будим с радостю использовать ;)

Каталог

Конечно и для этого есть yii-catalog (https://github.com/alexk984/yii-catalog), но мы не будим его использовать - он слишком сложный, напишем свой элементарный.

Карточка товара

Это просто таблица в БД с характеристиками товара, в нашем случае: id, название, автор, тип книги(рубрика), год выпуска, кол-во страниц, изображение, описание и конечно цена.

Покупательская корзина

Безусловно - http://yiiext.github.com/extensions/shopping-cart-component/ Подключаем и используем! Просто отличный компонент!

Админка

Сделаем её back end'ом, отдельным модулем admin со своим отображением.

3. Схема БД

Схема базы данных магазина

Вот как-то так. Схему нарисовал в MySQL Workbench, если нужно выложу исходник.

4. Первичная инициализация магазина

Первым делом создаем чистое приложение, всё как обычно (http://yiiframework.ru/doc/guide/ru/quickstart.first-app).

Кстати незабываем что на днях вышел yii 1.1.10 - я буду использовать его. Создаем новую базу под наш магазин и подключение в конфиге приложения (http://yiiframework.ru/doc/guide/ru/database.dao).

Кроме этого, давайте-ка подключим какую-нибудь тему - я выбрал -http://yiithemes.mehesz.net/theme/93/artisteer-3-0-bright-ideas

Тема для магазина

Для подключения темы - распакуйте скачанную тему в каталог themes, из папки темы скопируйте файл ArtMenu.php в /protected/components/ и в конфиге: 'theme' => 'brightideas', У нас получился широкий, резиновый макет сайта, если кому-то нравится другая тема - пожалуйста ;) Алгоритм тот же самый.

Осталось создать 3 таблицы, пока не прописывая отношений между ними. Для этого я использую не phpMyAdmin, а SQLyog, но кому что удобно. Кстати, не забываем указать префикс таблиц в конфиге (tablePrefix). Обратите внимание, что в таблице tbl_purchase поле books_id - VARCHAR, в нём через запятую будим хранить id книг. Таблицу tbl_user НЕ СОЗДАЕМ! т.к. схема для пользовательских таблиц будет взята из yii-user.

И последнее - для трёх созданных таблиц генерируем модели и CRUD при помощи Gii. Проверим - вот что получилось у меня:

Страница добавления книг

Немного кривая страница, но мы это поправим позже!

5. Подключение расширений

Yii-user - http://www.yiiframework.com/extension/yii-user

Подключаем по инструкции - http://code.google.com/p/yii-user/wiki/Installation

Единственное - добавим ссылки модуля в /themes/brightideas/views/layouts/main.php
Получилось:

Профиль пользователя

Shopping Cart

http://yiiext.github.com/extensions/shopping-cart-...

Лично мне нравится его устанавливать в /protected/modules/, впрочем дело каждого - устанавливаем по инструкции и если нужно меняем пути: http://yiiext.github.com/extensions/shopping-cart-...

И реализуем интерфейс IECartPosition для модели Book:

class Book extends CActiveRecord implements IECartPosition
{
    public static function model($className=__CLASS__)
    {
      return parent::model($className);
    }
    function getId(){
        return 'Book'.$this->id;
    }
    function getPrice(){
        return $this->price;
    }
    public function tableName()
    {
      return '{{book}}';
    }
  ...
}

Проверяем : http://domain/index.php?r=book/admin не должно быть ошибки.

На сегодня всё!
Дальше начнем писать основной функционал для нашего магазина!

P.S.: Через пару дней будет продолжение. И на этой неделе Ekstazy в подкасте!

P.P.S.: И не только Ekstazy, но и Константин Перминов в подкасте ;)

P.P.S.: Если хотите поковыряться в исходниках уже готового магазина, попробуйте вот этот - http://yupe-project.ru/

blog comments powered by Disqus
Наверх