BlogFriends.ru - 1. Схема сайта

Когда я только начинал знакомиться с Cake, мне ужасно не хватало примеров. Есть 2 популярных учебных примера: от CakePHP.org и от IBM. Оба они рассчитаны на CakePHP версии 1.1, а я думаю, что большинство не смогло устоять перед огромным количеством приятных фич, которыми радует CakePHP 1.2 pre-beta.

Поэтому я решил помочь программистам, которые поглядывают в сторону CakePHP, но ещё не успели его достаточно полюбить. Я создам проект на CakePHP 1.2 и буду тщательно описывать все шаги. Так как нормальной документации по CakePHP 1.2 ещё нет, то я надеюсь, что среди читателей найдутся критики, которые будут пинать меня в правильном направлении, если я буду выбирать не самое оптимальное решение.

Полезные программы
Для создания проектов на CakePHP я использую следующие программы:

  • Console 2
    Удобный заменитель обычного cmd.exe.
  • Zend Studio
    Мой любимый редактор и дебаггер PHP.
    На официальном сайте, надо регистрироваться для загрузки, поэтому вот Zend Studio 5.5 на download.com
  • Navicat
    Удобная штука для управления базами данных MySQL. Официальный сайт сейчас почему то недоступен, поэтому можно скачать на download.com

Если у вас нет локального веб-сервера, то вам очень желательно на своём компьютере установить Zend Core(Apache+PHP+debugger) и MySQL. После того, как всё заработает, скачайте последнюю версию CakePHP.

Описание проекта
А теперь отвлечёмся от программирования и обсудим цель проекта. Конечно, основная цель - это обучение Cake, но приятно, если проект окажется полезным.

У многих блоггеров есть блогроллы - список любимых блогов в боковой панели блога. Когда блогролл разрастается до нескольких десятков сайтов, то он превращается в ужасное множество ссылок из которых часто нельзя понять тематику блога. Я заметил интересное решение на блоге ouch.kiev.ua - его блогролл вынесен в отдельную страницу и к каждому блогу дано краткое описание (жаль моего блога там нет :) ). Такой вариант неудобен тем, что к каждому блогу надо придумывать описание и периодически менять его. Более интересная версия - Кодер-блоги. Блоги выводятся в случайном порядке, около каждого заголовка показывается последняя запись. Это делается с помощью Google AJAX Feed API и, к сожалению, из-за этого он не работает для браузеров с отключённым Javascript и не индексируется нормально поисковиками.

Идея проекта заключается в том, что пользователи получают свой настраиваемый выносной блогролл с адресом вроде php-southpark.blogfriends.ru (вместо php-southpark может быть название вашего блога) на котором размещаются ссылки на ваши любимые блоги и их последние записи (скачиваются через RSS несколько раз в день). Вместо огромного блогролла можно поставить одну ссылку на эту страницу. Конечно, можно оставить несколько самых-самых любимых блогов у себя на сайте, а ссылку назвать, например, “Остальные блоги”, “Полный блогролл” или “Смотреть все”.

Знаю, сейчас найдётся множество доброжелателей, которые скажут, что это бесполезная затея и этим никто не будет пользоваться. Враки, я буду :). На самом деле такой проект позволит показать как в Cake создать многопользовательский проект с использованием RSS, импорта информации с публичных сервисов (Feedburner, …), настройкой .htaccess, виртуальных хостов, Cake Route и многих других мелочей, которые обычно не рассматривают в учебных проектах. В любом случае, можете выговориться в комментариях, я удаляю только спам, а не несогласных со мной.

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

0. Главная

0.1 Регистрация

1. Добавление/удаление блогов

2. Блогроллы

Как видите, сначала планируется минимальная функциональность, но в дальнейшем возможно добавление функций:

  1. Импорт OPML
  2. Статистика по переходам с вашего блогролла на другие сайты
  3. Статистика переходов с других блогроллов на ваш сайт
  4. Настройка порядка отображения блогов (вручную/случайно/по дате последнего поста/по кол-ву постов за период)
  5. Деление блогов в блогролле на группы
  6. Отображение нескольких постов к блогам (кол-во настраивается)
  7. Добавление собственного описания к блогам
  8. Каталог всех блогроллов
  9. Изменение оформления своего блогролла / Несколько встроенных шаблонов
  10. Количество читателей, рейтинг (Feedburner, Technorati, Яндекс.Блоги)
  11. Ещё что-то?

