- •Что в этой книге
- •Настройки против Расширений
- •Как расширить Joomla!
- •Компоненты (Components)
- •Модули (Modules)
- •Плагины (Plug-Ins)
- •Обзор тем
- •Создание пи (Toolbars) и Списков
- •Поддержание стиля и исключение повторений кода используя html функции
- •Доступ к бд и управление записями
- •Безопасность и предпочтительный способ получения переменных запроса
- •Меню управления
- •Управления логикой работы внутри Компонента
- •Конфигурация посредством xml-параметров
- •Упаковка и распространение
- •Наш Проект для примера
- •Приступая к разработке Компонента
- •Структура Компонента Joomla!
- •Запуск Компонента
- •Разделение на иа и ип в Joomla
- •Регистрация Компонента в бд
- •Создание пи
- •Доступные кнопки пи
- •Создание таблицы бд
- •Создание класса Table
- •Создание формы Обзора
- •Обработка данных
- •Создание Списка
- •Редактирование записей
- •Удаление записей
- •Разработка ип
- •Листинг Обзоров
- •Отображение Обзора
- •Генерация дружественных для поисковиков ссылок
- •Создание url сегментов
- •Парсинг url сегментов
- •Добавление комментариев
- •Отображение комментариев
- •Разработка Модуля
- •Регистрация Модуля в бд
- •Создание и настройка базового Модуля
- •Воспользуемся некоторыми помощниками (class Helper)
- •Пробуем различные стили
- •Попробуем смешать
- •Расширяем проект
- •Модель, Вид, Контроллер: Почему?
- •Построение Модели данных
- •Модель Все Обзоры
- •Модель одиночного Обзора
- •Миграция на Виды
- •Переключения посредством Контроллеров (Controllers)
- •Обновление связей и маршрутов
- •Реорганизация кода иа
- •Управление публикацией Обзоров
- •Добавление постраничной навигации
- •Управление Коментариями
- •Дополнительные пи
- •За кулисами: Плагины (Plug-Ins)
- •Запросы к бд
- •Плагин ссылка
- •Плагин справочной информации
- •Поиск Обзоров
- •Параметры
- •Добавление параметров к расширениям
- •Параметры для Модулей
- •Параметры для Плагинов
- •Параметры для Компонентов
- •Упаковываем все вместе
- •Список всех файлов
- •Упаковка Модуля
- •Упаковка Плагина
- •Упаковка Компонента
- •Включение sql-запросов
- •Создание пунктов меню иа
- •Дополнительные сценарии установки
- •Распространение
- •Содержание
Удаление записей
Добавление функциональности удаления сравнительно проще. Добавьте еще один переключатель в switch() в файле admin.reviews.php
case 'remove':
removeReviews( $option );
break;
Кроме того, добавьте функцию removeReviews():
function removeReviews( $option )
{
global $mainframe;
$cid = JRequest::getVar( 'cid', array(), '', 'array' );
$db =& JFactory::getDBO();
if(count($cid))
{
$cids = implode( ',', $cid );
$query = "DELETE FROM #__reviews WHERE id IN ( $cids )";
$db->setQuery( $query );
if (!$db->query())
{
echo "<script> alert('".$db->getErrorMsg()."');
window.history.go(-1); </script>\n";
}
}
$mainframe->redirect( 'index.php?option=' . $option );
}
Мы снова получаем переменную формы cid и проверяем, есть ли id в этом массиве. Если есть, мы создаем строку, разделяющую отдельные id запятыми чтобы затем использовать эту строку в запросе удаления записи БД. Если есть ошибки при выполнении запроса, мы перенаправляем пользователя обратно на экран со списком
Резюме
Теперь у нас есть полностью функциональный ИА для ввода Обзоров ресторанов в. Мы избежали написания рутинного SQL-кода путем расширения класса JTable. Также создан класс HTML генераций, который позволяет создавать экраны добавления, редактирования и списка записей для ИА. Эти экраны используют фоновый JavaScript для взаимодействия с ПИ.
Созданы функции для обработки сохранения, редактирования и удаления записей. Они вызываются путем переключения на задачу с помощью переменной task. Теперь можно заставить кого-то вводить данные в то время как мы будем строить остальные Компоненты
Разработка ип
Мы добавили некоторые данные в ИА и их не терпится увидеть как они понравятся нашим посетителей. Хотя мы все еще работаем в ИА, мы научимся делать следующее:
-
Листинг Обзоров
-
Генерация оптимизированныйх для поисковиков ссылок
-
Выодить Обзор
-
Добавлять комментарии
-
Выводить комментарии
Листинг Обзоров
В главе 2 (см. в разделе Выполнение Компонента), когда мы переходили по ссылке http://localhost/joomla/index.php?option=com_reviews получали такой экран:
Давайте заполним этот экран списком со ссылками, вызывающими отдельные Обзоры, что у нас были добавлены в БД. К тому же посетители должны иметь возможность перемещаться по Обзорам.
Зайдите в папку /components/com_reviews и добавьте следующий код в файл reviews.php:
jimport('joomla.application.helper');
require_once( JApplicationHelper::getPath( 'html' ) );
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.
'components'.DS.$option.DS.'tables');
switch($task)
{
default:
showPublishedReviews($option);
break;
}
function showPublishedReviews($option)
{
$db =& JFactory::getDBO();
$query = "SELECT * FROM #__reviews WHERE
published = '1' ORDER BY review_date DESC";
$db->setQuery( $query );
$rows = $db->loadObjectList();
if ($db->getErrorNum())
{
echo $db->stderr();
return false;
}
HTML_reviews::showReviews($rows, $option);
}
Аналогично ИА, код require_once(JApplicationHelper:: getPath ('HTML')); включен в файл reviews.html.php.
В строке JPATH_ADMINISTRATOR.DS.'components'.DS.$option.DS.'tables' мы подключаем класс Jtable::addIncludePath();, что мы писали для ИА в предыдущей главе. Наконец, switch() определена для случая по умолчанию - вызывает функцию для отображения всех опубликованных Обзоров. Запрос в этой функции гарантирует, что будут загружены только опубликованные Обзоры в обратном хронологическом порядке.
Перед тем как перезагрузить страницу, мы должны добавить HTML_reviews класс для ИП. В папке /components/com_reviews, создайте файл reviews.html.php:
<?php
class HTML_reviews
{
function showReviews($rows, $option)
{
?><table><?php
foreach($rows as $row)
{
$link = 'index.php?option=' .
$option . '&id=' . $row->id . '&task=view';
echo
'<tr>
<td>
<a href="' . $link . '">' . $row->name . '</a>
</td>
</tr>';
}
?></table><?php
}
}
?>
Предыдущий код начинается с определения класса HTML_reviews. Все наши функции вывода в ИП будут заключены в нем. Функция ShowReviews() принимает массив строк БД и имя текущего Компонента. Функция проходит по результатам и добавляет ссылку для каждой строки.
Сохраните все ваши файлы и обновите браузер. Теперь вы должны увидеть список всех: