FeedController.php 2.52 KB
<?php
/**
 * Created by PhpStorm.
 * User: Alex Savenko
 * Date: 05.12.2016
 * Time: 18:36
 */

namespace console\controllers;

use yii\console\Controller;
use Yii;
use yii\helpers\Url;
use common\modules\product\models\Product;
use common\modules\product\models\ProductVariant;

use common\modules\product\models\Category;
use frontend\models\ProductFrontendSearch;
use common\models\Page;
use yii\filters\VerbFilter;

use yii\helpers\ArrayHelper;
use yii\web\NotFoundHttpException;


class FeedController extends Controller
{
    private $idList = [];
    private $count = 1;

    public function getProducts() {
        return Product::find()
            ->innerJoin(ProductVariant::tableName(), ProductVariant::tableName() .'.product_id = '. Product::tableName() .'.product_id')
            ->where(['and', ProductVariant::tableName().'.status = 0', ProductVariant::tableName().'.stock > 0'])
            ->limit(3)
            ->all();
    }

    public function createRow( $product, &$content ){
        if ($this->checkId($product->product_id)) {
            print $this->count++ . "\r\n";
            $url = Url::to(['catalog/product', 'product' => $product]);
            $content[] = [
                $product->variant->product_variant_id,
                $product->category->category_id,
                $product->category->name,
                $product->name,
                $product->price.' UAH',
                $product->images->imageUrl,
                $url,
            ];
        }
    }

    public function checkId($id){
        if(!in_array($id, $this->idList)){
            $this->idList[] = $id;
            return true;
        } else {
            return false;
        }
    }

    public function actionProcess() {

        $config = ArrayHelper::merge(
            require(__DIR__ . '/../../frontend/config/main.php'),
            require(__DIR__ . '/../../common/config/main.php')

        );

        Yii::$app->urlManager->addRules($config['components']['urlManager']['rules']);

        $dirName = Yii::getAlias('@frontend').'/web';
        $filename = 'feed.csv';
        setlocale(LC_ALL, 'ru_RU.CP1251');

        $handle = fopen($dirName .'/'. $filename, "w");

        $content[] = ['ID', 'ID2', 'Item Category', 'Item title', 'Price', 'Final URL', 'Image URL'];

        foreach ($this->getProducts() as $product) {
            $this->createRow($product, $content);
        }

        foreach ($content as $item) {
            fputcsv($handle, $item);
        }
        fclose($handle);

        print $dirName .'/'. $filename;
    }
}