common/widgets/DbCarousel.php
<?php
/*
* This file is part of the HomeFinanceV2 project.
*
* (c) Rafalsky.com <http://github.com/Rafalsky/>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*
* Eugine Terentev <eugine@terentev.net>
*/
namespace common\widgets;
use common\models\WidgetCarousel;
use common\models\WidgetCarouselItem;
use yii\base\InvalidConfigException;
use yii\bootstrap\Carousel;
use yii\helpers\Html;
/**
* Class DbCarousel
* @package common\widgets
*/
class DbCarousel extends Carousel
{
/**
* @var
*/
public $key;
/**
* @var array
*/
public $controls = [
'<span class="glyphicon glyphicon-chevron-left"></span>',
'<span class="glyphicon glyphicon-chevron-right"></span>',
];
/**
* @throws InvalidConfigException
*/
public function init()
{
if (!$this->key) {
throw new InvalidConfigException;
}
$cacheKey = [
WidgetCarousel::className(),
$this->key
];
$items = \Yii::$app->cache->get($cacheKey);
if ($items === false) {
$items = [];
$query = WidgetCarouselItem::find()
->joinWith('carousel')
->where([
'{{%widget_carousel_item}}.status' => 1,
'{{%widget_carousel}}.status' => WidgetCarousel::STATUS_ACTIVE,
'{{%widget_carousel}}.key' => $this->key,
])
->orderBy(['order' => SORT_ASC]);
foreach ($query->all() as $k => $item) {
/** @var $item \common\models\WidgetCarouselItem */
if ($item->path) {
$items[$k]['content'] = Html::img($item->getImageUrl());
}
if ($item->url) {
$items[$k]['content'] = Html::a($items[$k]['content'], $item->url, ['target' => '_blank']);
}
if ($item->caption) {
$items[$k]['caption'] = $item->caption;
}
}
\Yii::$app->cache->set($cacheKey, $items, 60 * 60 * 24 * 365);
}
$this->items = $items;
parent::init();
}
/**
* Renders the widget.
*/
public function run()
{
$this->registerPlugin('carousel');
$content = '';
if (!empty($this->items)) {
$content = implode("\n", [
$this->renderIndicators(),
$this->renderItems(),
$this->renderControls()
]);
}
return Html::tag('div', $content, $this->options);
}
}