Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Samouchitel_po_razrabotke_rasshireny_dlya_Jooml....docx
Скачиваний:
3
Добавлен:
10.11.2018
Размер:
2.53 Mб
Скачать

Создание и настройка базового Модуля

Модули являются одновременно простыми и гибкими. Вы можете создать Модуль, который просто выводит статический текст или который запросит удаленную БД о такой вещи, как погода.

Вы, конечно можете создавать Модули любой сложности, однако их лучше всего использовать для отображения данных и простых форм. Обычно Модуль не используют для записи или комплексного управления сессиями, вы можете сделать это через Компонент или Плагин.

Чтобы создать Модуль для наших Обзоров, мы должны создать каталог mod_reviews в /modules. Мы также должны создать файл mod_reviews.php внутри mod_reviews.

Для начала создадим основной Модуль, который отображает ссылки на самые последние Обзоры. В файле mod_reviews.php, добавьте следующий код:

<?php

defined('_JEXEC') or die('Restricted access');

$items = $params->get('items', 1);

$db =& JFactory::getDBO();

$query = "SELECT id, name FROM #__reviews WHERE

published = '1' ORDER BY review_date DESC";

$db->setQuery( $query, 0, $items );

$rows = $db->loadObjectList();

foreach($rows as $row)

{

echo '<a href="' . JRoute::_('index.php?option=com_reviews&id='

. $row->id . '&task=view') . '">' . $row->name .

'</a><br />';

}

?>

После сохранения и обновления страницы, ваш Модуль должен выглядеть так:

Когда Модуль загружен, подгружается объект $params. Его можно использовать для получения и установки параметров. Когда мы добавили строку в jos_modules, столбец params содержит три значения: одно для items (значение 3), еще одно для style (установлено в simple), и одно для random (значение 1). Загрузим в $items параметр items с помощью функции get(), по умолчанию 1 (если значение не существует)

При желании, вы можете использовать функцию set($name, $value), чтобы отменить или добавить параметр для Модуля.

После получения ссылки на объект БД, мы пишем запрос, чтобы выбрать id и name из jos_reviews и обратном хронологическому порядке от даты опубликования. Мы используем второй и третий параметры setQuery() для генерации LIMIT, который автоматически добавляется в запрос. Это гарантирует правильное использование синтаксиса для каждого типа БД. После того как запрос будет создан, мы получаем все соответствующие строки из БД, и проходя через них обеспечиваем каждый Обзор соответствующей ссылкой

Воспользуемся некоторыми помощниками (class Helper)

Мы хотели бы, чтобы наш Модуль делал больше, чем просто показывал ссылки на Обзоры. Было бы полезно включить резюме Обзора вместе с каждой ссылкой или возможность отображения Обзора в случайном порядке. Однако, в данный момент создано недостаточно для построения кода эффективно обрабатывающего различные сценарии. Чтобы это исправить, мы централизуем необходимые функции во вспомогательный класс helper. Создайте файл helper.php в /modules/mod_reviews и добавьте следующий код:

<?php

defined('_JEXEC') or die('Restricted access');

class modReviewsHelper

{

function getReviews(&$params)

{

$items = $params->get('items', 1);

$db =& JFactory::getDBO();

$query = "SELECT id, name, quicktake FROM #__reviews

WHERE published = '1' ORDER BY review_date DESC";

$db->setQuery( $query, 0, $items );

$rows = $db->loadObjectList();

return $rows;

}

function renderReview(&$review, &$params)

{

$link = JRoute::_

("index.php?option=com_reviews&task=view&id=" .

$review->id);

require(JModuleHelper::getLayoutPath ('mod_reviews', '_review'));

}

}

?>

Функция getReviews() выполняет те же действия с БД, что и оригинальный Модуль, но она возвращает строки вместо того, чтобы проходить через них. Таким образом, мы отделяем функциональные возможности БД от логики отображения. Столбец quicktake был добавлен в запрос, чтобы собрать необходимое для отображения расширенного формата Обзора

Мы собираемся использовать renderReview() для вывода одного Обзора. Чтобы создать ссылку на Обзор, вставим

index.php?option=com_reviews&task=view&id= и id Обзора в JRoute::_() для создания SEF URL. Наконец, мы используем require() и JModuleHelper функцию getLayoutPath() чтобы включить шаблон _review который мы сейчас и собираемся создать

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]