Shop (skeeks/cms-shop)

Полноценный интернет магазин.

Виджеты

Этапы оформления заказа

Потребуется установка skeeks/cms-shop-cart-steps-widget

<?= \skeeks\cms\shopCartStepsWidget\ShopCartStepsWidget::widget(); ?>

Товары в корзине

Потребуется установка skeeks/cms-shop-cart-items-widget

<?= \skeeks\cms\shopCartItemsWidget\ShopCartItemsListWidget::widget([
   'dataProvider' => new \yii\data\ActiveDataProvider([
       'query' => \Yii::$app->shop->shopFuser->getShopBaskets(),
       'pagination' =>
       [
           'defaultPageSize' => 100,
           'pageSizeLimit' => [1, 100],
       ]
   ]),

]); ?>

Оформление заказа

Потребуется установка skeeks/cms-shop-checkout-widget

<? $checkout = \skeeks\cms\shopCheckout\ShopCheckoutWidget::begin([]); ?>
<? \skeeks\cms\shopCheckout\ShopCheckoutWidget::end(); ?>

Скидочные купоны

Потребуется установка skeeks/cms-shop-discount-coupon-widget

<?= \skeeks\cms\shopDiscountCoupon\ShopDiscountCouponWidget::widget(); ?>

Примеры

Страница полной корзины

Шаблон находится по адресу default\modules\shop\cart\cart.php

<?
   \frontend\assets\CartAsset::register($this);
   \skeeks\cms\shop\widgets\ShopGlobalWidget::widget();
   $this->registerJs(<<<JS
       (function(sx, $, _)
       {
           new sx.classes.shop.FullCart(sx.Shop, 'sx-cart-full');
       })(sx, sx.$, sx._);
   JS
   );
?>
<!--=== Content Part ===-->
<section class="sx-cart-layout bg-printair">
    <div class="row">
        <div class="container sx-border-block">
            <? \skeeks\cms\modules\admin\widgets\Pjax::begin([
                'id' => 'sx-cart-full',
            ]) ?>

            <? if (\Yii::$app->shop->shopFuser->isEmpty()) : ?>
                <!-- EMPTY CART -->
                <div class="panel panel-default">
                    <div class="panel-body">
                        <strong>Ваша корзина пуста!</strong><br/>
                        В вашей корзине нет покупок.<br/>
                        Кликните <a href="/" data-pjax="0">сюда</a> для продолжения покупок. <br/>
                        <!--<span class="label label-warning">this is just an empty cart example</span>-->
                    </div>
                </div>
                <!-- /EMPTY CART -->
            <? else: ?>
                <?= \skeeks\cms\shopCartStepsWidget\ShopCartStepsWidget::widget(); ?>
                <hr/>
                <!-- LEFT -->
                <div class="col-lg-9 col-sm-8">
                    <?= \skeeks\cms\shopCartItemsWidget\ShopCartItemsListWidget::widget([
                        'dataProvider' => new \yii\data\ActiveDataProvider([
                            'query' => \Yii::$app->shop->shopFuser->getShopBaskets(),
                            'pagination' =>
                            [
                                'defaultPageSize' => 100,
                                'pageSizeLimit' => [1, 100],
                            ]
                        ]),

                    ]); ?>
                </div>
                <!-- RIGHT -->
                <div class="col-lg-3 col-sm-4">
                    <? $url = \yii\helpers\Url::to(['/shop/cart/checkout']); ?>
                    <?= $this->render("_result", [
                        'submit' => <<<HTML
    <a href="{$url}" class="btn btn-primary btn-lg btn-block size-15" data-pjax="0">
        <i class="fa fa-mail-forward"></i> Оформить
    </a>
HTML
                    ]); ?>
                </div>
            <? endif; ?>

            <? \skeeks\cms\modules\admin\widgets\Pjax::end() ?>
        </div>
    </div>
</section>

Страница оформления заказа

