Yii PHP framework: создаём игровой сайт. Часть 2. База данных и установка фреймворка.

7 января, 2010
yii game site db

Как и обещал, продолжаю цикл статей о создании сайта на базе фреймворка Yii. Сегодня мы поговорим об архитектуре базы данных и разберем установку фреймворка.

Начнем с базы данных.

Как вы, наверное, помните наш сайт будет использовать данные из игровой партнерки GameBoss.ru. Эти данные можно получить несколькими способами, но в нашем случае удобнее всего XML фид.

Естественно, просто скопировать данные из фида не получится (позже мы напишем специальный метод для этой цели), а сейчас нам нужно разработать структуру базы.

Получить XML фид можно по адресу

http://gameboss.ru/x2.php?partner=38370&limit=1000&genre=127&short=1&full=1&image=1

где partner=ваш_партнерский_id (его вы получаете при регистрации в партнерке)

Взгляните на скриншот фида.

xml feed

Как видите, большинство названий говорят сами за себя. Но нас сейчас интересуют повторяющиеся теги, т.к. их нужно будет хранить в отдельных таблицах (отношение один-к-многим).

Такой тег только один – SCREENSHOT. Но есть еще тег TYPE, в нём в закодированной форме записан список жанров, к которым относится игра. Т.е. получается, что к одной игре может относиться несколько жанров, и, в тоже время, к одному жанру может относиться несколько игр. В результате получаем отношение многие-к-многим.

Взгляните на структуру базы, которая у меня получилась.

database

Данные игр хранятся в таблице – ygs_games, список жанров – в таблице ygs_types. Связь между ними (многие-к-многим) устанавливается с помощью таблицы ygs_games_types.

Таблица ygs_screenshots служит для хранения данных о скриншотах.

Таблица ygs_users используется для хранения данных о пользователях. У нас в ней будет только одна запись – акаунт администратора.

И последняя таблица ygs_clients. Она просто зарезервирована. Есть идея насчет её использования, но окончательно я ещё не решил :) , поэтому можете её спокойно проигнорировать.

Хочу обратить ваше внимание на два момента.

1) Я старался, чтобы названия полей в таблицах совпадали с названиями тегов в фиде (к ним просто добавляется приставка), так меньше путаницы возникает.

2) Префиксы таблиц (ygs – это сокращение от yii game site). Но тут я немного поспешил. Дело в том, что поддержка префиксов в Yii появится в версии 1.1, а последняя стабильная – 1.0.11. Конечно, есть способ решения этой проблемы, но его мы трогать не будем, учитывая, что до выхода 1.1 осталось немного времени.

Надеюсь со структурой базы всё более-менее понятно. В одной из следующих статей я выложу исходники этого приложения и там же будет дамп базы.

Переходим к установке фреймворка

Сразу хочу предупредить, я опишу вариант, который показался мне наиболее удобным для тестирования фреймворка. Вы можете выбрать другую структуру папок.

Качаем архив и распаковываем его в какую-нибудь папку, например,

E:\yii_1_0_11

Должна получиться такая структура папок

E:\yii_1_0_11\demos
E:\yii_1_0_11\framework
E:\yii_1_0_11\requirements
......

При этом в папке E:\yii_1_0_11\framework находится файл yiic.bat, который запускает скрипт генерации кода. Чтобы им было удобнее пользоваться, нужно добавить этот путь к системной переменной PATH. Под Windows это можно сделать в свойствах «Моего компьютера», вкладка «Дополнительно», кнопка «Переменные среды».

PATH = ……;E:\yii_1_0_11\framework

Примечание. Для линукса используется файл yiic, который находится в этой же папке, т.е. сделать нужно тоже самое – указать путь к этому файлу в переменной PATH.

После этого открываем консоль и выполняем команду yiic. Вы должны увидеть строку
Yii command runner (based on Yii v1.0.11)
и после неё краткую инструкцию по использованию этой утилиты.

Теперь можно создать каркас приложения.

Чтобы было немного удобнее работать, я советую создать виртуальный домен. Например, так.

<VirtualHost 127.0.0.1>
    ServerName www.yiigame.l
    DocumentRoot "E:/www/YiiGameSite/public_html"
	ServerAlias yiigame.l *.yiigame.l
