====== Создание FE ====== ===== Принципы создания FE ===== ==== Перенаправления ==== Перенаправления реализуются с помощью actions.xml и возврата строки из метода Execute(). Например, нам нужно из Action перейти на страницу новости. - У '''' добавляем: - В Execute() пишем:Response::setInteger( 'newsId', 1 ); return "success"; У одного action может быть сразу несколько ''''. ==== Работа с объектами ==== Вся работа с базой осуществляется через Factory. У Factory есть набор стандартных методов. Рассмотрим примеры: * NewsFactory::GetById( $newsId ) – получить новость по Id. * NewsFactory::GetCurrentId() – получить последний Id новости (select max). * NewsFactory::Add( $news ) – добавить новость. * NewsFactory::Update( $news ) – обновить новость. * NewsFactory::Validate( $news ) – проверить новость. * NewsFactory::GetFromRequest( $prefix ) - получить новость из $_REQUEST (см. BaseSaveAction, getFromRequest и data.tmpl.php). * NewsFactory::Get( array( “categoryId” => 2), array( OPTION_WITHOUT_PAGES => true ) ) – получить все новости для категории с Id 2. ==== Работа с url ==== В описании url можно использовать регулярные выражения: Существует массив Page::$RequestData. Нулевой элемент массива – полный url, следующие индексы – значения групп регулярных выражений. ==== Размещение actions ==== Все actions, которые отвечают за FE, находятся в пакете .Site (см. Panda.Site.xml). Обычно для получения списков используются один и тот же action с разными настройками. Например – GetLastNews и GetNews – это один и тот же action с разными настройками (GetLastNews): true 5 Где префикс **gn** – это первые буквы GetNews (основного action). **Стандартные названия actions:** * GetNews * GetNewsDetails * SaveNews * SaveComment * ManageNews (например, сюда можно запихнуть голосование и оставление комментария) * Do*, Manage* и т.д. ==== Шаблоны ==== Общие элементы, обычно, находятся в папке tmpl://fe/elements/. Например – paginator.tmpl.php, или breadcrumbs.tmpl.php. Пагинатор можно найти в VT (не забывайте посмотреть, как работает BaseGetAction). ==== Список страниц ==== - / – главная страница со списком последних 5 новостей. (actions = GetLastNews ). - Общие элементы - Список категорий - Кнопка «добавить новость» - Хлебные крошки (включая ссылку на главную) - - /news/ – список всех новостей с постраничным выводом. - Категория, Заголовок, Преамбула, Дата публикации - /news/(category-alias)/ - список новостей с постраничным выводом для конкретной категории. - По сути своей, пункт 3 это часть пункта 2. Их лучше объединить в один. - Заголовок, Преамбула, Дата публикации - /news/(newsId)/ - страница новости с древовидными комментариями (без постраничного вывода). - Вся нужная информация о новости. - /news/add – страница добавления новости. На этой странице будет отображена форма добавления новости. После успешного добавления – перенаправление на страницу новости. ==== Задача ==== Создать полностью работающий FE без css, используя стандартные html-теги (p,br,a, h1-3, li,ul и .т.д.). Должно работать: * Просмотр новостей. * Создание новости. * Просмотр комментариев. * Добавление комментариев. * Голосование за новость (не более 3 раз в день с одного IP). ==== Правила проверки ==== - На всех страницах - Хлебные крошки - Категории - Добавить новость - Все новости - Все ссылки должны работать. - Проверка пользовательского ввода - Теги в новостях (xss) - Теги в комментариях(xss) - Неправильные значения - Номер страницы (negative, out of range) - Alias категории (not found) - Id новости (not found) - Комментарии - Id родительского комментария (not found,зацикливание дерева) - Id новости (not found, empty) - Email (empty, format, max) - Comment (empty, max) - Author (empty, format, max) - Создание новости - Категория - Название - Преамбула - Текст - Автор - Email - Картинка - Редирект после создания