Шаблон находится по адресу default\modules\shop\cart\checkout.php

<?
   \frontend\assets\CartAsset::register($this);
   \skeeks\cms\shop\widgets\ShopGlobalWidget::widget();

   $this->registerJs(<<<JS
       (function(sx, $, _)
       {
           new sx.classes.shop.FullCart(sx.Shop, 'sx-cart-full');
       })(sx, sx.$, sx._);
   JS
   );
?>


<!--=== Content Part ===-->
<section class="sx-cart-layout bg-printair">
    <div class="row">
        <div class="container sx-border-block">
            <? \skeeks\cms\modules\admin\widgets\Pjax::begin([
                'id'                    => 'sx-cart-full',
            ]) ?>


            <? if (\Yii::$app->shop->shopFuser->isEmpty()) : ?>
                <!-- EMPTY CART -->
                    <div class="panel panel-default">
                    <div class="panel-body">
                        <strong>Ваша корзина пуста!</strong><br />
                        В вашей корзине нет покупок.<br />
                        Кликните <a href="/" data-pjax="0">сюда</a> для продолжения покупок. <br />
                        <!--<span class="label label-warning">this is just an empty cart example</span>-->
                    </div>
                </div>
                <!-- /EMPTY CART -->
            <? else: ?>

                <?= \skeeks\cms\shopCartStepsWidget\ShopCartStepsWidget::widget(); ?>

                <hr />

                <!-- LEFT -->
                <div class="col-lg-9 col-sm-8">

                    <!-- CART -->

                    <!-- cart content -->
                    <div id="cartContent">

    <?
    $this->registerCss(<<<CSS
    .radio input[type=radio]
    {
        left: 0px;
        margin-left: 0px;
    }
    .checkbox label, .radio label
    {
        padding-left: 0px;
    }
CSS
    );
    ?>
                        <? $checkout = \skeeks\cms\shopCheckout\ShopCheckoutWidget::begin([
                            'btnSubmitWrapperOptions' =>
                            [
                                'style' => 'display: none;'
                            ]
                        ]); ?>
                        <? \skeeks\cms\shopCheckout\ShopCheckoutWidget::end(); ?>

                        <div class="clearfix"></div>
                    </div>
                    <!-- /cart content -->

                    <!-- /CART -->

                </div>


                <!-- RIGHT -->
                <div class="col-lg-3 col-sm-4">

                    <? $url = \yii\helpers\Url::to(['/shop/cart/payment']) ; ?>
                    <?= $this->render("_result", [
                        'submit' => <<<HTML
    <a href="#" onclick="$('#{$checkout->formId}').submit(); return false;" class="btn btn-primary btn-lg btn-block size-15" data-pjax="0">
        <i class="fa fa-mail-forward"></i> Оформить
    </a>
HTML

                    ]); ?>

                </div>
            <? endif; ?>

            <? \skeeks\cms\modules\admin\widgets\Pjax::end() ?>
        </div>
    </div>
</section>

Финальная страница заказа

Шаблон находится по адресу default\modules\shop\order\finish.php

<section>
    <div class="row">
        <div class="col-sm-12">

