Вход/Регистрация
Разрботка расширений для CMS Joomla
вернуться

Седова Яна Анатольевна

Шрифт:

Навигационная цепочка("хлебные крошки") - это последовательность элементов, представляющая собой путь по сайту от корня до текущей страницы. Для управления навигационной цепочкой в Joomla существует объект JPathway, доступ к которому можно получить так:

global $app; $pathway =& $app->getPathway;

Добавление элемента в навигационную цепочку

bool addItem(string $name, string $link='')

где

$name - название (текст) элемента; $link - гиперссылка.

Например:

$pathway->addItem('Категория #1','mycomponent/category/1'); $pathway->addItem('Элемент #1');

Получившаяся цепочка показана на рис. 7.6.

Рис. 7.6. Навигационная цепочка

Обратите внимание, что для элемента, который окажется в цепочке последним, ссылка выводиться не будет, даже если она задана. Это понятно, т.к. последний элемент соответствует текущей странице, ссылка на которую и без того известна. Тем не менее, такая ссылка не теряется и сохраняется в массиве _pathway, в котором класс JPathway хранит элементы цепочки как объекты с двумя полями - name и link.

Получение массива элементов навигационной цепочки

array getPathway

Для приведенного выше примера массив выглядит так:

Array ([0]=>stdClass Object ([name]=>Категория #1 [link]=>mycomponent/category/1) [1]=>stdClass Object ([name]=>Элемент #1 [link]=>))

Получение только названий элементов без ссылок

array getPathwayNames

Для того же примера этот метод вернет массив

Array ([0]=>[1]=>Категория #1 [2]=>Элемент #1)

Изменение названия заданного элемента

bool setItemName(int $id, string $name)

где

$id - индекс элемента; $name - новое название.

Пример:

$pathway->setItemName(0,'Категория #2');

Вид навигационной цепочки после выполнения этого кода показан на рис. 7.7.

Рис. 7.7. Измененная навигационная цепочка

Замена массива элементов навигационной цепочки

array setPathway(array $pathway)

где $pathway - новый массив объектов цепочки (т.е. для каждого элемента должны быть заданы поля name и link).

Метод возвращает предыдущее значение массива.

Например:

$item1->name = "item1"; $item1->link = "link1"; $item2->name = "item2"; $item2->link = "link2"; $item3->name = "item3"; $item3->link = ""; $items = array($item1, $item2, $item3); $pathway->setPathWay($items);

Получившаяся цепочка показана на рис. 7.8.

Рис. 7.8. Навигационная цепочка после замены массива ее элементов

Практика

Разработка модуля

Регистрация модуля в базе данных

Модуль, как и компонент, необходимо зарегистрировать в базе данных. Для этого создадим запись в таблицах #__modules и #__extensions. Выполните следующие SQL-запросы:

INSERT INTO jos_modules (title, ordering, position, published, module, showtitle, params) VALUES ('Новые вопросы', 1, 'position-7', 1, 'mod_myquestions', 1, '{"random":"0","items":"3","maxlen": "100","author":"1","date":"1"}'); INSERT INTO jos_extensions(name,type,element,folder,client_id,manifest_cache,params,custom_data,system_data) VALUES('mod_myquestions', 'module', 'mod_myquestions', '', 0, '{"legacy":false,"name":"mod_myquestions", "type":"module","creationDate":"2012","author":"Me", "copyright":"","authorEmail":"","authorUrl":"","version":"1.6.0", "description":"My Questions module","group":""}', '{}', '', '');

Если вы обновите фронтенд после выполнения этих запросов, вы заметите, что модуль не появился, несмотря даже на то, что полю published присвоено значение 1. Дело в том, что модуль должен быть не только опубликован, но еще и назначен для каких-либо пунктов меню. Для этого в панели администрирования войдите в меню " Расширения" - " Менеджер модулей" и выберите модуль " Вопросы". В разделе " Привязка к пунктам меню" выберите в выпадающем списке значение " На всех страницах" и нажмите кнопку " Сохранить и закрыть" (рис. 7.9).

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

Рис. 7.9. Привязка модуля ко всем страницам

Создание модуля

Напишем модуль, который будет выводить ссылки на последние вопросы или на случайный вопрос. Создадим в папке /modulesпапку mod_myquestions, а в ней - файл mod_myquestions.php:

<?php defined('_JEXEC') or die ('Restricted access'); $items = $params->get('items', 1); $maxlen = $params->get('maxlen',100); $random = $params->get('random', 0); $q_author = ($params->get('author',1) == 1) ? ", name" : ""; $q_date = ($params->get('date',1) == 1) ? ", date" : ""; $db = &JFactory::getDbo; $query = "SELECT id, question$q_author$q_date FROM #__myquestions WHERE answer <> '' AND (published = 1 OR (expiration_date <> '0000-00-00 00:00:00' AND expiration_date > NOW))"; if ($random) { $orderby = " ORDER BY RAND"; $items = 1; } else $orderby = " ORDER BY date DESC"; $query .= $orderby; $db->setQuery($query, 0, $items); $rows = $db->loadObjectList; foreach($rows as $row) { echo '<a href="#"index.php?option=com_myquestions&view=question&task=show& id=".$row->id).'">'.substr(strip_tags($row->question),0,$maxlen-1).'</a><br/>'; $addition = array; if ($params->get('author',1) == 1) $addition[] = $row->name; if ($params->get('date',1) == 1) $addition[] = JHTML::_('date', $row->date, JText::_('DATE_FORMAT_LC3')); if (count($addition)) echo '<i>'.implode(' ', $addition).'</i><br/>'; } ?>

  • Читать дальше
  • 1
  • ...
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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