- •Что в этой книге
- •Настройки против Расширений
- •Как расширить Joomla!
- •Компоненты (Components)
- •Модули (Modules)
- •Плагины (Plug-Ins)
- •Обзор тем
- •Создание пи (Toolbars) и Списков
- •Поддержание стиля и исключение повторений кода используя html функции
- •Доступ к бд и управление записями
- •Безопасность и предпочтительный способ получения переменных запроса
- •Меню управления
- •Управления логикой работы внутри Компонента
- •Конфигурация посредством xml-параметров
- •Упаковка и распространение
- •Наш Проект для примера
- •Приступая к разработке Компонента
- •Структура Компонента Joomla!
- •Запуск Компонента
- •Разделение на иа и ип в Joomla
- •Регистрация Компонента в бд
- •Создание пи
- •Доступные кнопки пи
- •Создание таблицы бд
- •Создание класса Table
- •Создание формы Обзора
- •Обработка данных
- •Создание Списка
- •Редактирование записей
- •Удаление записей
- •Разработка ип
- •Листинг Обзоров
- •Отображение Обзора
- •Генерация дружественных для поисковиков ссылок
- •Создание url сегментов
- •Парсинг url сегментов
- •Добавление комментариев
- •Отображение комментариев
- •Разработка Модуля
- •Регистрация Модуля в бд
- •Создание и настройка базового Модуля
- •Воспользуемся некоторыми помощниками (class Helper)
- •Пробуем различные стили
- •Попробуем смешать
- •Расширяем проект
- •Модель, Вид, Контроллер: Почему?
- •Построение Модели данных
- •Модель Все Обзоры
- •Модель одиночного Обзора
- •Миграция на Виды
- •Переключения посредством Контроллеров (Controllers)
- •Обновление связей и маршрутов
- •Реорганизация кода иа
- •Управление публикацией Обзоров
- •Добавление постраничной навигации
- •Управление Коментариями
- •Дополнительные пи
- •За кулисами: Плагины (Plug-Ins)
- •Запросы к бд
- •Плагин ссылка
- •Плагин справочной информации
- •Поиск Обзоров
- •Параметры
- •Добавление параметров к расширениям
- •Параметры для Модулей
- •Параметры для Плагинов
- •Параметры для Компонентов
- •Упаковываем все вместе
- •Список всех файлов
- •Упаковка Модуля
- •Упаковка Плагина
- •Упаковка Компонента
- •Включение sql-запросов
- •Создание пунктов меню иа
- •Дополнительные сценарии установки
- •Распространение
- •Содержание
Редактирование записей
Вместо того чтобы писать целый набор новых функций для редактирования записей, мы можем дополнить существующий код. В admin.reviews.php файл под editReview() замените:
$row =& JTable::getInstance('Review', 'Table');
на такой выделенный код:
function editReview( $option )
{
$row =& JTable::getInstance('review', 'Table');
$cid = JRequest::getVar( 'cid', array(0), '', 'array' );
$id = $cid[0];
$row->load($id);
Также как с функцией saveReview(), мы получаем объект TableReview для обработки данных записи. В переменную cid получаем массив id строк таблицы. Так как мы хотим изменить только одну запись за раз, мы выбираем первый id в массиве и загружаем соответствующую строку. А в файл admin.reviews.php, мы должны добавить переход для редактирования в switch():
case 'edit':
case 'add':
editReview( $option );
break;
Вам необходимо создать ссылки, чтобы пользователь мог редактировать отдельные записи.
В файле admin.reviews.html.php после HTML_reviews::showReviews(), вместо функции для отображения имени добавьте пару строк выделенного кода, как показано ниже
jimport('joomla.filter.output');
$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 );
$link = JOutputFilter::ampReplace( 'index.php?option=' .
$option . '&task=edit&cid[]='. $row->id );
?>
<tr class="<?php echo "row$k"; ?>">
<td>
<?php echo $checked; ?>
</td>
<td>
<a href="<?php echo $link; ?>">
<?php echo $row->name; ?></a>
</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>
Чтобы придерживаться стандартов XHTML, нужно быть уверенным, что амперсанд представлен кодом &. Мы делаем это с помощью функцией ampReplace(). Она является членом класса JOutputFilter, который подгружается вызовом jimport ('joomla.filter.output').
Joomla! имеет много различных библиотек для таких вещей, как XML и RSS. Вместо того чтобы загружать полный набор библиотек каждый раз, мы используем jimport() для загрузки кода только там, где это необходимо.
Вам необходимо обновить код ПИ. Для начала, перейти к switch() в toolbar.reviews.php файл и проверить что 'edit' находится сразу над 'add':
case 'edit':
case 'add':
TOOLBAR_reviews::_NEW();
break;
Теперь, когда функции редактирования созданы, мы можем добавить кнопку "Изменить", что добавит возможность работы с чекбоксами как альтернативу ссылкам. Перейдите к файлу toolbar.reviews.html.php и проверьте его на наличие такой строки в TOOLBAR_reviews::_default():
JToolBarHelper::unpublishList();
JToolBarHelper::editList();
JToolBarHelper::deleteList();
Сохраните все ваши файлы, а затем обновите страницу
http://localhost/joomla/administrator/index.php?option=com_reviews. Должна появиться запись со ссылкой. Нажмите эту ссылку, и вы должны перейти на такой экран:
Возможно, вы заметили кнопку Apply на ПИ на экране редактирования. Это сделано для того, чтобы позволить людям сохранять промежуточные этапы редактирования записи. Для того, чтобы эта кнопка функционировала должным образом, нам придется внести два изменения в admin.reviews.php файл. Изменить switch() следующим образом:
case 'apply':
case 'save':
saveReview( $option, $task );
break;
И добавить выделенный параметр task в определение функции:
function saveReview( $option, $task )
Then change the last line of saveReview() to the following code that checks the
current $task:
switch ($task)
{
case 'apply':
$msg = 'Changes to Review saved';
$link = 'index.php?option=' . $option .
'&task=edit&cid[]='. $row->id;
break;
case 'save':
default:
$msg = 'Review Saved';
$link = 'index.php?option=' . $option;
break;
}
$mainframe->redirect($link, $msg);