====== Проект Panda ====== Проект Panda - это пример создания новостной ленты, где пользователи сами смогут добавлять ссылки на новости, определять категорию новости, голосовать за новость и комментировать её. Цель проекта - познакомиться с основами Eaze. ===== Задание ===== - {{:eaze:panda:panda-initial.zip|Загрузить шаблон}} - Спроектировать базу данных, взяв за основу объектную модель и предоставленный шаблон (Panda.dm2) для Toad Data Modeller. - Реализовать административный интерфейс (VT) для управления новостями, категориями новостей и комментариями. - Донастройка – улучшить шаблоны, проверка ошибок. - Реализовать основную часть сайта (FE). ===== Структура сайта ===== - Объектная модель (Panda.News) - Новость (news) - Свойства новости - Заголовок* – заголовок новости (title, varchar 255) - Преамбула* – краткое описание новости (foreword, varchar 1024) - Текст – полный текст новости (content, text) - Картинка – маленькая картинка 100х100 (fileId, int) - Ссылка на источник* – url новости (url, varchar 2048) - Email* – почтовый адрес автора, создавшего новость (email, varchar 255) - Дата* – дата добавления комментария (createdAt, timestamp, default now) - Рейтинг* – кол-во проголосовавших за новость (rating, int) - Категория* – категория новости (categoryId, int) - Статус* – (statusId, int) - Категория новости (categories) - Свойства категории - Название* – название категории (title,varchar 255) - Системное имя* – английское название (alias, varchar 32, [a-z0-9-]) - Статус* – (statusId, int) - Комментарий (comments) - Свойства комментария - Автор* – автор комментария (author, varchar 16) - Email* – почтовый адрес автора (email, varchar 255) - Текст* – комментарий (comment, varchar 1024) - Дата* – дата добавления комментария (createdAt, timestamp, default now) - IP* – IP адрес отправителя (ip, inet) - Родительский комментарий – (parentCommentId, int) - Флаг постмодерации* (isPostModerated, bool, default false). - Новость* – (newsId, int) - Статус* – (statusId, int) - Рейтинг новости (newsRatings) - Свойства рейтинга новости - IP* – IP адрес оценившего (ip, inet) - Дата* – дата голосования (createdAt, timestamp, default now) - Новость* – (newsId, int) - Основные требования - Полная проверка пользовательского ввода (включая проверку на существование email [mx] или url [http 200]) - Проверка уникальности url ===== Комментарии к шаблону базы данных ===== ==== Base.Common ==== {{:eaze:base.common.png}} * statuses – системная таблица со статусами. Служит для логического удаления объектов из базы или снятия их с публикации. По умолчанию статусов в ней 3, но можно расширять своими. * 1 – опубликован * 2 – не опубликован * 3 – удален * users – пользователи административной части. * daemonLocks – таблица блокировок для демонов. Существует возможность вызова любого статического метода и создания блокировки для него на какое-то время. После завершения метода блокировка снимается. Если метод выпал в Fatal, то следующий запуск метода возможен только после истечения интервала maxExecutionTime от runAt. ==== Base.VFS ==== {{:eaze:base.vfs.png}} Пакет Base.VFS – это виртуальная файловая система. Все интерфейсы для работы с ней уже написаны (выбор файла, загрузка файла и т.д.) * vfsFolders – древовидный список папок. * vfsFoldersTree – реализация деревьев для списка папок. * vfsFiles – список файлов. ==== Panda.Common ==== {{:eaze:panda.common.png}} Пакет Panda.Common позволяет решить стандартные задачи по наполнению и структуре сайта. * siteParams – таблица, в которой удобно хранить различные параметры, например Email, кому нужно отправлять письмо или идентификатор счетчика для Google Analytics. В шаблонном проекте на основе Eaze уже есть следующие параметры: Google.Meta, Google.API, Google.Analytics, Yandex.Meta, Yandex.API (.Meta – инструменты для веб-мастеров, .API – ключи для карт). * staticPages – поддержка обычных статических страниц. * metaDetails – переопределение meta-информации по url для поисковой оптимизации. * navigationTypes – типы навигации (например, нижнее меню или верхнее меню). * navigations – элементы навигации. Постарайтесь спроектировать в TDM базу данных, после этого перейти к [[база_данных|следующему этапу]] и проверить то, что у Вас получилось.