Чтение онлайн

на главную - закладки

Жанры

Разрботка расширений для CMS Joomla
Шрифт:

Записи выводятся в таблице, для которой задан CSS-класс adminlist. Все заголовки таблицы, кроме первого, - это обычный текст. Первый заголовок является чекбоксом и используется для одновременного выделения всех отображенных записей.

Затем начинается цикл для вывода самих записей. Значение переменной $k меняется с 0 на 1 и обратно для того, чтобы переключаться между различными классами CSS для четных и нечетных строк, имеющими немного различающиеся свойства фона. С помощью вызова функции JHTML::_('grid.id') мы получаем HTML-код для чекбокса, который будет обрабатываться с

помощью JavaScript.

Для каждого вопроса и ответа выводятся первые maxlen символов вместо его текста целиком. При этом с помощью функции strip_tags отбрасываются теги, чтобы предотвратить ситуацию, когда граница обрезки текста может оказаться внутри тега.

Для перехода к форме ответа на вопрос для каждой записи выводится гиперссылка, которая пропускается через функцию JFilterOutput::ampReplace, заменяющую амперсанды "&" на коды "&" в соответствии со спецификацией XHTML. Для подключения класса JFilterOutput в код вставлена строка jimport('joomla.filter.output').

Перед закрывающим тегом </form> расположены три скрытых элемента. Option и task были рассмотрены при анализе формы для ответа на вопрос. Значение boxchecked заключается в следующем. Когда пользователь ставит флажок в каком-либо из чекбоксов, значение boxchecked меняется на 1. Значение boxchecked, равное 0, возвращается, когда ни один из чекбоксов не отмечен. С помощью этого значения JavaScript обрабатывает список.

Для обработки случая, когда не выбрано никакой задачи, измените код переключателя switch в файле admin.myquestions.phpследующим образом:

switch($task) { case 'reply': replyToQuestion($option); break; case 'save': case 'apply': saveQuestion($option, $task); break; default: showQuestions($option); break; }

Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.iniстроку:

COM_MYQUESTIONS_DATE_NOT_DEFINED="Дата не задана"

Теперь при загрузке ссылка: http://localhost/joomla/administrator/index.php?option=com_myquestionsдолжна появиться страница, как на рис. 2.4.

(есть увеличенное изображение)

Рис. 2.4. Список вопросов

Удаление записей

Добавьте следующий оператор case в переключатель switch в файле admin.myquestions.php:

case 'remove': removeQuestions($option); break;

Также добавьте функцию removeQuestions:

function removeQuestions($option) { global $app; $cid = JRequest::getVar('cid', array, '', 'array'); $db =& JFactory::getDbo; if(count($cid)) { $cids = implode(',', $cid); $query = "DELETE FROM #__myquestions WHERE id IN ($cids)"; $db->setQuery($query); if (!$db->query) { echo "<script> alert('".$db->getErrorMsg."'); window.history.go(-1); </script>\n"; } } $app->redirect('index.php?option=' . $option, JText::_('COM_MYQUESTIONS_QUESTION_DELETED')); }

Если в массиве cid есть элементы, то составляется строка из идентификаторов, разделенных запятыми, которая затем используется для построения запроса удаления соответствующих записей. В данном случае нельзя использовать метод JTable::delete,

т.к. он предназначен для удаления одной записи, а не нескольких.

Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.iniстроку:

COM_MYQUESTIONS_QUESTION_DELETED="Вопрос(ы) успешно удален(ы)"

Ключевые термины

JDatabase - абстрактный класс, предоставляющий доступ к соединению с базой данных, создающемуся при инициализации приложения Joomla. JDatabaseQuery - класс, методы которого совпадают с ключевыми словами языка SQL и позволяют упростить создание сложных SQL-запросов. JTable - класс, реализующий паттерн Active Record и использующийся для управления таблицами базы данных. Префикс таблиц базы данных - строка, которая присоединяется к названию каждой таблицы Joomla в базе данных. Реальный префикс - то конкретное сочетание символов, которое используется в названиях таблиц базы данных. Связывание - процесс присвоения каждому полю производного от JTable класса значения элемента массива переменных запроса, так что ключ элемента совпадает с названием поля. Символический префикс - сочетание "#__" (решетка и два знака подчеркивания), которое используется в запросах вместо реального префикса.

