Магазин на Yii2, часть 6. Показываем на главной хиты, новинки и распродажи

06.05.2019

Теги: Web-разработкаYii2ИнтернетМагазинКаталогТоваровПрактикаФреймворк

Давайте создадим контроллер PageController, который будет отвечать за показ страниц сайта, не связанных с каталогом товаров. Вообще, такой контроллер уже есть сразу после установки фреймворка — это SiteController, но мы его оставим без изменений, как образец. В первую очередь, надо переопределить контроллер по умолчанию с site на page:

/*
 * Файл config/web.php
 */
$config = [
    /* ... */
    'defaultRoute' => 'page',
    /* ... */
];

Потом создаем контроллер PageController:

<?php
namespace app\controllers;

use app\models\Product;

class PageController extends AppController {
    /*
     * Главная страница сайта
     */
    public function actionIndex() {
        // получаем лидеров продаж
        $hitProducts = Product::find()->where(['hit' => 1])->limit(3)->asArray()->all();
        // получаем новые товары
        $newProducts = Product::find()->where(['new' => 1])->limit(3)->asArray()->all();
        // получаем товары распродажи
        $saleProducts = Product::find()->where(['sale' => 1])->limit(3)->asArray()->all();

        return $this->render(
            'index',
            compact('hitProducts', 'newProducts', 'saleProducts')
        );
    }
}

Контроллер наследует класс AppController, где у нас будут методы, общие для всех контроллеров:

<?php
namespace app\controllers;

use yii\web\Controller;

class AppController extends Controller {

}

Теперь создаем view-шаблон для действия по умолчанию, т.е. файл views/page/index.php. И переносим весь html и php код из views/site/index.php в views/page/index.php.

Находим место в html-коде, где идет вывод лидеров продаж, новинок и товаров распродажи. На это место вставляем циклы:

<section>
    <div class="container">
        <div class="row">
            <div class="col-sm-3">
                    <h2>Каталог</h2>
                    <div class="category-products">
                        <?= TreeWidget::widget(); ?>
                    </div>

                    <h2>Бренды</h2>
                    <div class="brand-products">
                        <?= BrandsWidget::widget(); ?>
                    </div>
            </div>

            <div class="col-sm-9">
                <?php if (!empty($hitProducts)): ?>
                    <h2>Лидеры продаж</h2>
                    <div class="row">
                        <?php foreach ($hitProducts as $item): ?>
                            <div class="col-sm-4">
                                <div class="product-wrapper text-center">
                                    <?=
                                    Html::img(
                                        '@web/images/products/medium/'.$item['image'],
                                        ['alt' => $item['name'], 'class' => 'img-responsive']
                                    );
                                    ?>
                                    <h2><?= $item['price']; ?> руб.</h2>
                                    <p>
                                        <a href="<?= Url::to(['catalog/product', 'id' => $item['id']]); ?>">
                                            <?= Html::encode($item['name']); ?>
                                        </a>
                                    </p>
                                    <a href="#" class="btn btn-warning">
                                        <i class="fa fa-shopping-cart"></i>
                                        Добавить в корзину
                                    </a>
                                </div>
                            </div>
                        <?php endforeach; ?>
                    </div>
                <?php endif; ?>
                <?php if (!empty($newProducts)): ?>
                    <h2>Новинки</h2>
                    <div class="row">
                        <?php foreach ($newProducts as $item): ?>
                            <div class="col-sm-4">
                                <div class="product-wrapper text-center">
                                    <?=
                                    Html::img(
                                        '@web/images/products/medium/'.$item['image'],
                                        ['alt' => $item['name'], 'class' => 'img-responsive']
                                    );
                                    ?>
                                    <h2><?= $item['price']; ?> руб.</h2>
                                    <p>
                                        <a href="<?= Url::to(['catalog/product', 'id' => $item['id']]); ?>">
                                            <?= Html::encode($item['name']); ?>
                                        </a>
                                    </p>
                                    <a href="#" class="btn btn-warning">
                                        <i class="fa fa-shopping-cart"></i>
                                        Добавить в корзину
                                    </a>
                                </div>
                            </div>
                        <?php endforeach; ?>
                    </div>
                <?php endif; ?>
                <?php if (!empty($saleProducts)): ?>
                    <h2>Распродажа</h2>
                    <div class="row">
                        <?php foreach ($saleProducts as $item): ?>
                            <div class="col-sm-4">
                                <div class="product-wrapper text-center">
                                    <?=
                                    Html::img(
                                        '@web/images/products/medium/'.$item['image'],
                                        ['alt' => $item['name'], 'class' => 'img-responsive']
                                    );
                                    ?>
                                    <h2><?= $item['price']; ?> руб.</h2>
                                    <p>
                                        <a href="<?= Url::to(['catalog/product', 'id' => $item['id']]); ?>">
                                            <?= Html::encode($item['name']); ?>
                                        </a>
                                    </p>
                                    <a href="#" class="btn btn-warning">
                                        <i class="fa fa-shopping-cart"></i>
                                        Добавить в корзину
                                    </a>
                                </div>
                            </div>
                        <?php endforeach; ?>
                    </div>
                <?php endif; ?>
            </div>
        </div>
    </div>
</section>

Поиск: Web-разработка • Yii2 • Интернет магазин • Каталог товаров • Фреймворк • Лидеры продаж • Главная страница

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.