- •Что в этой книге
- •Настройки против Расширений
- •Как расширить Joomla!
- •Компоненты (Components)
- •Модули (Modules)
- •Плагины (Plug-Ins)
- •Обзор тем
- •Создание пи (Toolbars) и Списков
- •Поддержание стиля и исключение повторений кода используя html функции
- •Доступ к бд и управление записями
- •Безопасность и предпочтительный способ получения переменных запроса
- •Меню управления
- •Управления логикой работы внутри Компонента
- •Конфигурация посредством xml-параметров
- •Упаковка и распространение
- •Наш Проект для примера
- •Приступая к разработке Компонента
- •Структура Компонента Joomla!
- •Запуск Компонента
- •Разделение на иа и ип в Joomla
- •Регистрация Компонента в бд
- •Создание пи
- •Доступные кнопки пи
- •Создание таблицы бд
- •Создание класса Table
- •Создание формы Обзора
- •Обработка данных
- •Создание Списка
- •Редактирование записей
- •Удаление записей
- •Разработка ип
- •Листинг Обзоров
- •Отображение Обзора
- •Генерация дружественных для поисковиков ссылок
- •Создание url сегментов
- •Парсинг url сегментов
- •Добавление комментариев
- •Отображение комментариев
- •Разработка Модуля
- •Регистрация Модуля в бд
- •Создание и настройка базового Модуля
- •Воспользуемся некоторыми помощниками (class Helper)
- •Пробуем различные стили
- •Попробуем смешать
- •Расширяем проект
- •Модель, Вид, Контроллер: Почему?
- •Построение Модели данных
- •Модель Все Обзоры
- •Модель одиночного Обзора
- •Миграция на Виды
- •Переключения посредством Контроллеров (Controllers)
- •Обновление связей и маршрутов
- •Реорганизация кода иа
- •Управление публикацией Обзоров
- •Добавление постраничной навигации
- •Управление Коментариями
- •Дополнительные пи
- •За кулисами: Плагины (Plug-Ins)
- •Запросы к бд
- •Плагин ссылка
- •Плагин справочной информации
- •Поиск Обзоров
- •Параметры
- •Добавление параметров к расширениям
- •Параметры для Модулей
- •Параметры для Плагинов
- •Параметры для Компонентов
- •Упаковываем все вместе
- •Список всех файлов
- •Упаковка Модуля
- •Упаковка Плагина
- •Упаковка Компонента
- •Включение sql-запросов
- •Создание пунктов меню иа
- •Дополнительные сценарии установки
- •Распространение
- •Содержание
Отображение Обзора
Если вы нажмете на любую из ссылок на данный момент, вы просто увидите тот же экран. Для того, чтобы ссылки работали добавьте следующую функцию в reviews.php:
function viewReview($option)
{
$id = JRequest::getVar('id', 0);
$row =& JTable::getInstance('review', 'Table');
$row->load($id);
if(!$row->published)
{
JError::raiseError( 404, JText::_( 'Invalid
ID provided' ) );
}
HTML_reviews::showReview($row, $option);
}
Во-первых, мы получаем id из запроса с использованием getVar(), которая проверяет переменную на различные типы атак. Необходимо соблюдать осторожность при работе с внешними данными, особенно с общедоступными веб-сайтами. Постоянное использование getVar() в коде обеспечит разумный уровень безопасности. Если значение для id отсутствует или не подходят, будет использован второй параметр инструкции – по умолчанию 0.
Далее, мы получаем экземпляр класса таблицы с ИА. После загрузки строки с соответствующим id, мы выполняем быструю проверку, что выбранный Обзор опубликован. Если это не так, мы используем JError функцию RaiseError() для вывода 404ошибки: 404 - Page could not be found.
Эта проверка гарантирует, что посетители не вводят случайные id, чтобы вызвать несуществующий Обзор. ViewReview() будет делать все необходимое для загрузки запрошенного Обзора и нам необходимо добавить код для вызова этой функции. Добавьте выделенное в switch() для подключения view:
switch($task)
{
case 'view':
viewReview($option);
break;
default:
showPublishedReviews($option);
break;
Нам также необходимо создать функцию отображения в нашем классе. Добавьте функцию showReview() для HTML_reviews в файле reviews.html.php:
function showReview($row, $option)
{
?>
<p class="contentheading"><?php echo $row->name; ?></p>
<p class="createdate"><?php echo JHTML::Date
($row->review_date); ?></p>
<p><?php echo $row->quicktake; ?></p>
<p><strong>Address:</strong> <?php echo $row->address; ?></p>
<p><strong>Cuisine:</strong> <?php echo $row->cuisine; ?></p>
<p><strong>Average dinner price:</strong> $<?php echo
$row->avg_dinner_price; ?></p>
<p><strong>Credit cards:</strong> <?php echo
$row->credit_cards; ?></p>
<p><strong>Reservations:</strong> <?php echo
$row->reservations; ?></p>
<p><strong>Smoking:</strong> <?php
if($row->smoking == 0)
{
echo "No";
}
else
{
echo "Yes";
}
?></p>
<p><?php echo $row->review; ?></p>
<p><em>Notes:</em> <?php echo $row->notes; ?></p>
<?php $link = 'index.php?option=' . $option ; ?>
<a href="<?php echo $link; ?>">< return to the reviews</a>
<?php
}
Функция ShowReview() принимает одну строку базы данных в качестве объекта и имя Компонента, в качестве параметра. Большинство столбцов строки отображаются просто с помощью HTML-форматирования, большая часть логики уже обработана. Колонка smoking проверяется и преобразуется в Да или Нет. Функция JHTML::Date() форматирует дату, полученную из БД в стиль локали.
Стиль классов contentheading и createdate используются во всех шаблонах Joomla!. Используя их, наши Компоненты вписываются в остальную часть сайта. Наконец, мы выводим список.
Сохраните все файлы, выберите Обзор ссылки и Вы должны увидеть красиво отформатированную страницу.