<?= \skeeks\cms\shopCartStepsWidget\ShopCartStepsWidget::widget(); ?>
<hr />
<div class="box-light">
    <!--=== Content Part ===-->
    <div class="row">
        <div class="col-lg-12 col-md-10">
            <h4>Заказ №<?= $model->id; ?> от <?= \Yii::$app->formatter->asDatetime($model->created_at); ?> </h4>

            <div class="table-responsive">
                <?= \yii\widgets\DetailView::widget([
                    'model' => $model,
                    'template' => "<tr><th>{label}</th><td style='width:50%;'>{value}</td></tr>",
                    'attributes' => [
                        /*[                      // the owner name of the model
                            'label' => 'Номер заказа',
                            'format' => 'raw',
                            'value' => $model->id,
                        ],*/
                        /*[                      // the owner name of the model
                            'label' => 'Создан',
                            'format' => 'raw',
                            'value' => \Yii::$app->formatter->asDatetime($model->created_at),
                        ],*/
                        [                      // the owner name of the model
                            'label' => 'Сумма заказа',
                            'format' => 'raw',
                            'value' => \Yii::$app->money->convertAndFormat($model->moneyOriginal),
                        ],
                        [                      // the owner name of the model
                            'label' => 'Способ оплаты',
                            'format' => 'raw',
                            'value' => $model->paySystem->name,
                        ],
                        [
                            'label' => 'Доставка',
                            'format' => 'raw',
                            'value' => 'Курьер',
                        ],
                        [                      // the owner name of the model
                            'label' => 'Статус',
                            'format' => 'raw',
                            'value' => Html::tag('span', $model->status->name, ['style' => 'color: ' . $model->status->color]),
                        ],
                        [                      // the owner name of the model
                            'label' => 'Оплата',
                            'format' => 'raw',
                            'value' => $model->payed == 'Y' ? "<span style='color: green;'>Оплачен</span>" : "<span style='color: red;'>Не оплчаен</span>",
                        ],
                        [                      // the owner name of the model
                            'attribute' => 'Заказ отменен',
                            'label' => 'Заказ отменен',
                            'format' => 'raw',
                            'value' => $model->reason_canceled,
                            'visible' => $model->canceled == 'Y',
                        ],
                    ]
                ]) ?>
            </div>
            <h4>Данные покупателя: </h4>

            <div class="table-responsive">
                <?= \yii\widgets\DetailView::widget([
                    'model' => $model->buyer->relatedPropertiesModel,
                    'template' => "<tr><th style='width: 50%; '>{label}</th><td style='width:50%;'>{value}</td></tr>",
                    'attributes' => array_keys($model->buyer->relatedPropertiesModel->toArray())
                ]) ?>
            </div>
            <h4>Содержимое заказа: </h4>
            <!-- cart content -->
            <?= \skeeks\cms\shopCartItemsWidget\ShopCartItemsListWidget::widget([
                'dataProvider' => new \yii\data\ActiveDataProvider([
                    'query' => $model->getShopBaskets(),
                    'pagination' =>
                    [
                        'defaultPageSize' => 100,
                        'pageSizeLimit' => [1, 100],
                    ],
                ]),
                'footerView'    => false,
                'itemView'      => '@skeeks/cms/shopCartItemsWidget/views/items-list-order-item',
            ]); ?>
            <!-- /cart content -->
            <div class="toggle-transparent toggle-bordered-full clearfix">
                <div class="toggle active" style="display: block;">
                    <div class="toggle-content" style="display: block;">

                            <span class="clearfix">
                                <span
                                    class="pull-right"><?= \Yii::$app->money->convertAndFormat($model->moneyOriginal); ?></span>
                                <strong class="pull-left">Товаров:</strong>
                            </span>
                        <? if ($model->moneyDiscount->getValue() > 0) : ?>
                            <span class="clearfix">
                                    <span
                                        class="pull-right"><?= \Yii::$app->money->convertAndFormat($model->moneyDiscount); ?></span>
                                    <span class="pull-left">Скидка:</span>
                                </span>
                        <? endif; ?>

                        <? if ($model->moneyDelivery->getValue() > 0) : ?>
                            <span class="clearfix">
                                    <span
                                        class="pull-right"><?= \Yii::$app->money->convertAndFormat($model->moneyDelivery); ?></span>
                                    <span class="pull-left">Доставка:</span>
                                </span>
                        <? endif; ?>

                        <? if ($model->moneyVat->getValue() > 0) : ?>
                            <span class="clearfix">
                                    <span
                                        class="pull-right"><?= \Yii::$app->money->convertAndFormat($model->moneyVat); ?></span>
                                    <span class="pull-left">Налог:</span>
                                </span>
                        <? endif; ?>

                        <? if ($model->weight > 0) : ?>
                            <span class="clearfix">
                                    <span class="pull-right"><?= $model->weight; ?> г.</span>
                                    <span class="pull-left">Вес:</span>
                                </span>
                        <? endif; ?>
                        <hr/>

                            <span class="clearfix">
                                <span
                                    class="pull-right size-20"><?= \Yii::$app->money->convertAndFormat($model->money); ?></span>
                                <strong class="pull-left">ИТОГ:</strong>
                            </span>
                        <hr/>
                        <? if ($model->allow_payment == \skeeks\cms\components\Cms::BOOL_Y) : ?>
                            <? if ($model->paySystem->paySystemHandler && $model->payed == 'N') : ?>
                                <?= Html::a("Оплатить", \yii\helpers\Url::to(['/shop/order/finish-pay', 'key' => $model->key]), [
                                    'class' => 'btn btn-lg btn-primary'
                                ]); ?>
                            <? else : ?>

                            <? endif; ?>
                        <? else : ?>
                            <? if ($model->paySystem->paySystemHandler) : ?>
                                В настоящий момент, заказ находится в стадии проверки и сборки. Его можно будет оплатить позже.
                            <? endif; ?>
                        <? endif; ?>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>



    </div>
