Web Development
AMCarousel
amc logo

AMCarousel

Система плагинов

Система плагинов позволяет создавать поддержку новых расширений для "AMCarousel".

 

Плагин

Плагин может состоять из одного или двух файлов помещенных в папку "plugins" компонента "com_amcarousel" в администраторской части сайта. /administrator/components/com_amcarousel/plugins

 

Пример плагина

Рассмотрим пример плагина com_content.article для материалов Joomla.

Файл com_content.article.php служит для получения списка будущих элементов карусели. Имя класса должно состоять из amcarousel и имени файла com_contentarticle. Без пробелов, точек и расширения файла!

файл com_content.article.php
class amcarouselcom_contentarticle
{
	public function getList($data)
	{
		$list = array();
		return json_encode($list);
	}
}

Файл com_content.article.xml служит для добавления параметров в плагин. 

файл com_content.article.xml
<?xml version="1.0"?>
<form>
  <fields name="params">
    <fieldset name="basic">

      // Standart Joomla fields

    </fieldset>
  </fields>
</form>

 

Параметры плагина

В функции getList() доступен stdClass Object $data с параметрами слайдера и параметрами плагина.

пример $data со всеми параметрами слайдера
stdClass Object
(
[plugin] => com_k2.item
[params] => {"category":"27","children_category":"1","ordering":"hits","ordering_direction":"DESC","image_size":"M"}
[count] => 15
[custom] =>
)

Получения параметров плагина 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

<?xml version="1.0"?>
<form>
<fields name="params">
<fieldset name="basic">
<field
type="spacer"
name="articlespacer"
label="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE" />
<field
name="category_on"
type="list"
label="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_CATEGORY_ON"
description="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_CATEGORY_ON_DESC"
filter="intval"
class="chzn-color-state"
size="1"
default="0">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="category"
type="category"
extension="com_content"
label="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_PARENT_CATEGORY"
description="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_PARENT_CATEGORY_DESC" />
<field
name="children_category"
type="list"
label="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_CHILDREN_CATEGORY_ON"
description="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_CHILDREN_CATEGORY_ON_DESC"
filter="intval"
class="chzn-color-state"
size="1"
default="0">
<option value="0">JNO</option>
<option value="1">JYES</option>
</field>
<field
name="ordering"
type="list"
label="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING"
description="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_DESC"
filter="intval"
size="1"
default="0">
<option value="id">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_ID</option>
<option value="title">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_TITLE</option>
<option value="random">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_RANDOM</option>
<option value="created">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_CREATED</option>
<option value="modified">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_MODIFIED</option>
<option value="publish_up">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_PUBLISH_UP</option>
<option value="hits">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_HITS</option>
</field>
<field
name="ordering_direction"
type="list"
label="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_DIRECTION"
description="COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_DIRECTION_DESCRIPTION"
filter="intval"
size="1"
default="DESC">
<option value="DESC">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_DIRECTION_DESC</option>
<option value="ASC">COM_AMCAROUSEL_PLUGIN_CONTENT_ARTICLE_ORDERING_DIRECTION_ASC</option>
</field>
</fieldset>
</fields>
</form>