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. Блогроллы

Как видите, сначала планируется минимальная функциональность, но в дальнейшем возможно добавление функций:
- Импорт OPML
- Статистика по переходам с вашего блогролла на другие сайты
- Статистика переходов с других блогроллов на ваш сайт
- Настройка порядка отображения блогов (вручную/случайно/по дате последнего поста/по кол-ву постов за период)
- Деление блогов в блогролле на группы
- Отображение нескольких постов к блогам (кол-во настраивается)
- Добавление собственного описания к блогам
- Каталог всех блогроллов
- Изменение оформления своего блогролла / Несколько встроенных шаблонов
- Количество читателей, рейтинг (Feedburner, Technorati, Яндекс.Блоги)
- Ещё что-то?
База данных
После того как стало понятно, какие функции будут реализованы и какая информация будет сохраняться и отображаться, я рисую в том же Visio структуру базы данных.

Таблицы MySQL будут называться users, blogs, posts, но красивее в схеме писать их так как будут называться модели в Cake - в единственном числе и с заглавной буквы. Таблицы users и blogs будут заполняться на основе информации, которую предоставил пользователь, posts - импортироваться с блогов.
Что дальше?
В следующем посте я расскажу о cake console и маршрутизации в cake. Комментарии приветствуются :).
UPD: Продолжение
Респект!
Одно замечание, рядом с урлом ouch.kiev.ua убрать кнопку “удалить”. И всё. Это единственный недостаток
На счёт моего блогролла - да, недостаток есть. Но главный недостаток не то, как оно выглядит, а то что в базе - вордпресс, от которого никак не доходят руки избавиться
Но вот с твоей помощью и ещё одного кодера (который уже подгоняет DB WP -> DB Cake) наконец-то переедем с этого монстра…
Будет интересно. Жду с нетерпением.
КЛАСС!!! Спасибо! сейчас как раз изучаю CakePHP…. у меня есть идея и почти готовый проект.. но не на ООП….. искал как перейти.. думаю что cakePHP как раз то что нужно!!!!!!!!! еще раз спасибо!!!!!!! буду читать и спрашивать.. у меня куча вопросов…
Спасибо! Жду продолжения.
Думаю, что поддержку шаблонов надо сразу вводить, если исходить из учебных целей. По-моему, самая актуальная тема, у тех, кто начинает изучать CakePHP в частности, и фреймворки вообще это “Как слепить шаблон и как вставить в него динамическое меню (ну и другие динамические модули типа новостей или последних постов на форуме на “сайдбар” каждой страницы)”
>Когда я только начинал знакомиться с Cake, мне ужасно не хватало >примеров. Есть 2 популярных учебных примера
Для 1.1 есть отличное приложение Firefox Addons которое можно скачать http://svn.mozilla.org/addons/trunk/site/app
Еще в тему открытых приложений на Cake.
Сегодня CakeBaker объявил о разработке открытой социальной сети написанной на cakePHP 1.2 preBeta:
http://noserub.com/ (http://cakebaker.42dh.com/2007/11/05/noserub/)
Я также пишу сейчас проект на CakePHP 1.2 в основном ради обучения CakePHP и просто потому, что мне это интересно. Проект называется PhotoBlog, он очень похож на то, что пытаешься сделать ты и мне будет очень интересно поделиться с тобой мыслями и кодом.
Photoblog - это агрегатор фото блогов, конечно такие проекты уже есть, но я делаю это ради обучения.
Цель и идею я изложил тут: http://pro100pro.com/photoblog/photoblog-redisign-idei
Заинтриговали, но где же продолжение?
[...] BlogFriends.ru - 1. Схема сайта [...]
[...] BlogFriends.ru - 1. Схема сайта [...]