</div>
</section>

Содержимое шаблона default\modules\shop\cart\_result.php

<div class="toggle-transparent toggle-bordered-full clearfix">

    <div class="toggle nomargin-top">
        <label>Купон</label>

        <div class="toggle-content" style="display: none;">
            <?= \skeeks\cms\shopDiscountCoupon\ShopDiscountCouponWidget::widget(); ?>
        </div>
    </div>
</div>

<div class="toggle-transparent toggle-bordered-full clearfix">
    <div class="toggle active" style="display: block;">
        <div class="toggle-content" style="display: block;">

            <span class="clearfix">
                <span class="pull-right"><?= \Yii::$app->money->convertAndFormat(\Yii::$app->shop->shopFuser->moneyOriginal); ?></span>
                <strong class="pull-left">Товаров:</strong>
            </span>
            <? if (\Yii::$app->shop->shopFuser->moneyDiscount->getValue() > 0) : ?>
                <span class="clearfix">
                    <span class="pull-right"><?= \Yii::$app->money->convertAndFormat(\Yii::$app->shop->shopFuser->moneyDiscount); ?></span>
                    <span class="pull-left">Скидка:</span>
                </span>
            <? endif; ?>

            <? if (\Yii::$app->shop->shopFuser->moneyDelivery->getValue() > 0) : ?>
                <span class="clearfix">
                    <span class="pull-right"><?= \Yii::$app->money->convertAndFormat(\Yii::$app->shop->shopFuser->moneyDelivery); ?></span>
                    <span class="pull-left">Доставка:</span>
                </span>
            <? endif; ?>

            <? if (\Yii::$app->shop->shopFuser->moneyVat->getValue() > 0) : ?>
                <span class="clearfix">
                    <span class="pull-right"><?= \Yii::$app->money->convertAndFormat(\Yii::$app->shop->shopFuser->moneyVat); ?></span>
                    <span class="pull-left">Налог:</span>
                </span>
            <? endif; ?>

            <? if (\Yii::$app->shop->shopFuser->weight > 0) : ?>
                <span class="clearfix">
                    <span class="pull-right"><?= \Yii::$app->shop->shopFuser->weight; ?> г.</span>
                    <span class="pull-left">Вес:</span>
                </span>
            <? endif; ?>

            <hr />

            <span class="clearfix">
                <span class="pull-right size-20"><?= \Yii::$app->money->convertAndFormat(\Yii::$app->shop->shopFuser->money); ?></span>
                <strong class="pull-left">ИТОГ:</strong>
            </span>

            <hr />

            <?= $submit; ?>
        </div>
    </div>
</div>