- •Что в этой книге
- •Настройки против Расширений
- •Как расширить Joomla!
- •Компоненты (Components)
- •Модули (Modules)
- •Плагины (Plug-Ins)
- •Обзор тем
- •Создание пи (Toolbars) и Списков
- •Поддержание стиля и исключение повторений кода используя html функции
- •Доступ к бд и управление записями
- •Безопасность и предпочтительный способ получения переменных запроса
- •Меню управления
- •Управления логикой работы внутри Компонента
- •Конфигурация посредством xml-параметров
- •Упаковка и распространение
- •Наш Проект для примера
- •Приступая к разработке Компонента
- •Структура Компонента Joomla!
- •Запуск Компонента
- •Разделение на иа и ип в Joomla
- •Регистрация Компонента в бд
- •Создание пи
- •Доступные кнопки пи
- •Создание таблицы бд
- •Создание класса Table
- •Создание формы Обзора
- •Обработка данных
- •Создание Списка
- •Редактирование записей
- •Удаление записей
- •Разработка ип
- •Листинг Обзоров
- •Отображение Обзора
- •Генерация дружественных для поисковиков ссылок
- •Создание url сегментов
- •Парсинг url сегментов
- •Добавление комментариев
- •Отображение комментариев
- •Разработка Модуля
- •Регистрация Модуля в бд
- •Создание и настройка базового Модуля
- •Воспользуемся некоторыми помощниками (class Helper)
- •Пробуем различные стили
- •Попробуем смешать
- •Расширяем проект
- •Модель, Вид, Контроллер: Почему?
- •Построение Модели данных
- •Модель Все Обзоры
- •Модель одиночного Обзора
- •Миграция на Виды
- •Переключения посредством Контроллеров (Controllers)
- •Обновление связей и маршрутов
- •Реорганизация кода иа
- •Управление публикацией Обзоров
- •Добавление постраничной навигации
- •Управление Коментариями
- •Дополнительные пи
- •За кулисами: Плагины (Plug-Ins)
- •Запросы к бд
- •Плагин ссылка
- •Плагин справочной информации
- •Поиск Обзоров
- •Параметры
- •Добавление параметров к расширениям
- •Параметры для Модулей
- •Параметры для Плагинов
- •Параметры для Компонентов
- •Упаковываем все вместе
- •Список всех файлов
- •Упаковка Модуля
- •Упаковка Плагина
- •Упаковка Компонента
- •Включение sql-запросов
- •Создание пунктов меню иа
- •Дополнительные сценарии установки
- •Распространение
- •Содержание
Создание Списка
Так как наши администраторы не имеют доступа к PHPMyAdmin, нам необходимо создать Вид, который перечисляет все Обзоры в базе данных. Для начала, добавьте следующую функцию в admin.reviews.php:
function showReviews( $option )
{
$db =& JFactory::getDBO();
$query = "SELECT * FROM #__reviews";
$db->setQuery( $query );
$rows = $db->loadObjectList();
if ($db->getErrorNum()) {
echo $db->stderr();
return false;
}
HTML_reviews::showReviews( $option, $rows );
}
Эта функция загружает данные для отображения, поэтому мы получаем ссылку на текущее соединение с БД, а затем вызываем функцию setQuery(). SetQuery() принимает строку запроса и сохраняет его для дальнейшего использования, а не выполняет его сразу же. Когда мы вызываем loadObjectList(),выполняется ранее установленные запрос и строки результата загружаются в массив объектов. Если мы сталкиваемся с ошибкой, мы показываем ее и останавливаем работу. Если все идет хорошо, мы передаем массив результатов следующей функции, которую необходимо добавить в admin.reviews.html.php:
function showReviews( $option, &$rows )
{
?>
<form action="index.php" method="post" name="adminForm">
<table class="adminlist">
<thead>
<tr>
<th width="20">
<input type="checkbox" name="toggle"
value="" onclick="checkAll(<?php echo
count( $rows ); ?>);" />
</th>
<th class="title">Name</th>
<th width="15%">Address</th>
<th width="10%">Reservations</th>
<th width="10%">Cuisine</th>
<th width="10%">Credit Cards</th>
<th width="5%" nowrap="nowrap">Published</th>
</tr>
</thead>
<?php
$k = 0;
for ($i=0, $n=count( $rows ); $i < $n; $i++)
{
$row = &$rows[$i];
$checked = JHTML::_('grid.id', $i, $row->id );
$published = JHTML::_('grid.published', $row, $i );
?>
<tr class="<?php echo "row$k"; ?>">
<td>
<?php echo $checked; ?>
</td>
<td>
<?php echo $row->name; ?>
</td>
<td>
<?php echo $row->address; ?>
</td>
<td>
<?php echo $row->reservations; ?>
</td>
<td>
<?php echo $row->cuisine; ?>
</td>
<td>
<?php echo $row->credit_cards; ?>
</td>
<td align="center">
<?php echo $published;?>
</td>
</tr>
<?php
$k = 1 - $k;
}
?>
</table>
<input type="hidden" name="option" value="<?php echo $option;?>" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
</form>
<?php
}
Эта функция начинается с определения формы: action на index.php и имя adminForm (для JavaScript). Далее таблица с классом adminlist и ее шапка. Все заголовки типичны, за исключением первого, который действует как "включить все" чекбоксы и автоматически выбирает все отображенные записи. Сразу после шапки мы начинаем цикл по строкам. Обнуляем переменную $i и в $n устанавливаем число строк. Цикл выполняется до тех пор, пока есть строки доступные для отображения. Внутри цикла, мы получаем ссылку на текущую строку и можем просмотреть содержимое. Переключение значения $k между 0 и 1 используется для выбора между двумя различными CSS-классами со слегка различными свойствами фона.
Некоторые переменные выводятся непосредственно, но пара столбцов требуют особого внимания. Используя JHTML::('grid.id'), мы можем получить HTML-код для чекбокса, который будет определен фоновым JavaScript`ом. Функция JHTML::_('grid.published') генерирует изображение кнопки на основе значения переменной published в строке. Когда она установлена в 1 мы получаем "check" иконку, а если 0 - дает "х" иконку. Ниже в таблице, есть четыре скрытые переменные. Первая имеет значение для option для указания (направления) на правильный Компонент. Переменная task становится доступной таким образом, чтобы JavaScript в панели инструментов мог установить ее перед отправкой формы. Когда любой из флажков для записи включается, boxchecked устанавливается в 1. Соответственно в 0, когда все флажки очищены. Это помогает обработке JavaScript`ом списка.
Теперь добавьте в switch() в admin.reviews.php выделенный код для перехода по-умолчанию в случае, когда не выбрана ни одна задача:
switch($task)
{
case 'add':
editReview( $option );
break;
case 'save':
saveReview( $option );
break;
default:
showReviews( $option );
break;
}
Вводите в адресной строке браузера
http://localhost/joomla/administrator/index. php?option=com_reviews - должен появиться такой экран: