
Система плагинов
Система плагинов позволяет создавать поддержку новых расширений для "AMCarousel".
Плагин
Плагин может состоять из одного или двух файлов помещенных в папку "plugins"
компонента "com_amcarousel"
в администраторской части сайта. /administrator/components/com_amcarousel/plugins
Пример плагина
Рассмотрим пример плагина com_content.article
для материалов Joomla.
Файл com_content.article.php
служит для получения списка будущих элементов карусели. Имя класса должно состоять из amcarousel
и имени файла com_contentarticle
. Без пробелов, точек и расширения файла!
class amcarouselcom_contentarticle { public function getList($data) { $list = array(); return json_encode($list); } }
Файл com_content.article.xml
служит для добавления параметров в плагин.
<form>
<fields name="params">
<fieldset name="basic">
// Standart Joomla fields
</fieldset>
</fields>
</form>
Параметры плагина
В функции getList()
доступен stdClass Object $data
с параметрами слайдера и параметрами плагина.
(




)
Получения параметров плагина json_decode($data->params)
$params = json_decode($data->params); $categoryID = $params->category; echo $categoryID; // result "27"
Ответ плагина
Плагин возвращает JSON массив со списком элементов карусели. Каждый элемент должен содержать:
- title - заголовок слайда (необязательно).
- image - путь к фоновому изображению слайда (обязательно).
- link - ссылка (необязательно).
- category - имя категории (необязательно).
Полный пример плагина com_content.article
Файл com_content.article.php
<?php /** * @package Com AMCarousel * @author Maxim Resh * @copyright Copyright © 2020 - All rights reserved. * @license GNU/GPLv3 **/ // No direct access defined( '_JEXEC' ) or die; /* * class name preffix 'amcarousel' + 'pluginname'. * pluginname = plugin file name */ class amcarouselcom_contentarticle { /* * title, image, link, category. */ public function getList($data) { // Plugin params $params = json_decode($data->params); $db = JFactory::getDbo(); $query = $db->getQuery(true); $query->select('a.id, a.alias, a.title, a.images, a.catid, a.language') ->select('c.title as category_title') ->from('#__content AS a') ->where('a.state = "1"'); $query->leftJoin( '#__categories as c ON c.id=a.catid' ); // Category filter if ($params->category_on){ if ($params->children_category == '0'){ // No child categories $query->where('a.catid = '.$params->category); } else { // Including child categories $tableCategory = JTable::getInstance('category'); $tableCategory->load( $params->category ); $rgt = $tableCategory->rgt; $lft = $tableCategory->lft; $query->where('c.lft >= ' . (int) $lft); $query->where('c.rgt <= ' . (int) $rgt); } } // Ordering if ($params->ordering != 'random'){ $query->order('a.'.$db->quoteName($params->ordering) . ' ' . $params->ordering_direction); } else { $query->order('RAND()'); } // Limit $query->setLimit($data->count); $db->setQuery($query); $result = $db->loadObjectList(); if (!empty($result)) { // Create Title, Image, Link, Category $list = array(); foreach ($result as $i=>$r) { // Title $list[$i]['title'] = $r->title; // Image src $im = json_decode($r->images); $list[$i]['image'] = $im->image_intro; // Item link JLoader::register('ContentHelperRoute', JPATH_SITE . '/components/com_content/helpers/route.php'); $linkSlug = $r->alias ? ($r->id . ':' . $r->alias) : $r->id; $list[$i]['link'] = JRoute::_(ContentHelperRoute::getArticleRoute($linkSlug, $r->catid, $r->language)); // Category name (optional) $list[$i]['category'] = $r->category_title; } return json_encode($list); } return null; } }
Файл com_content.article.xml
<form>






















































































































































































































































































</form>