База данных
После того как стало понятно, какие функции будут реализованы и какая информация будет сохраняться и отображаться, я рисую в том же Visio структуру базы данных.

Таблицы MySQL будут называться users, blogs, posts, но красивее в схеме писать их так как будут называться модели в Cake - в единственном числе и с заглавной буквы. Таблицы users и blogs будут заполняться на основе информации, которую предоставил пользователь, posts - импортироваться с блогов.

Что дальше?
В следующем посте я расскажу о cake console и маршрутизации в cake. Комментарии приветствуются :).

UPD: Продолжение


Понравилось?

  1. Подпишись через RSS
  2. Расскажи о http://php.southpark.com.ua друзьям.
    Все способы хороши: ICQ, E-mail, свой блог, комментарий в чужом блоге или сообщение на форуме
  3. Добавь статью на news2.ru, Хабрахабр или в закладки

Огромное спасибо!

И не стесняйтесь комментировать - у меня стоит плагин, который убирает rel="nofollow" у людей, которые написали больше 5 комментариев.

RSS feed | Trackback URI

11 комментариев »

Comment by Влад
2007-10-31 11:31:10

Респект!
Одно замечание, рядом с урлом ouch.kiev.ua убрать кнопку “удалить”. И всё. Это единственный недостаток :)

На счёт моего блогролла - да, недостаток есть. Но главный недостаток не то, как оно выглядит, а то что в базе - вордпресс, от которого никак не доходят руки избавиться :(

Но вот с твоей помощью и ещё одного кодера (который уже подгоняет DB WP -> DB Cake) наконец-то переедем с этого монстра…

 
Comment by Sam
2007-10-31 12:41:59

Будет интересно. Жду с нетерпением.

 
Comment by nick
2007-10-31 16:11:32

КЛАСС!!! Спасибо! сейчас как раз изучаю CakePHP…. у меня есть идея и почти готовый проект.. но не на ООП….. искал как перейти.. думаю что cakePHP как раз то что нужно!!!!!!!!! еще раз спасибо!!!!!!! буду читать и спрашивать.. у меня куча вопросов…

 
Comment by Дмитрий
2007-11-01 22:27:20

Спасибо! Жду продолжения.

 
Comment by VolCh
2007-11-02 13:31:41

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

 
Comment by Евгений
2007-11-03 14:36:15

>Когда я только начинал знакомиться с Cake, мне ужасно не хватало >примеров. Есть 2 популярных учебных примера

Для 1.1 есть отличное приложение Firefox Addons которое можно скачать http://svn.mozilla.org/addons/trunk/site/app

 
Comment by Евгений
2007-11-06 09:51:19

Еще в тему открытых приложений на Cake.
Сегодня CakeBaker объявил о разработке открытой социальной сети написанной на cakePHP 1.2 preBeta:
http://noserub.com/ (http://cakebaker.42dh.com/2007/11/05/noserub/)

 
Comment by Yaroslav Vorozhko
2007-11-06 19:25:02

Я также пишу сейчас проект на CakePHP 1.2 в основном ради обучения CakePHP и просто потому, что мне это интересно. Проект называется PhotoBlog, он очень похож на то, что пытаешься сделать ты и мне будет очень интересно поделиться с тобой мыслями и кодом.
Photoblog - это агрегатор фото блогов, конечно такие проекты уже есть, но я делаю это ради обучения.
Цель и идею я изложил тут: http://pro100pro.com/photoblog/photoblog-redisign-idei

 
2007-11-10 13:08:19

Заинтриговали, но где же продолжение?

 
2007-11-12 23:45:50

[...] BlogFriends.ru - 1. Схема сайта [...]

 
2007-12-06 17:53:46

[...] BlogFriends.ru - 1. Схема сайта [...]

 
Имя (required)
E-mail (required - never shown publicly)
URL
Текст комментария
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.