</VirtualHost>

Как видите, наше приложение будет находиться в папке E:\www\YiiGameSite\public_html.

Создаем эту папку и переходим в неё в консоли.

cd E:\www\YiiGameSite\public_html

Выполняем команду

yiic webapp .

Обратите внимание, после webapp должны идти пробел и точка, это указывает, что вы хотите выполнить установку в текущую папку. Если вы находитесь в папке E:\www\YiiGameSite, то можно выполнить команду так yiic webapp public_html, т.е. во втором параметре вы указываете путь к приложению относительно текущей папки.

Утилита запросит подтверждение, нажимаете «Y» и enter. После этого в папке появятся файлы приложения.

Всё, теперь можно открыть браузер (надеюсь web сервер у вас запущен :) ) и по адресу www.yiigame.l вы увидите работающий сайт. Правда он не имеет никакого отношения к нашей задаче, но этой проблемой мы займемся в следующий раз.

До встречи!

Все разделы цикла.

  1. Yii PHP framework: создаём игровой сайт. Часть 1. Постановка задачи.
  2. Yii PHP framework: создаём игровой сайт. Часть 2. База данных и установка фреймворка.
  3. Yii PHP framework: создаём игровой сайт. Часть 3. Аутентификация.
  4. Yii PHP framework: создаём игровой сайт. Часть 4. Работа с жанрами игр.
  5. Yii PHP framework: создаём игровой сайт. Часть 5. Импорт игр.
  6. Yii PHP framework: создаём игровой сайт. Часть 6. Формируем страницы игр и жанров.
  7. Yii PHP framework: создаём игровой сайт. Часть 7. Работа с JavaScript и страницы игр.
  8. Yii PHP framework: создаём игровой сайт. Часть 8. Создаём виджеты.
  9. Yii PHP framework: создаём игровой сайт. Часть 9. Поиск ошибок.
  10. Yii PHP framework: создаём игровой сайт. Часть 10. Панель управления.
  11. Yii PHP framework: создаём игровой сайт. Часть 11. Человекопонятные URL.
  12. Архив с исходниками

Постовой

Правильный кадровый учет документов на предедприятии – это то, что мы умеем делать лучше всего

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

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

]]>

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

]]>

Опубликовано в PHP, Web разработка, Yii Комментарии (45) »

]]>

