Blame view

frontend/widgets/SliderWidget.php 5.52 KB
873e3d80   Administrator   14.09.16
1
  <?php
namespace frontend\widgets;

use yii\base\Widget;
use yii\web\View;
use frontend\assets\FlipclockAsset;

class SliderWidget extends Widget
{
    public $title;

    public function init(){

        parent::init();

    }
    /**
     * @var bool флаг загрузки скрипта слайдера
     */
    public $is_init_slider = false;

    public function run()
    {


            $slider = \common\models\Slider::find()->where([\common\models\Slider::tableName().'.title'=>$this->title])->joinWith("sliderImage")->one();

            if (! empty ($slider))
            {
                // изображения
                $images = $slider->sliderImage;
                if (! empty ($images))
                {
                    // подключаем jssor-slider
                    $this->initSliderJs();

                    // скрипт-обработчик
                    $this->initSliderScript($slider);

                    // html
                    return $this->htmlSlider($slider, $images);
                }
            }
            return $this->render('slider',[
                'slider'=>$slider
            ]);


    }


    // ==== DISPLAY ====

    public function initSliderJs ()
    {
        if (! $this->is_init_slider)
        {
            // TODO:: wiget подключение jcarousel
            $this->view->registerJsFile(\Yii::$app->request->baseUrl . '/js/widget-carousel/lib/jquery.jcarousel.min.js',[
                'position' => View::POS_END,
                'depends' => ['yii\web\JqueryAsset']
            ]);
            $this->is_init_slider = true;
        }
    }

    public function initSliderScript ($slider)
    {
        FlipclockAsset::register($this->view);
        $this->view->registerJs('
            var '.$slider->title.'_option_1 = {
                $AutoPlayInterval: '.$slider->duration.',
                $SlideDuration: '.$slider->speed.',
            };
        ', 1);

        $this->view->registerCssFile (\Yii::$app->request->BaseUrl . '/js/widget-carousel/'.$slider->title.'/style.css');

        $this->view->registerJsFile(\Yii::$app->request->BaseUrl . '/js/widget-carousel/'.$slider->title.'/style.js',[
            'position' => View::POS_END,
            'depends' => ['yii\web\JqueryAsset']
        ]);
    }

    public function htmlSlider ($slider, $images)
    {


        ob_start();

        if (! empty ($images))
        {
            echo '<div id="'.$slider->title.'">';

            echo '
                <!-- Loading Screen -->
                <div u="loading" class="loading">
                    <div class="load-1"></div>
                    <div class="load-2"></div>
                </div>

                <!-- Slides Container -->
                <div u="slides" class="item-list">';

            foreach ($images as $row)
            {
                if($row->isActive()){
                    echo '<div class="item">';

                    if(!empty($row->end_at) && strtotime($row->end_at) > strtotime(date("Y-m-d"))){
                        ?>
                        <div class="clock_style clock_<?= $row->primaryKey ?>"></div>
                        <script type="text/javascript">
                            var clock;

                            $(document).ready(function() {
                                var clock;

                                clock = $('.clock_<?= $row->primaryKey ?>').FlipClock({
                                    clockFace: 'DailyCounter',
                                    language: 'ru',
                                    classes: {
                                        active: 'flip-clock-active',
                                        before: 'flip-clock-before',
                                        divider: 'flip-clock-divider',
                                        dot: 'flip-clock-dot',
                                        label: 'flip-clock-label',
                                        flip: 'flip',
                                        play: 'play',
                                        wrapper: 'flip-clock-wrapper'
                                    },
                                });

                                clock.setTime(<?= strtotime($row->end_at) - strtotime(date("Y-m-d H:i:s"))?>);
                                clock.setCountdown(true);
                                clock.start();

                            });
                        </script>


                        <?php
                    }

                    if (! empty ($row->url))
                    {
                        echo '<a href="'.$row->url.'">';
                    }

                    if (empty ($row->image))
                    {
                        $row->image = '/img/notpic.gif';
                    }

                    echo '<img u="image" src="/storage/slider/'.$row->image.'" alt ="'.$row->alt.'" class="glossy" />';
                    //echo '<div u="caption" class="title bg-transparent">'.$row->title.'</div>';

                    if (! empty ($row->url))
                    {
                        echo '</a>';
                    }

                    echo '</div>';
                }

            }

            echo '</div>';

            echo '
                <div u="navigator" class="jssorb03">
                    <div u="prototype">
                    </div>
                </div>

                <span u="arrowleft" class="jssora03l"></span>
                <span u="arrowright" class="jssora03r"></span>';

            echo '</div>';
        }

        return ob_get_clean();
    }

}