Краткие итоги

При работе с базой данных различают реальный и символический префиксы. Реальный префикс используется в названиях таблиц базы данных, а символический префикс ("#__") используется в запросах вместо реального префикса. При обработке запроса вместо символического префикса будет автоматически подставлен реальный.

Чтобы выполнить запрос к базе данных Joomla, необходимо осуществить пять операций: получение ссылки на объект JDatabase (абстрактный класс, предоставляющий доступ к соединению с базой данных), формирование запроса, задание запроса, выполнение запроса, загрузка результата.

Запрос может быть сформулирован в виде строки либо разбит на составляющие и построен с помощью методов класса JDatabaseQuery.

Запрос задается для последующего выполнения методом setQuery, а выполняется либо методом query, либо, если нам необходимо получить результат, одним из методов для получения форматированного результата: loadResult, loadRow и т.д.

Для каждой таблицы, использующейся расширением, необходимо создать класс, производный от JTable. Для каждого поля таблицы необходимо создать одноименное поле этого класса. Производный от JTable класс наследует в числе прочих методы bind, store, load и delete, позволяющие управлять записями таблицы без единой строки SQL-кода. Когда компонент получает массив переменных запроса, он осуществляет связывание, то есть присваивает каждому полю этого класса значение элемента массива, ключ которого совпадает с названием данного поля.

Существуют методы класса JTable для управления часто используемыми полями ordering, checked_out/checked_out_time, published и hits.

Вопросы

Что такое реальный и символический префиксы?

Какие операции необходимо осуществить для выполнения запроса к базе данных Joomla?

Каким образом может быть сформулирован SQL-запрос?

Какие методы задают и выполняют запрос?

Для чего создается производный от JTable класс?

В чем заключается связывание?

Поделиться:
Популярные книги

Адвокат Империи 3

Карелин Сергей Витальевич
3. Адвокат империи
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Адвокат Империи 3

Кротовский, может, хватит?

Парсиев Дмитрий
3. РОС: Изнанка Империи
Фантастика:
попаданцы
альтернативная история
аниме
7.50
рейтинг книги
Кротовский, может, хватит?

Дурная жена неверного дракона

Ганова Алиса
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Дурная жена неверного дракона

Вонгозеро

Вагнер Яна
1. Вонгозеро
Детективы:
триллеры
9.19
рейтинг книги
Вонгозеро

Ведьма Вильхельма

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
8.67
рейтинг книги
Ведьма Вильхельма

Папина дочка

Рам Янка
4. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Папина дочка

Законы Рода. Том 6

Flow Ascold
6. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 6

Как я строил магическую империю 7

Зубов Константин
7. Как я строил магическую империю
Фантастика:
попаданцы
постапокалипсис
аниме
фантастика: прочее
5.00
рейтинг книги
Как я строил магическую империю 7

Лучший из худший 3

Дашко Дмитрий
3. Лучший из худших
Фантастика:
городское фэнтези
попаданцы
аниме
6.00
рейтинг книги
Лучший из худший 3

Штурмовик из будущего 3

Политов Дмитрий Валерьевич
3. Небо в огне
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Штурмовик из будущего 3

Последний попаданец 2

Зубов Константин
2. Последний попаданец
Фантастика:
юмористическая фантастика
попаданцы
рпг
7.50
рейтинг книги
Последний попаданец 2

Идеальный мир для Лекаря 14

Сапфир Олег
14. Лекарь
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 14

Безумный Макс. Поручик Империи

Ланцов Михаил Алексеевич
1. Безумный Макс
Фантастика:
героическая фантастика
альтернативная история
7.64
рейтинг книги
Безумный Макс. Поручик Империи

Вдова на выданье

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Вдова на выданье