Вы можете оставить комментарий. Трекбеки закрыты.

  • http://zone-code.ru/ COOL

    что за программа для отображения структуры таблиц базы данных?

    • http://www.web-junior.net/ web-junior

      Я тоже хотел об этом спросить. Неплохо отображает структуру и связи. Очень похоже на Enterprise Architect

  • http://zone-code.ru COOL

    что за программа для отображения структуры таблиц базы данных?

    • http://www.web-junior.net web-junior

      Я тоже хотел об этом спросить. Неплохо отображает структуру и связи. Очень похоже на Enterprise Architect

  • http://allframeworks.ru/ xoma

    to Cool – http://wb.mysql.com/...

    Хороший туториал, жду продолжения!

    • http://www.simplecoding.org/ Владимир

      Хоma вы правы, это MySQL Workbench

  • http://allframeworks.ru xoma

    to Cool – http://wb.mysql.com/...

    Хороший туториал, жду продолжения!

    • http://www.simplecoding.org/ Владимир

      Хоma вы правы, это MySQL Workbench

  • http://rmcreative.ru/ Sam

    На самом деле лучше сразу показывать на 1.1. Релиз очень скоро.

    Приложение можно и без консоли создать. Достаточно скопировать framework/cli/views/webapp/protected/.

    Теги будут руками или при помощи CTaggableBehaviour?

    Почему u_password типа VARCHAR(50), а не CHAR(40) или CHAR(32)?

    • http://www.simplecoding.org/ Владимир

      Из 1.1 пока нужна только поддержка префиксов таблиц. Думаю, после выхода будет несложно перейти.

      Теги руками, просто не успеваю попробовать все расширения. И мне хотелось поработать именно с библиотекой Yii, а с этим расширением получится, что не будет примера по работе со связями многие-к-многим. Хотя, возможно, я не прав. Выглядит это расширение очень удобным.

      VARCHAR(50) – спасибо, забыл изменить. Подойдет CHAR(32) (храниться будет md5 хеш).

    • http://www.simplecoding.org/ Владимир

      С консолью удобнее :)

  • http://rmcreative.ru/ Sam

    На самом деле лучше сразу показывать на 1.1. Релиз очень скоро.

    Приложение можно и без консоли создать. Достаточно скопировать framework/cli/views/webapp/protected/.

    Теги будут руками или при помощи CTaggableBehaviour?

    Почему u_password типа VARCHAR(50), а не CHAR(40) или CHAR(32)?

    • http://www.simplecoding.org/ Владимир

      Из 1.1 пока нужна только поддержка префиксов таблиц. Думаю, после выхода будет несложно перейти.

      Теги руками, просто не успеваю попробовать все расширения. И мне хотелось поработать именно с библиотекой Yii, а с этим расширением получится, что не будет примера по работе со связями многие-к-многим. Хотя, возможно, я не прав. Выглядит это расширение очень удобным.

      VARCHAR(50) – спасибо, забыл изменить. Подойдет CHAR(32) (храниться будет md5 хеш).

    • http://www.simplecoding.org/ Владимир

      С консолью удобнее :)

  • Арсений

    Если не секрет, зачем устраивать танцы с переменной PATH? ИМХО, это не совсем нужно, потому что yiic из дистрибутива фреймворка используется ровно один раз на каждое приложение; а этот путь постоянно в переменной PATH имеет потенциальную опасность конфликта, если, например, у нас появятся дистрибутивы с двумя разными версиями фреймворка.

    • http://www.simplecoding.org/ Владимир

      Согласен, конфликт может быть, но yiic вас об этом предупредит. Он действительно должен в идеале использоваться только один раз на приложение, но при изучении фреймворка часто возникает желание попробовать ту или иную фичу, а для этого можно быстренько сделать отдельное приложение. Поэтому и выходит, что время от времени пользоваться приходится, а писать каждый раз полный путь лень ;)
      Но это дело вкуса, можно не трогать PATH.

  • Арсений

    Если не секрет, зачем устраивать танцы с переменной PATH? ИМХО, это не совсем нужно, потому что yiic из дистрибутива фреймворка используется ровно один раз на каждое приложение; а этот путь постоянно в переменной PATH имеет потенциальную опасность конфликта, если, например, у нас появятся дистрибутивы с двумя разными версиями фреймворка.

    • http://www.simplecoding.org/ Владимир

      Согласен, конфликт может быть, но yiic вас об этом предупредит. Он действительно должен в идеале использоваться только один раз на приложение, но при изучении фреймворка часто возникает желание попробовать ту или иную фичу, а для этого можно быстренько сделать отдельное приложение. Поэтому и выходит, что время от времени пользоваться приходится, а писать каждый раз полный путь лень ;)
      Но это дело вкуса, можно не трогать PATH.

  • Денис

    Спасибо за статьи )))

    Возникла проблема. Пробовал запустить твои исходнике на Денвере и WAMPe. Все сделал по инструкции. При запуске index.php выдается длинный лог yii, где ключевая ошибка:

    Рабочий (runtime) путь приложения "D:wampwwwyiiprotectedruntime" задан неверно. Удостоверьтесь, что директория доступна для записи пользователю, под которым запущен веб-сервер.

    Уже второй час мурыжу эту бяку, все никак…

    • http://www.simplecoding.org/ Владимир

      Проверьте, пожалуйста, существует ли эта папка (runtime) и если нет, создайте её. В неё yii хранит временные файлы (кеш, например).
      Тоже самое касается папки assets, которая должна находится в корне сайта (там же, где и index.php).

  • Денис

    Спасибо за статьи )))

    Возникла проблема. Пробовал запустить твои исходнике на Денвере и WAMPe. Все сделал по инструкции. При запуске index.php выдается длинный лог yii, где ключевая ошибка:

    Рабочий (runtime) путь приложения "D:\wamp\www\yii\protected\runtime" задан неверно. Удостоверьтесь, что директория доступна для записи пользователю, под которым запущен веб-сервер.

    Уже второй час мурыжу эту бяку, все никак…

    • http://www.simplecoding.org/ Владимир

      Проверьте, пожалуйста, существует ли эта папка (runtime) и если нет, создайте её. В неё yii хранит временные файлы (кеш, например).
      Тоже самое касается папки assets, которая должна находится в корне сайта (там же, где и index.php).

  • http://blog.gtalex.ru/ GTAlex

    нифига не получилось
    во первых у меня ругалось на отсутствие файла php.exe
    пришлось найти его в денвере и прописать путь в path
    во вторых при выполнении "yiic webapp ." запрашивает
    Create a Web application under 'Z:homeyiiyiiframework'? [Yes/No] – т.е. пытается что то создавать и делать в самом дистрибутиве приложения, а не в папке откуда я запускаю и куда по идее инсталятор должен что-то скопировать из дистриба!

    напрягает последняя строчка в результате работы скрипта
    "Error in my_thread_global_end(): 1 threads didn'n exit"

    пути у меня такие:
    Z:homeyiiwww – сюда надо ставить (развернул yii_game_site.zip именно сюда)
    Z:homeyiiyii – тут развернутый дистрибутив (yii-1.1.1.r1907.zip) (соответсвенно в path я добавлял Z:homeyiiyiiframework)

    в общем можно подробнее, что и куда нужно скопировать из дистрибутива для установки вручную ?
    либо укажите где я не прав ?

  • http://blog.gtalex.ru GTAlex

    нифига не получилось
    во первых у меня ругалось на отсутствие файла php.exe
    пришлось найти его в денвере и прописать путь в path
    во вторых при выполнении "yiic webapp ." запрашивает
    Create a Web application under 'Z:\home\yii\yii\framework'? [Yes/No] – т.е. пытается что то создавать и делать в самом дистрибутиве приложения, а не в папке откуда я запускаю и куда по идее инсталятор должен что-то скопировать из дистриба!

    напрягает последняя строчка в результате работы скрипта
    "Error in my_thread_global_end(): 1 threads didn'n exit"

    пути у меня такие:
    Z:\home\yii\www\ – сюда надо ставить (развернул yii_game_site.zip именно сюда)
    Z:\home\yii\yii\ – тут развернутый дистрибутив (yii-1.1.1.r1907.zip) (соответсвенно в path я добавлял Z:\home\yii\yii\framework\)

    в общем можно подробнее, что и куда нужно скопировать из дистрибутива для установки вручную ?
    либо укажите где я не прав ?

  • http://blog.gtalex.ru/ GTAlex

    почитал README с фреймворка – всё прояснилось :)
    запускать нужно из каталога фреймворка, а указывать путь на папку приложения
    напр.
    yiic webapp ..testdrive
    так отработало
    т.е. в моем случае:
    руками копирнул framework в корень будущего приложения
    cd .framework
    yiic webapp ..
    несработало
    пришлось хитрить – создал папку testdrive
    yiic webapp ..testdrive – всё окей
    далее скопировал содержимое testdrive на место, подправил index.php (убрал две точки ..)
    далее уже поверх накатил содержимое твоего архивного файлика

  • http://blog.gtalex.ru GTAlex

    почитал README с фреймворка – всё прояснилось :)
    запускать нужно из каталога фреймворка, а указывать путь на папку приложения
    напр.
    yiic webapp ..\testdrive
    так отработало
    т.е. в моем случае:
    руками копирнул framework в корень будущего приложения
    cd .\framework
    yiic webapp ..\
    несработало
    пришлось хитрить – создал папку testdrive
    yiic webapp ..\testdrive – всё окей
    далее скопировал содержимое testdrive на место, подправил index.php (убрал две точки ..)
    далее уже поверх накатил содержимое твоего архивного файлика

  • http://blog.gtalex.ru/ GTAlex

    как отключить "журнал приложения" справа ?

    в index.php закомментировал
    defined('YII_DEBUG') or define('YII_DEBUG',true);
    - не помогло

    установка
    define('YII_DEBUG',false);
    тоже

    • http://www.simplecoding.org/ Владимир

      В конфиге
      'log'=>array(
      'class'=>'CLogRouter',
      'routes'=>array(
      array(
      //выводим лог внизу страницы
      'class'=>'CWebLogRoute',
      'levels'=>'trace, info',
      ),
      ),
      ),
      если уберете весь блок – вообще лога не будет, можно заменить CWebLogRoute на CFileLogRoute, тогда вывод лога будет в файл.

  • http://blog.gtalex.ru GTAlex

    как отключить "журнал приложения" справа ?

    в index.php закомментировал
    defined('YII_DEBUG') or define('YII_DEBUG',true);
    - не помогло

    установка
    define('YII_DEBUG',false);
    тоже

    • http://www.simplecoding.org/ Владимир

      В конфиге

      'log'=>array(
      	'class'=>'CLogRouter',
      	'routes'=>array(
      		array(
      			//выводим лог внизу страницы
      			'class'=>'CWebLogRoute',
      			'levels'=>'trace, info',
      		),
      	),
      ),

      если уберете весь блок – вообще лога не будет, можно заменить CWebLogRoute на CFileLogRoute, тогда вывод лога будет в файл.

  • http://blog.gtalex.ru/ GTAlex

    Спасибо, Владимир – а в CodeIgniter подобная фишка имеется ? (имею ввиду лог)
    вообще интересует возможность самому писать в лог
    (в обоих фреймворках)
    в CodeIgniter не нашел – самому пришлось писать класс

    • http://www.simplecoding.org/ Владимир

      И в CI, и в Yii есть встроенные библиотеки для ведения логов.
      В CI используется функция log_message.
      В Yii CLogger::log.
      В обоих случаях нужно указать текст сообщения и его "уровень" (например, info, warning, error и т.п.). Уровни используются для последующей фильтрации сообщений. Например, вы можете выводить только ошибки (error) и пропустить предупреждения (warning).

  • http://blog.gtalex.ru GTAlex

    Спасибо, Владимир – а в CodeIgniter подобная фишка имеется ? (имею ввиду лог)
    вообще интересует возможность самому писать в лог
    (в обоих фреймворках)
    в CodeIgniter не нашел – самому пришлось писать класс

    • http://www.simplecoding.org/ Владимир

      И в CI, и в Yii есть встроенные библиотеки для ведения логов.
      В CI используется функция log_message.
      В Yii CLogger::log.
      В обоих случаях нужно указать текст сообщения и его "уровень" (например, info, warning, error и т.п.). Уровни используются для последующей фильтрации сообщений. Например, вы можете выводить только ошибки (error) и пропустить предупреждения (warning).

  • Kirill12332

    я так понял:
    -иконка ключика ето примари?
    -красная иконка уникальный?
    -белая чё такое?
    -светлосиняя что аткое?
    обьясните а то я немогу догодаться новичек совсем

    • http://www.simplecoding.org Владимир

      Желтый ключик – первичный ключ (primary key)
      Красный ромбик – внешний ключ (foreign key)
      Белый ромбик – значение поля может равняться NULL
      Синий ромбик – значение поля не может равняться NULL

  • Pingback: Создание приложения на Yii Framework под Denwer | a2X.ru

  • Сергей

    В консоли ни чего не работает и команды не выполняются

    • http://www.simplecoding.org Владимир

      Т.е. вообще ничего не выводится? Черный экран?

  • Сергей

    После выполнения команды yiic В консоли появляется надпись ""php.exe""не является внутренней или внешней командой,или пакетным  файлом.
    Может нужно еще что то где то прописать.

    • http://www.simplecoding.org/ Владимир

      Добавьте папку в которой находится php.exe в системную переменную PATH (Мой компьютер – Свойства – Advanced System Settings – Advanced – Environment Variables)

    • http://www.simplecoding.org Владимир

      Да, нужно добавить путь к php.exe в системную переменную PATH

      • http://www.levik.info Levik

        как вариант – прописать полный путь к PHP в файле yiic.bat – что-то вроде:
        if "%PHP_COMMAND%" == "" set PHP_COMMAND=z:usrlocalphp5php.exe

        • http://www.simplecoding.org Владимир

          Можно, только придётся повторять эту операцию после обновлений движка.

  • http://www.simplecoding.org Владимир
]]>
Tweet