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

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

Жанры

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

Для работы с датами в Joomla существует класс JDate.

Вопросы

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

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

Каким образом можно отобразить код выбранного администратором сайта WYSIWYG-редактора?

Какой класс существует для работы с URI?

Для чего может быть использован класс JError?

Каким образом можно работать с датами в Joomla?

Упражнения

Адаптируйте код из раздела " Практика"

для своего варианта (см. список вариантов в дополнительных материалах).

SEF-ссылки. Классы ядра JDocument, JUser

Рассмотрен процесс генерации и декодирования SEF-ссылок для какого-либо компонента. Рассмотрены классы для работы с документом и с данными текущего или любого другого пользователя.

Цель лекции:Изучить принципы работы с SEF-ссылками, сгенерированными в компоненте по собственному шаблону. Ознакомиться с некоторыми методами классов JDocument и JUser.

Генерация SEF-ссылок (класс JRoute)

В Joomla существует возможность создавать SEF-ссылки (Search-Engine Friendly) вида www.mysite.ru/one/two/three, удобные и для посетителей, и для поисковых систем. Для этого используется единственный метод класса JRoute, переводящий внутреннюю ссылку, генерируемую Joomla, в SEF-ссылку:

string _(string $url, bool $xhtml=true, int $ssl=null)

где

$url - абсолютный или относительный URI; $xhtml - заменять ли амперсанды на "&"; $ssl - при $ssl=1 полученный URI будет начинаться с протоколав противном случае - http://.

Данный метод разбирает $url на пары "ключ-значение" и сохраняет результаты разбора в массиве. Из этого массива удаляется элемент option. Его значение добавляется к новому URL в качестве первого сегмента. Затем производится поиск файла /components/com_<option>/router.php. В этом файле должны находиться две функции: функция для генерации SEF-ссылок(<имя компонента>BuildRoute) и функция для декодирования элементов SEF-ссылок(<имя компонента>ParseRoute). Метод JRoute::_ вызовет функцию <имя компонента>BuildRoute и передаст ей массив, полученный при разборе $url. Функция вернет массив $segments. Метод JRoute::_ добавит к новому URL все элементы этого массива, разделив их слэшами. Если в запросе останутся какие-либо необработанные переменные, они будут добавлены в конец URL.

Допустим, метод JRoute::_ получит на вход ссылку вида

index.php?option=com_mycomponent&var1=value1&var2=value2&…&varN=valueN

Тогда он передаст в функцию <имя компонента>BuildRoute ассоциативный массив

Array([option]=>com_mycomponent [var1]=>value1 [var2]=>value2... [varN]=>valueN)

причем пары "ключ-значение" будут расположены в том порядке, в котором они были в исходной ссылке. Задача функции <имя компонента>BuildRoute - выбрать необходимые пары и сохранить в результирующем массиве только значения, но так, чтобы впоследствии можно было восстановить соответствующие им ключи. Это достигается использованием какого-либо фиксированного порядка. Функция вернет массив вида

Array([0]=>value1 [1]=>value2 … [N-1]=>valueN)

из

которого затем будет создана SEF-ссылка

component/mycomponent/value1/value2/…/valueN

Впоследствии при щелчке на какой-либо SEF-ссылке произойдет обратный процесс. Будет вызван метод <имя компонента>ParseRoute, который получит на вход массив

Array([0]=>value1 [1]=>value2 ... [N-1]=>valueN)

и вернет ассоциативный массив:

Array([var1]=>value1 [var2]=>value2 … [varN]=>valueN)

который Joomla установит в качестве переменных HTTP-запроса. Таким образом, посетители сайта и поисковые системы увидят SEF-ссылки, а компонент будет работать с обычным набором пар "ключ-значение".

Обратите внимание, что SEF-ссылка не содержит никакой информации о том, как называются ключи массива. Чтобы их можно было восстановить, функция генерации ссылок и функция их декодирования должны неявно задавать шаблон SEF-ссылокдля конкретного компонента. В данном примере подразумевается шаблон, который можно сформулировать вербально так: "переменные записываются в следующем порядке: var1, var2, … varN".

Шаблон может быть более сложным. Например, его структура может меняться в зависимости от задачи, т.е. от значения входящей в него переменной task.

В простейшем случае содержимое файла router.phpвыглядит так:

<?php defined('_JEXEC') or die ('Restricted access'); function <имя компонента>BuildRoute(&$query) { $segments = array; if (isset($query['var1'])) { $segments[] = $query['var1']; unset($query['var1' ]) ; } ... if(isset($query['varN' ])) { $segments[] = $query['varN']; unset($query['varN']); } return $segments; } function <имя компонента>ParseRoute($segments) { $vars = array; $vars['var1'] = @$segments[0]; ... $vars['varN'] = @$segments[1]; return $vars; } ?>

Обратите внимание, что массив $query должен быть передан в функцию <имя компонента>BuildRoute по ссылке. По мере заполнения массива $segments обработанные элементы удаляются из массива $query с помощью unset. Любые элементы, которые останутся в массиве $query после работы функции <имя компонента>BuildRoute, останутся и в URL. Если мы передадим $query по значению, вызовы функции unset будут действовать только на локальную копию этого массива и все элементы старого URL будут появляться после SEF-сегментов.

Документ (класс JDocument)

Документ– это буфер, использующийся для хранения содержимого веб-страницы, которая будет показана пользователю после выполнения запроса.

Получение ссылки на глобальный объект JDocument:

$document =& JFactory::getDocument;

Этот объект хранит название, описание, язык, направление текста, дату модификации, кодировку и некоторые другие значения. Класс JDocument содержит несколько методов для получения этих значений: getTitle, getDescription, getLanguage, getDirection, getModifiedDate, getCharset и др. Соответственно, методы для задания этих значений называются setTitle, setDescription и т.д. и принимают в качестве аргумента новое значение.

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

Сердце Дракона. Том 20. Часть 1

Клеванский Кирилл Сергеевич
20. Сердце дракона
Фантастика:
фэнтези
боевая фантастика
городское фэнтези
5.00
рейтинг книги
Сердце Дракона. Том 20. Часть 1

Холодный ветер перемен

Иванов Дмитрий
7. Девяностые
Фантастика:
попаданцы
альтернативная история
6.80
рейтинг книги
Холодный ветер перемен

Последнее желание

Сапковский Анджей
1. Ведьмак
Фантастика:
фэнтези
9.43
рейтинг книги
Последнее желание

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Наследник

Кулаков Алексей Иванович
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги
Наследник

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Наследие Маозари 5

Панежин Евгений
5. Наследие Маозари
Фантастика:
фэнтези
юмористическое фэнтези
5.00
рейтинг книги
Наследие Маозари 5

Локки 4 Потомок бога

Решетов Евгений Валерьевич
4. Локки
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Локки 4 Потомок бога

Граф

Ланцов Михаил Алексеевич
6. Помещик
Фантастика:
альтернативная история
5.00
рейтинг книги
Граф

Миф об идеальном мужчине

Устинова Татьяна Витальевна
Детективы:
прочие детективы
9.23
рейтинг книги
Миф об идеальном мужчине

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Здравствуй, 1984-й

Иванов Дмитрий
1. Девяностые
Фантастика:
альтернативная история
6.42
рейтинг книги
Здравствуй, 1984-й

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

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

Барон не играет по правилам

Ренгач Евгений
1. Закон сильного
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Барон не играет по правилам