Commit feffea0a9c9c22fd83dcd54fe4131a840adb9ae9

Authored by Yarik
1 parent 28bbf968

Namespaces

Module.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\modules;
  4 +
  5 + class Module extends \yii\base\Module
  6 + {
  7 +
  8 + public function init()
  9 + {
  10 + parent::init();
  11 + }
  12 + }
0 13 \ No newline at end of file
... ...
composer.json
... ... @@ -5,7 +5,9 @@
5 5 "require": {
6 6 "php": ">=7.0",
7 7 "yiisoft/yii2": "*",
8   - "developeruz/yii2-db-rbac": "*"
  8 + "developeruz/yii2-db-rbac": "*",
  9 + "artweb/artbox": "dev-master",
  10 + "artweb/artbox/language": "dev-master"
9 11 },
10 12 "autoload": {
11 13 "psr-4": {
... ...
controllers/SeoCategoryController.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace backend\controllers;
  4 +
  5 + use Yii;
  6 + use artweb\artbox\models\SeoCategory;
  7 + use artweb\artbox\models\SeoCategorySearch;
  8 + use yii\web\Controller;
  9 + use yii\web\NotFoundHttpException;
  10 + use yii\filters\VerbFilter;
  11 + use developeruz\db_rbac\behaviors\AccessBehavior;
  12 +
  13 + /**
  14 + * SeoCategoryController implements the CRUD actions for SeoCategory model.
  15 + */
  16 + class SeoCategoryController extends Controller
  17 + {
  18 +
  19 + /**
  20 + * @inheritdoc
  21 + */
  22 + public function behaviors()
  23 + {
  24 + return [
  25 + 'access' => [
  26 + 'class' => AccessBehavior::className(),
  27 + 'rules' => [
  28 + 'site' => [
  29 + [
  30 + 'actions' => [
  31 + 'login',
  32 + 'error',
  33 + ],
  34 + 'allow' => true,
  35 + ],
  36 + ],
  37 + ],
  38 + ],
  39 + 'verbs' => [
  40 + 'class' => VerbFilter::className(),
  41 +
  42 + ],
  43 + ];
  44 + }
  45 +
  46 + /**
  47 + * Lists all SeoCategory models.
  48 + *
  49 + * @return mixed
  50 + */
  51 + public function actionIndex()
  52 + {
  53 + $searchModel = new SeoCategorySearch();
  54 + $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  55 +
  56 + return $this->render(
  57 + 'index',
  58 + [
  59 + 'searchModel' => $searchModel,
  60 + 'dataProvider' => $dataProvider,
  61 + ]
  62 + );
  63 + }
  64 +
  65 + /**
  66 + * Creates a new SeoCategory model.
  67 + * If creation is successful, the browser will be redirected to the 'view' page.
  68 + *
  69 + * @return mixed
  70 + */
  71 + public function actionCreate()
  72 + {
  73 + $model = new SeoCategory();
  74 + $model->generateLangs();
  75 +
  76 + if ($model->load(Yii::$app->request->post())) {
  77 + $model->loadLangs(\Yii::$app->request);
  78 + if ($model->save() && $model->transactionStatus) {
  79 + return $this->redirect(
  80 + [
  81 + 'index',
  82 + ]
  83 + );
  84 + }
  85 + }
  86 + return $this->render(
  87 + 'create',
  88 + [
  89 + 'model' => $model,
  90 + 'modelLangs' => $model->modelLangs,
  91 + ]
  92 + );
  93 + }
  94 +
  95 + /**
  96 + * Updates an existing SeoCategory model.
  97 + * If update is successful, the browser will be redirected to the 'view' page.
  98 + *
  99 + * @param integer $id
  100 + *
  101 + * @return mixed
  102 + */
  103 + public function actionUpdate($id)
  104 + {
  105 + $model = $this->findModel($id);
  106 + $model->generateLangs();
  107 + if ($model->load(Yii::$app->request->post())) {
  108 + $model->loadLangs(\Yii::$app->request);
  109 + if ($model->save() && $model->transactionStatus) {
  110 + return $this->redirect(
  111 + [
  112 + 'view',
  113 + 'id' => $model->id,
  114 + ]
  115 + );
  116 + }
  117 + }
  118 + return $this->render(
  119 + 'update',
  120 + [
  121 + 'model' => $model,
  122 + 'modelLangs' => $model->modelLangs,
  123 + ]
  124 + );
  125 + }
  126 +
  127 + /**
  128 + * Deletes an existing SeoCategory model.
  129 + * If deletion is successful, the browser will be redirected to the 'index' page.
  130 + *
  131 + * @param integer $id
  132 + *
  133 + * @return mixed
  134 + */
  135 + public function actionDelete($id)
  136 + {
  137 + $this->findModel($id)
  138 + ->delete();
  139 +
  140 + return $this->redirect([ 'index' ]);
  141 + }
  142 +
  143 + /**
  144 + * Finds the SeoCategory model based on its primary key value.
  145 + * If the model is not found, a 404 HTTP exception will be thrown.
  146 + *
  147 + * @param integer $id
  148 + *
  149 + * @return SeoCategory the loaded model
  150 + * @throws NotFoundHttpException if the model cannot be found
  151 + */
  152 + protected function findModel($id)
  153 + {
  154 + if (( $model = SeoCategory::find()
  155 + ->where([ 'id' => $id ])
  156 + ->with('lang')
  157 + ->one() ) !== null
  158 + ) {
  159 + return $model;
  160 + } else {
  161 + throw new NotFoundHttpException('The requested page does not exist.');
  162 + }
  163 + }
  164 + }
... ...
controllers/SeoController.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace backend\controllers;
  4 +
  5 + use Yii;
  6 + use artweb\artbox\models\Seo;
  7 + use artweb\artbox\models\SeoSearch;
  8 + use yii\web\Controller;
  9 + use yii\web\NotFoundHttpException;
  10 + use yii\filters\VerbFilter;
  11 + use developeruz\db_rbac\behaviors\AccessBehavior;
  12 +
  13 + /**
  14 + * SeoController implements the CRUD actions for Seo model.
  15 + */
  16 + class SeoController extends Controller
  17 + {
  18 +
  19 + /**
  20 + * @inheritdoc
  21 + */
  22 + public function behaviors()
  23 + {
  24 + return [
  25 + 'access' => [
  26 + 'class' => AccessBehavior::className(),
  27 + 'rules' => [
  28 + 'site' => [
  29 + [
  30 + 'actions' => [
  31 + 'login',
  32 + 'error',
  33 + ],
  34 + 'allow' => true,
  35 + ],
  36 + ],
  37 + ],
  38 + ],
  39 + 'verbs' => [
  40 + 'class' => VerbFilter::className(),
  41 +
  42 + ],
  43 + ];
  44 + }
  45 +
  46 + /**
  47 + * Lists all Seo models.
  48 + *
  49 + * @return mixed
  50 + */
  51 + public function actionIndex()
  52 + {
  53 + $searchModel = new SeoSearch();
  54 + $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  55 +
  56 + return $this->render(
  57 + 'index',
  58 + [
  59 + 'searchModel' => $searchModel,
  60 + 'dataProvider' => $dataProvider,
  61 + ]
  62 + );
  63 + }
  64 +
  65 + /**
  66 + * Displays a single Seo model.
  67 + *
  68 + * @param integer $id
  69 + *
  70 + * @return mixed
  71 + */
  72 + public function actionView($id)
  73 + {
  74 + return $this->render(
  75 + 'view',
  76 + [
  77 + 'model' => $this->findModel($id),
  78 + ]
  79 + );
  80 + }
  81 +
  82 + /**
  83 + * Creates a new Seo model.
  84 + * If creation is successful, the browser will be redirected to the 'view' page.
  85 + *
  86 + * @return mixed
  87 + */
  88 + public function actionCreate()
  89 + {
  90 + $model = new Seo();
  91 + $model->generateLangs();
  92 +
  93 + if ($model->load(Yii::$app->request->post())) {
  94 + $model->loadLangs(\Yii::$app->request);
  95 + if ($model->save() && $model->transactionStatus) {
  96 + return $this->redirect(
  97 + [
  98 + 'view',
  99 + 'id' => $model->id,
  100 + ]
  101 + );
  102 + }
  103 + }
  104 + return $this->render(
  105 + 'create',
  106 + [
  107 + 'model' => $model,
  108 + 'modelLangs' => $model->modelLangs,
  109 + ]
  110 + );
  111 + }
  112 +
  113 + /**
  114 + * Updates an existing Seo model.
  115 + * If update is successful, the browser will be redirected to the 'view' page.
  116 + *
  117 + * @param integer $id
  118 + *
  119 + * @return mixed
  120 + */
  121 + public function actionUpdate($id)
  122 + {
  123 + $model = $this->findModel($id);
  124 + $model->generateLangs();
  125 + if ($model->load(Yii::$app->request->post())) {
  126 + $model->loadLangs(\Yii::$app->request);
  127 + if ($model->save() && $model->transactionStatus) {
  128 + return $this->redirect(
  129 + [
  130 + 'view',
  131 + 'id' => $model->id,
  132 + ]
  133 + );
  134 + }
  135 + }
  136 + return $this->render(
  137 + 'update',
  138 + [
  139 + 'model' => $model,
  140 + 'modelLangs' => $model->modelLangs,
  141 + ]
  142 + );
  143 + }
  144 +
  145 + /**
  146 + * Deletes an existing Seo model.
  147 + * If deletion is successful, the browser will be redirected to the 'index' page.
  148 + *
  149 + * @param integer $id
  150 + *
  151 + * @return mixed
  152 + */
  153 + public function actionDelete($id)
  154 + {
  155 + $this->findModel($id)
  156 + ->delete();
  157 +
  158 + return $this->redirect([ 'index' ]);
  159 + }
  160 +
  161 + /**
  162 + * Finds the Seo model based on its primary key value.
  163 + * If the model is not found, a 404 HTTP exception will be thrown.
  164 + *
  165 + * @param integer $id
  166 + *
  167 + * @return Seo the loaded model
  168 + * @throws NotFoundHttpException if the model cannot be found
  169 + */
  170 + protected function findModel($id)
  171 + {
  172 + if (( $model = Seo::find()
  173 + ->where([ 'id' => $id ])
  174 + ->with('lang')
  175 + ->one() ) !== null
  176 + ) {
  177 + return $model;
  178 + } else {
  179 + throw new NotFoundHttpException('The requested page does not exist.');
  180 + }
  181 + }
  182 + }
... ...
controllers/SeoDynamicController.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace backend\controllers;
  4 +
  5 + use artweb\artbox\models\SeoCategory;
  6 + use Yii;
  7 + use artweb\artbox\models\SeoDynamic;
  8 + use artweb\artbox\models\SeoDynamicSearch;
  9 + use yii\web\Controller;
  10 + use yii\web\NotFoundHttpException;
  11 + use yii\filters\VerbFilter;
  12 + use developeruz\db_rbac\behaviors\AccessBehavior;
  13 +
  14 + /**
  15 + * SeoDynamicController implements the CRUD actions for SeoDynamic model.
  16 + */
  17 + class SeoDynamicController extends Controller
  18 + {
  19 +
  20 + /**
  21 + * @inheritdoc
  22 + */
  23 + public function behaviors()
  24 + {
  25 + return [
  26 + 'access' => [
  27 + 'class' => AccessBehavior::className(),
  28 + 'rules' => [
  29 + 'site' => [
  30 + [
  31 + 'actions' => [
  32 + 'login',
  33 + 'error',
  34 + ],
  35 + 'allow' => true,
  36 + ],
  37 + ],
  38 + ],
  39 + ],
  40 + 'verbs' => [
  41 + 'class' => VerbFilter::className(),
  42 +
  43 + ],
  44 + ];
  45 + }
  46 +
  47 + /**
  48 + * Lists all SeoDynamic models.
  49 + *
  50 + * @param int $seo_category_id
  51 + *
  52 + * @return mixed
  53 + */
  54 + public function actionIndex($seo_category_id)
  55 + {
  56 + $seo_category = $this->findCategory($seo_category_id);
  57 + $searchModel = new SeoDynamicSearch();
  58 + $dataProvider = $searchModel->search($seo_category_id, Yii::$app->request->queryParams);
  59 +
  60 + return $this->render(
  61 + 'index',
  62 + [
  63 + 'searchModel' => $searchModel,
  64 + 'dataProvider' => $dataProvider,
  65 + 'seo_category' => $seo_category,
  66 + ]
  67 + );
  68 + }
  69 +
  70 + /**
  71 + * Displays a single SeoDynamic model.
  72 + *
  73 + * @param integer $seo_category_id
  74 + * @param integer $id
  75 + *
  76 + * @return mixed
  77 + */
  78 + public function actionView($seo_category_id, $id)
  79 + {
  80 + $seo_category = $this->findCategory($seo_category_id);
  81 + return $this->render(
  82 + 'view',
  83 + [
  84 + 'model' => $this->findModel($id),
  85 + 'seo_category' => $seo_category,
  86 + ]
  87 + );
  88 + }
  89 +
  90 + /**
  91 + * Creates a new SeoDynamic model.
  92 + * If creation is successful, the browser will be redirected to the 'view' page.
  93 + *
  94 + * @param integer $seo_category_id
  95 + *
  96 + * @return mixed
  97 + */
  98 + public function actionCreate($seo_category_id)
  99 + {
  100 + $seo_category = $this->findCategory($seo_category_id);
  101 + $model = new SeoDynamic();
  102 + $model->generateLangs();
  103 + if ($model->load(Yii::$app->request->post())) {
  104 + $model->loadLangs(\Yii::$app->request);
  105 + $model->seo_category_id = $seo_category_id;
  106 + if ($model->save() && $model->transactionStatus) {
  107 + return $this->redirect(
  108 + [
  109 + 'index',
  110 + 'seo_category_id' => $seo_category_id,
  111 + ]
  112 + );
  113 + }
  114 + }
  115 + return $this->render(
  116 + 'create',
  117 + [
  118 + 'model' => $model,
  119 + 'modelLangs' => $model->modelLangs,
  120 + 'seo_category' => $seo_category,
  121 + ]
  122 + );
  123 + }
  124 +
  125 + /**
  126 + * Updates an existing SeoDynamic model.
  127 + * If update is successful, the browser will be redirected to the 'view' page.
  128 + *
  129 + * @param integer $seo_category_id
  130 + * @param integer $id
  131 + *
  132 + * @return mixed
  133 + */
  134 + public function actionUpdate($seo_category_id, $id)
  135 + {
  136 + $seo_category = $this->findCategory($seo_category_id);
  137 + $model = $this->findModel($id);
  138 + $model->generateLangs();
  139 + if ($model->load(Yii::$app->request->post())) {
  140 + $model->loadLangs(\Yii::$app->request);
  141 + if ($model->save() && $model->transactionStatus) {
  142 + return $this->redirect(
  143 + [
  144 + 'index',
  145 + 'seo_category_id' => $seo_category_id,
  146 + ]
  147 + );
  148 + }
  149 + }
  150 + return $this->render(
  151 + 'update',
  152 + [
  153 + 'model' => $model,
  154 + 'modelLangs' => $model->modelLangs,
  155 + 'seo_category' => $seo_category,
  156 + ]
  157 + );
  158 + }
  159 +
  160 + /**
  161 + * Deletes an existing SeoDynamic model.
  162 + * If deletion is successful, the browser will be redirected to the 'index' page.
  163 + *
  164 + * @param integer $seo_category_id
  165 + * @param integer $id
  166 + *
  167 + * @return mixed
  168 + */
  169 + public function actionDelete($seo_category_id, $id)
  170 + {
  171 + $this->findModel($id)
  172 + ->delete();
  173 +
  174 + return $this->redirect(
  175 + [
  176 + 'index',
  177 + 'seo_category_id' => $seo_category_id,
  178 + ]
  179 + );
  180 + }
  181 +
  182 + /**
  183 + * Finds the SeoDynamic model based on its primary key value.
  184 + * If the model is not found, a 404 HTTP exception will be thrown.
  185 + *
  186 + * @param integer $id
  187 + *
  188 + * @return SeoDynamic the loaded model
  189 + * @throws NotFoundHttpException if the model cannot be found
  190 + */
  191 + protected function findModel($id)
  192 + {
  193 + if (( $model = SeoDynamic::find()
  194 + ->where([ 'id' => $id ])
  195 + ->with('lang')
  196 + ->one() ) !== null
  197 + ) {
  198 + return $model;
  199 + } else {
  200 + throw new NotFoundHttpException('The requested page does not exist.');
  201 + }
  202 + }
  203 +
  204 + protected function findCategory($id)
  205 + {
  206 + if (( $model = SeoCategory::find()
  207 + ->where([ 'id' => $id ])
  208 + ->with('lang')
  209 + ->one() ) !== null
  210 + ) {
  211 + return $model;
  212 + } else {
  213 + throw new NotFoundHttpException('The requested page does not exist.');
  214 + }
  215 + }
  216 + }
... ...
models/Seo.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use artweb\artbox\language\behaviors\LanguageBehavior;
  6 + use Yii;
  7 + use yii\db\ActiveQuery;
  8 + use yii\db\ActiveRecord;
  9 + use yii\web\Request;
  10 +
  11 + /**
  12 + * This is the model class for table "seo".
  13 + *
  14 + * @property integer $id
  15 + * @property string $url
  16 + * * From language behavior *
  17 + * @property SeoLang $lang
  18 + * @property SeoLang[] $langs
  19 + * @property SeoLang $objectLang
  20 + * @property string $ownerKey
  21 + * @property string $langKey
  22 + * @property SeoLang[] $modelLangs
  23 + * @property bool $transactionStatus
  24 + * @method string getOwnerKey()
  25 + * @method void setOwnerKey( string $value )
  26 + * @method string getLangKey()
  27 + * @method void setLangKey( string $value )
  28 + * @method ActiveQuery getLangs()
  29 + * @method ActiveQuery getLang( integer $language_id )
  30 + * @method SeoLang[] generateLangs()
  31 + * @method void loadLangs( Request $request )
  32 + * @method bool linkLangs()
  33 + * @method bool saveLangs()
  34 + * @method bool getTransactionStatus()
  35 + * * End language behavior *
  36 + */
  37 + class Seo extends ActiveRecord
  38 + {
  39 +
  40 + /**
  41 + * @inheritdoc
  42 + */
  43 + public static function tableName()
  44 + {
  45 + return 'seo';
  46 + }
  47 +
  48 + public function behaviors()
  49 + {
  50 + return [
  51 + 'language' => [
  52 + 'class' => LanguageBehavior::className(),
  53 + ],
  54 + ];
  55 + }
  56 +
  57 + /**
  58 + * @inheritdoc
  59 + */
  60 + public function rules()
  61 + {
  62 + return [
  63 + [
  64 + [ 'url' ],
  65 + 'required',
  66 + ],
  67 + [
  68 + [ 'url' ],
  69 + 'string',
  70 + 'max' => 255,
  71 + ],
  72 + ];
  73 + }
  74 +
  75 + /**
  76 + * @inheritdoc
  77 + */
  78 + public function attributeLabels()
  79 + {
  80 + return [
  81 + 'id' => Yii::t('app', 'seo_id'),
  82 + 'url' => Yii::t('app', 'url'),
  83 + ];
  84 + }
  85 + }
... ...
models/SeoCategory.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use artweb\artbox\language\behaviors\LanguageBehavior;
  6 + use Yii;
  7 + use yii\db\ActiveQuery;
  8 + use yii\db\ActiveRecord;
  9 + use yii\web\Request;
  10 +
  11 + /**
  12 + * This is the model class for table "seo_category".
  13 + *
  14 + * @property integer $id
  15 + * @property string $controller
  16 + * @property integer $status
  17 + * * From language behavior *
  18 + * @property SeoCategoryLang $lang
  19 + * @property SeoCategoryLang[] $langs
  20 + * @property SeoCategoryLang $objectLang
  21 + * @property string $ownerKey
  22 + * @property string $langKey
  23 + * @property SeoCategoryLang[] $modelLangs
  24 + * @property bool $transactionStatus
  25 + * @method string getOwnerKey()
  26 + * @method void setOwnerKey( string $value )
  27 + * @method string getLangKey()
  28 + * @method void setLangKey( string $value )
  29 + * @method ActiveQuery getLangs()
  30 + * @method ActiveQuery getLang( integer $language_id )
  31 + * @method SeoCategoryLang[] generateLangs()
  32 + * @method void loadLangs( Request $request )
  33 + * @method bool linkLangs()
  34 + * @method bool saveLangs()
  35 + * @method bool getTransactionStatus()
  36 + * * End language behavior *
  37 + * @property SeoDynamic[] $seoDynamics
  38 + */
  39 + class SeoCategory extends ActiveRecord
  40 + {
  41 +
  42 + /**
  43 + * @inheritdoc
  44 + */
  45 + public static function tableName()
  46 + {
  47 + return 'seo_category';
  48 + }
  49 +
  50 + public function behaviors()
  51 + {
  52 + return [
  53 + 'language' => [
  54 + 'class' => LanguageBehavior::className(),
  55 + ],
  56 + ];
  57 + }
  58 +
  59 + /**
  60 + * @inheritdoc
  61 + */
  62 + public function rules()
  63 + {
  64 + return [
  65 + [
  66 + [ 'status' ],
  67 + 'integer',
  68 + ],
  69 + [
  70 + [ 'controller' ],
  71 + 'string',
  72 + 'max' => 100,
  73 + ],
  74 + ];
  75 + }
  76 +
  77 + /**
  78 + * @inheritdoc
  79 + */
  80 + public function attributeLabels()
  81 + {
  82 + return [
  83 + 'id' => Yii::t('app', 'seo_category_id'),
  84 + 'controller' => Yii::t('app', 'controller'),
  85 + 'status' => Yii::t('app', 'status'),
  86 + ];
  87 + }
  88 +
  89 + /**
  90 + * @return \yii\db\ActiveQuery
  91 + */
  92 + public function getSeoDynamics()
  93 + {
  94 + return $this->hasMany(SeoDynamic::className(), [ 'seo_category_id' => 'id' ]);
  95 + }
  96 + }
... ...
models/SeoCategoryLang.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use artweb\artbox\language\models\Language;
  6 + use Yii;
  7 + use yii\db\ActiveRecord;
  8 +
  9 + /**
  10 + * This is the model class for table "seo_category_lang".
  11 + *
  12 + * @property integer $seo_category_id
  13 + * @property integer $language_id
  14 + * @property string $title
  15 + * @property Language $language
  16 + * @property SeoCategory $seoCategory
  17 + */
  18 + class SeoCategoryLang extends ActiveRecord
  19 + {
  20 +
  21 + public static function primaryKey()
  22 + {
  23 + return [
  24 + 'seo_category_id',
  25 + 'language_id',
  26 + ];
  27 + }
  28 +
  29 + /**
  30 + * @inheritdoc
  31 + */
  32 + public static function tableName()
  33 + {
  34 + return 'seo_category_lang';
  35 + }
  36 +
  37 + /**
  38 + * @inheritdoc
  39 + */
  40 + public function rules()
  41 + {
  42 + return [
  43 + [
  44 + [ 'title' ],
  45 + 'string',
  46 + 'max' => 255,
  47 + ],
  48 + [
  49 + [
  50 + 'seo_category_id',
  51 + 'language_id',
  52 + ],
  53 + 'unique',
  54 + 'targetAttribute' => [
  55 + 'seo_category_id',
  56 + 'language_id',
  57 + ],
  58 + 'message' => 'The combination of Seo Category ID and Language ID has already been taken.',
  59 + ],
  60 + [
  61 + [ 'language_id' ],
  62 + 'exist',
  63 + 'skipOnError' => true,
  64 + 'targetClass' => Language::className(),
  65 + 'targetAttribute' => [ 'language_id' => 'id' ],
  66 + ],
  67 + [
  68 + [ 'seo_category_id' ],
  69 + 'exist',
  70 + 'skipOnError' => true,
  71 + 'targetClass' => SeoCategory::className(),
  72 + 'targetAttribute' => [ 'seo_category_id' => 'id' ],
  73 + ],
  74 + ];
  75 + }
  76 +
  77 + /**
  78 + * @inheritdoc
  79 + */
  80 + public function attributeLabels()
  81 + {
  82 + return [
  83 + 'seo_category_id' => Yii::t('app', 'seo_category_id'),
  84 + 'language_id' => Yii::t('app', 'language_id'),
  85 + 'title' => Yii::t('app', 'name'),
  86 + ];
  87 + }
  88 +
  89 + /**
  90 + * @return \yii\db\ActiveQuery
  91 + */
  92 + public function getLanguage()
  93 + {
  94 + return $this->hasOne(Language::className(), [ 'id' => 'language_id' ]);
  95 + }
  96 +
  97 + /**
  98 + * @return \yii\db\ActiveQuery
  99 + */
  100 + public function getSeoCategory()
  101 + {
  102 + return $this->hasOne(SeoCategory::className(), [ 'id' => 'seo_category_id' ]);
  103 + }
  104 + }
... ...
models/SeoCategorySearch.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use yii\base\Model;
  6 + use yii\data\ActiveDataProvider;
  7 +
  8 + /**
  9 + * SeoCategorySearch represents the model behind the search form about
  10 + * `artweb\artbox\models\SeoCategory`.
  11 + */
  12 + class SeoCategorySearch extends SeoCategory
  13 + {
  14 +
  15 + public $title;
  16 +
  17 + public function behaviors()
  18 + {
  19 + return [];
  20 + }
  21 +
  22 + /**
  23 + * @inheritdoc
  24 + */
  25 + public function rules()
  26 + {
  27 + return [
  28 + [
  29 + [
  30 + 'id',
  31 + 'status',
  32 + ],
  33 + 'integer',
  34 + ],
  35 + [
  36 + [
  37 + 'controller',
  38 + 'title',
  39 + ],
  40 + 'safe',
  41 + ],
  42 + ];
  43 + }
  44 +
  45 + /**
  46 + * @inheritdoc
  47 + */
  48 + public function scenarios()
  49 + {
  50 + // bypass scenarios() implementation in the parent class
  51 + return Model::scenarios();
  52 + }
  53 +
  54 + /**
  55 + * Creates data provider instance with search query applied
  56 + *
  57 + * @param array $params
  58 + *
  59 + * @return ActiveDataProvider
  60 + */
  61 + public function search($params)
  62 + {
  63 + $query = SeoCategory::find()
  64 + ->joinWith('lang');
  65 +
  66 + // add conditions that should always apply here
  67 +
  68 + $dataProvider = new ActiveDataProvider(
  69 + [
  70 + 'query' => $query,
  71 + 'sort' => [
  72 + 'attributes' => [
  73 + 'id',
  74 + 'controller',
  75 + 'status',
  76 + 'title' => [
  77 + 'asc' => [ 'seo_category_lang.title' => SORT_ASC ],
  78 + 'desc' => [ 'seo_category_lang.title' => SORT_DESC ],
  79 + ],
  80 + ],
  81 + ],
  82 + ]
  83 + );
  84 +
  85 + $this->load($params);
  86 +
  87 + if (!$this->validate()) {
  88 + // uncomment the following line if you do not want to return any records when validation fails
  89 + // $query->where('0=1');
  90 + return $dataProvider;
  91 + }
  92 +
  93 + // grid filtering conditions
  94 + $query->andFilterWhere(
  95 + [
  96 + 'id' => $this->id,
  97 + 'status' => $this->status,
  98 + ]
  99 + );
  100 +
  101 + $query->andFilterWhere(
  102 + [
  103 + 'like',
  104 + 'controller',
  105 + $this->controller,
  106 + ]
  107 + )
  108 + ->andFilterWhere(
  109 + [
  110 + 'ilike',
  111 + 'seo_category_lang.title',
  112 + $this->title,
  113 + ]
  114 + );
  115 +
  116 + return $dataProvider;
  117 + }
  118 + }
... ...
models/SeoDynamic.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use artweb\artbox\language\behaviors\LanguageBehavior;
  6 + use Yii;
  7 + use yii\db\ActiveQuery;
  8 + use yii\db\ActiveRecord;
  9 + use yii\web\Request;
  10 +
  11 + /**
  12 + * This is the model class for table "seo_dynamic".
  13 + *
  14 + * @property integer $id
  15 + * @property integer $seo_category_id
  16 + * @property string $action
  17 + * @property string $fields
  18 + * @property integer $status
  19 + * @property string $param
  20 + * * From language behavior *
  21 + * @property SeoDynamicLang $lang
  22 + * @property SeoDynamicLang[] $langs
  23 + * @property SeoDynamicLang $objectLang
  24 + * @property string $ownerKey
  25 + * @property string $langKey
  26 + * @property SeoDynamicLang[] $modelLangs
  27 + * @property bool $transactionStatus
  28 + * @method string getOwnerKey()
  29 + * @method void setOwnerKey( string $value )
  30 + * @method string getLangKey()
  31 + * @method void setLangKey( string $value )
  32 + * @method ActiveQuery getLangs()
  33 + * @method ActiveQuery getLang( integer $language_id )
  34 + * @method SeoDynamicLang[] generateLangs()
  35 + * @method void loadLangs( Request $request )
  36 + * @method bool linkLangs()
  37 + * @method bool saveLangs()
  38 + * @method bool getTransactionStatus()
  39 + * * End language behavior *
  40 + * @property SeoCategory $seoCategory
  41 + */
  42 + class SeoDynamic extends ActiveRecord
  43 + {
  44 +
  45 + /**
  46 + * @inheritdoc
  47 + */
  48 + public static function tableName()
  49 + {
  50 + return 'seo_dynamic';
  51 + }
  52 +
  53 + public function behaviors()
  54 + {
  55 + return [
  56 + 'language' => [
  57 + 'class' => LanguageBehavior::className(),
  58 + ],
  59 + ];
  60 + }
  61 +
  62 + /**
  63 + * @inheritdoc
  64 + */
  65 + public function rules()
  66 + {
  67 + return [
  68 + [
  69 + [
  70 + 'seo_category_id',
  71 + 'status',
  72 + ],
  73 + 'integer',
  74 + ],
  75 + [
  76 + [
  77 + 'action',
  78 + ],
  79 + 'string',
  80 + 'max' => 200,
  81 + ],
  82 + [
  83 + [
  84 + 'fields',
  85 + 'param',
  86 + ],
  87 + 'string',
  88 + 'max' => 255,
  89 + ],
  90 + [
  91 + [ 'seo_category_id' ],
  92 + 'exist',
  93 + 'skipOnError' => true,
  94 + 'targetClass' => SeoCategory::className(),
  95 + 'targetAttribute' => [ 'seo_category_id' => 'id' ],
  96 + ],
  97 + ];
  98 + }
  99 +
  100 + /**
  101 + * @inheritdoc
  102 + */
  103 + public function attributeLabels()
  104 + {
  105 + return [
  106 + 'id' => Yii::t('app', 'seo_dynamic_id'),
  107 + 'seo_category_id' => Yii::t('app', 'seo_category_id'),
  108 + 'action' => Yii::t('app', 'action'),
  109 + 'fields' => Yii::t('app', 'fields'),
  110 + 'status' => Yii::t('app', 'status'),
  111 + 'param' => Yii::t('app', 'param'),
  112 + ];
  113 + }
  114 +
  115 + /**
  116 + * @return \yii\db\ActiveQuery
  117 + */
  118 + public function getSeoCategory()
  119 + {
  120 + return $this->hasOne(SeoCategory::className(), [ 'id' => 'seo_category_id' ]);
  121 + }
  122 + }
... ...
models/SeoDynamicLang.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use artweb\artbox\language\models\Language;
  6 + use Yii;
  7 + use yii\db\ActiveRecord;
  8 +
  9 + /**
  10 + * This is the model class for table "seo_dynamic_lang".
  11 + *
  12 + * @property integer $seo_dynamic_id
  13 + * @property integer $language_id
  14 + * @property string $title
  15 + * @property string $meta_title
  16 + * @property string $h1
  17 + * @property string $key
  18 + * @property string $meta
  19 + * @property string $meta_description
  20 + * @property string $seo_text
  21 + * @property Language $language
  22 + * @property SeoDynamic $seoDynamic
  23 + */
  24 + class SeoDynamicLang extends ActiveRecord
  25 + {
  26 +
  27 + public static function primaryKey()
  28 + {
  29 + return [
  30 + 'seo_dynamic_id',
  31 + 'language_id',
  32 + ];
  33 + }
  34 +
  35 + /**
  36 + * @inheritdoc
  37 + */
  38 + public static function tableName()
  39 + {
  40 + return 'seo_dynamic_lang';
  41 + }
  42 +
  43 + /**
  44 + * @inheritdoc
  45 + */
  46 + public function rules()
  47 + {
  48 + return [
  49 + [
  50 + [
  51 + 'meta_title',
  52 + 'meta_description',
  53 + 'seo_text',
  54 + ],
  55 + 'string',
  56 + ],
  57 + [
  58 + [
  59 + 'title',
  60 + 'h1',
  61 + 'key',
  62 + 'meta',
  63 + ],
  64 + 'string',
  65 + 'max' => 255,
  66 + ],
  67 + [
  68 + [
  69 + 'seo_dynamic_id',
  70 + 'language_id',
  71 + ],
  72 + 'unique',
  73 + 'targetAttribute' => [
  74 + 'seo_dynamic_id',
  75 + 'language_id',
  76 + ],
  77 + 'message' => 'The combination of Seo Dynamic ID and Language ID has already been taken.',
  78 + ],
  79 + [
  80 + [ 'language_id' ],
  81 + 'exist',
  82 + 'skipOnError' => true,
  83 + 'targetClass' => Language::className(),
  84 + 'targetAttribute' => [ 'language_id' => 'id' ],
  85 + ],
  86 + [
  87 + [ 'seo_dynamic_id' ],
  88 + 'exist',
  89 + 'skipOnError' => true,
  90 + 'targetClass' => SeoDynamic::className(),
  91 + 'targetAttribute' => [ 'seo_dynamic_id' => 'id' ],
  92 + ],
  93 + ];
  94 + }
  95 +
  96 + /**
  97 + * @inheritdoc
  98 + */
  99 + public function attributeLabels()
  100 + {
  101 + return [
  102 + 'seo_dynamic_id' => Yii::t('app', 'seo_dynamic_id'),
  103 + 'language_id' => Yii::t('app', 'language_id'),
  104 + 'title' => Yii::t('app', 'name'),
  105 + 'meta_title' => Yii::t('app', 'title'),
  106 + 'h1' => Yii::t('app', 'h1'),
  107 + 'key' => Yii::t('app', 'key'),
  108 + 'meta' => Yii::t('app', 'meta'),
  109 + 'meta_description' => Yii::t('app', 'meta_description'),
  110 + 'seo_text' => Yii::t('app', 'seo_text'),
  111 + ];
  112 + }
  113 +
  114 + /**
  115 + * @return \yii\db\ActiveQuery
  116 + */
  117 + public function getLanguage()
  118 + {
  119 + return $this->hasOne(Language::className(), [ 'id' => 'language_id' ]);
  120 + }
  121 +
  122 + /**
  123 + * @return \yii\db\ActiveQuery
  124 + */
  125 + public function getSeoDynamic()
  126 + {
  127 + return $this->hasOne(SeoDynamic::className(), [ 'id' => 'seo_dynamic_id' ]);
  128 + }
  129 + }
... ...
models/SeoDynamicSearch.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use yii\base\Model;
  6 + use yii\data\ActiveDataProvider;
  7 +
  8 + /**
  9 + * SeoDynamicSearch represents the model behind the search form about
  10 + * `artweb\artbox\models\SeoDynamic`.
  11 + */
  12 + class SeoDynamicSearch extends SeoDynamic
  13 + {
  14 +
  15 + public $title;
  16 +
  17 + public function behaviors()
  18 + {
  19 + return [];
  20 + }
  21 +
  22 + /**
  23 + * @inheritdoc
  24 + */
  25 + public function rules()
  26 + {
  27 + return [
  28 + [
  29 + [
  30 + 'id',
  31 + 'status',
  32 + ],
  33 + 'integer',
  34 + ],
  35 + [
  36 + [
  37 + 'action',
  38 + 'fields',
  39 + 'title',
  40 + 'param',
  41 + ],
  42 + 'safe',
  43 + ],
  44 + ];
  45 + }
  46 +
  47 + /**
  48 + * @inheritdoc
  49 + */
  50 + public function scenarios()
  51 + {
  52 + // bypass scenarios() implementation in the parent class
  53 + return Model::scenarios();
  54 + }
  55 +
  56 + /**
  57 + * Creates data provider instance with search query applied
  58 + *
  59 + * @param integer $seo_category_id
  60 + * @param array $params
  61 + *
  62 + * @return ActiveDataProvider
  63 + */
  64 + public function search($seo_category_id, $params)
  65 + {
  66 + $query = SeoDynamic::find()
  67 + ->joinWith('lang');
  68 +
  69 + // add conditions that should always apply here
  70 +
  71 + $dataProvider = new ActiveDataProvider(
  72 + [
  73 + 'query' => $query,
  74 + 'sort' => [
  75 + 'attributes' => [
  76 + 'id',
  77 + 'action',
  78 + 'fields',
  79 + 'status',
  80 + 'param',
  81 + 'title' => [
  82 + 'asc' => [ 'seo_dynamic_lang.title' => SORT_ASC ],
  83 + 'desc' => [ 'seo_dynamic_lang.title' => SORT_DESC ],
  84 + ],
  85 + ],
  86 + ],
  87 + ]
  88 + );
  89 +
  90 + $this->load($params);
  91 +
  92 + if (!$this->validate()) {
  93 + // uncomment the following line if you do not want to return any records when validation fails
  94 + // $query->where('0=1');
  95 + return $dataProvider;
  96 + }
  97 +
  98 + // grid filtering conditions
  99 + $query->andWhere(
  100 + [
  101 + 'seo_category_id' => $seo_category_id,
  102 + ]
  103 + )
  104 + ->andFilterWhere(
  105 + [
  106 + 'id' => $this->id,
  107 + 'status' => $this->status,
  108 + ]
  109 + );
  110 +
  111 + $query->andFilterWhere(
  112 + [
  113 + 'ilike',
  114 + 'action',
  115 + $this->action,
  116 + ]
  117 + )
  118 + ->andFilterWhere(
  119 + [
  120 + 'ilike',
  121 + 'fields',
  122 + $this->fields,
  123 + ]
  124 + )
  125 + ->andFilterWhere(
  126 + [
  127 + 'ilike',
  128 + 'param',
  129 + $this->param,
  130 + ]
  131 + )
  132 + ->andFilterWhere(
  133 + [
  134 + 'ilike',
  135 + 'seo_dynamic_lang.title',
  136 + $this->title,
  137 + ]
  138 + );
  139 +
  140 + return $dataProvider;
  141 + }
  142 + }
... ...
models/SeoLang.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use artweb\artbox\language\models\Language;
  6 + use Yii;
  7 + use yii\db\ActiveRecord;
  8 +
  9 + /**
  10 + * This is the model class for table "seo_lang".
  11 + *
  12 + * @property integer $seo_id
  13 + * @property integer $language_id
  14 + * @property string $title
  15 + * @property string $meta_description
  16 + * @property string $h1
  17 + * @property string $meta
  18 + * @property string $seo_text
  19 + * @property Language $language
  20 + * @property Seo $seo
  21 + */
  22 + class SeoLang extends ActiveRecord
  23 + {
  24 +
  25 + public static function primaryKey()
  26 + {
  27 + return [
  28 + 'seo_id',
  29 + 'language_id',
  30 + ];
  31 + }
  32 +
  33 + /**
  34 + * @inheritdoc
  35 + */
  36 + public static function tableName()
  37 + {
  38 + return 'seo_lang';
  39 + }
  40 +
  41 + /**
  42 + * @inheritdoc
  43 + */
  44 + public function rules()
  45 + {
  46 + return [
  47 + [
  48 + [
  49 + 'meta_description',
  50 + 'seo_text',
  51 + ],
  52 + 'string',
  53 + ],
  54 + [
  55 + [
  56 + 'title',
  57 + 'h1',
  58 + 'meta',
  59 + ],
  60 + 'string',
  61 + 'max' => 255,
  62 + ],
  63 + [
  64 + [
  65 + 'seo_id',
  66 + 'language_id',
  67 + ],
  68 + 'unique',
  69 + 'targetAttribute' => [
  70 + 'seo_id',
  71 + 'language_id',
  72 + ],
  73 + 'message' => 'The combination of Seo ID and Language ID has already been taken.',
  74 + ],
  75 + [
  76 + [ 'language_id' ],
  77 + 'exist',
  78 + 'skipOnError' => true,
  79 + 'targetClass' => Language::className(),
  80 + 'targetAttribute' => [ 'language_id' => 'id' ],
  81 + ],
  82 + [
  83 + [ 'seo_id' ],
  84 + 'exist',
  85 + 'skipOnError' => true,
  86 + 'targetClass' => Seo::className(),
  87 + 'targetAttribute' => [ 'seo_id' => 'id' ],
  88 + ],
  89 + ];
  90 + }
  91 +
  92 + /**
  93 + * @inheritdoc
  94 + */
  95 + public function attributeLabels()
  96 + {
  97 + return [
  98 + 'seo_id' => Yii::t('app', 'seo_id'),
  99 + 'language_id' => Yii::t('app', 'language_id'),
  100 + 'title' => Yii::t('app', 'title'),
  101 + 'meta_description' => Yii::t('app', 'meta_description'),
  102 + 'h1' => Yii::t('app', 'h1'),
  103 + 'meta' => Yii::t('app', 'meta'),
  104 + 'seo_text' => Yii::t('app', 'seo_text'),
  105 + ];
  106 + }
  107 +
  108 + /**
  109 + * @return \yii\db\ActiveQuery
  110 + */
  111 + public function getLanguage()
  112 + {
  113 + return $this->hasOne(Language::className(), [ 'id' => 'language_id' ]);
  114 + }
  115 +
  116 + /**
  117 + * @return \yii\db\ActiveQuery
  118 + */
  119 + public function getSeo()
  120 + {
  121 + return $this->hasOne(Seo::className(), [ 'id' => 'seo_id' ]);
  122 + }
  123 + }
... ...
models/SeoSearch.php 0 → 100755
  1 +<?php
  2 +
  3 + namespace artweb\artbox\seo\models;
  4 +
  5 + use yii\base\Model;
  6 + use yii\data\ActiveDataProvider;
  7 +
  8 + /**
  9 + * SeoSearch represents the model behind the search form about `artweb\artbox\models\Seo`.
  10 + */
  11 + class SeoSearch extends Seo
  12 + {
  13 +
  14 + public $title;
  15 +
  16 + public $meta_description;
  17 +
  18 + public $h1;
  19 +
  20 + public $meta;
  21 +
  22 + public $seo_text;
  23 +
  24 + public function behaviors()
  25 + {
  26 + return [];
  27 + }
  28 +
  29 + /**
  30 + * @inheritdoc
  31 + */
  32 + public function rules()
  33 + {
  34 + return [
  35 + [
  36 + [ 'id' ],
  37 + 'integer',
  38 + ],
  39 + [
  40 + [
  41 + 'url',
  42 + 'title',
  43 + 'meta_description',
  44 + 'h1',
  45 + 'meta',
  46 + 'seo_text',
  47 + ],
  48 + 'safe',
  49 + ],
  50 + ];
  51 + }
  52 +
  53 + /**
  54 + * @inheritdoc
  55 + */
  56 + public function scenarios()
  57 + {
  58 + // bypass scenarios() implementation in the parent class
  59 + return Model::scenarios();
  60 + }
  61 +
  62 + /**
  63 + * Creates data provider instance with search query applied
  64 + *
  65 + * @param array $params
  66 + *
  67 + * @return ActiveDataProvider
  68 + */
  69 + public function search($params)
  70 + {
  71 + $query = Seo::find()
  72 + ->joinWith('lang');
  73 +
  74 + // add conditions that should always apply here
  75 +
  76 + $dataProvider = new ActiveDataProvider(
  77 + [
  78 + 'query' => $query,
  79 + 'sort' => [
  80 + 'attributes' => [
  81 + 'id',
  82 + 'url',
  83 + 'title' => [
  84 + 'asc' => [ 'seo_lang.title' => SORT_ASC ],
  85 + 'desc' => [ 'seo_lang.title' => SORT_DESC ],
  86 + ],
  87 + 'meta_description' => [
  88 + 'asc' => [ 'seo_lang.meta_description' => SORT_ASC ],
  89 + 'desc' => [ 'seo_lang.meta_description' => SORT_DESC ],
  90 + ],
  91 + 'h1' => [
  92 + 'asc' => [ 'seo_lang.h1' => SORT_ASC ],
  93 + 'desc' => [ 'seo_lang.h1' => SORT_DESC ],
  94 + ],
  95 + 'meta' => [
  96 + 'asc' => [ 'seo_lang.meta' => SORT_ASC ],
  97 + 'desc' => [ 'seo_lang.meta' => SORT_DESC ],
  98 + ],
  99 + 'seo_text' => [
  100 + 'asc' => [ 'seo_lang.seo_text' => SORT_ASC ],
  101 + 'desc' => [ 'seo_lang.seo_text' => SORT_DESC ],
  102 + ],
  103 + ],
  104 + ],
  105 + ]
  106 + );
  107 +
  108 + $this->load($params);
  109 +
  110 + if (!$this->validate()) {
  111 + // uncomment the following line if you do not want to return any records when validation fails
  112 + // $query->where('0=1');
  113 + return $dataProvider;
  114 + }
  115 +
  116 + // grid filtering conditions
  117 + $query->andFilterWhere(
  118 + [
  119 + 'id' => $this->id,
  120 + ]
  121 + );
  122 +
  123 + $query->andFilterWhere(
  124 + [
  125 + 'like',
  126 + 'url',
  127 + $this->url,
  128 + ]
  129 + )
  130 + ->andFilterWhere(
  131 + [
  132 + 'ilike',
  133 + 'seo_lang.title',
  134 + $this->title,
  135 + ]
  136 + )
  137 + ->andFilterWhere(
  138 + [
  139 + 'ilike',
  140 + 'seo_lang.meta_description',
  141 + $this->meta_description,
  142 + ]
  143 + )
  144 + ->andFilterWhere(
  145 + [
  146 + 'ilike',
  147 + 'seo_lang.h1',
  148 + $this->h1,
  149 + ]
  150 + )
  151 + ->andFilterWhere(
  152 + [
  153 + 'ilike',
  154 + 'seo_lang.meta',
  155 + $this->meta,
  156 + ]
  157 + )
  158 + ->andFilterWhere(
  159 + [
  160 + 'ilike',
  161 + 'seo_lang.seo_text',
  162 + $this->seo_text,
  163 + ]
  164 + );
  165 +
  166 + return $dataProvider;
  167 + }
  168 + }
... ...
widget/Seo.php 0 → 100644
  1 +<?php
  2 +namespace frontend\widgets;
  3 +
  4 +use artweb\artbox\seo\models\SeoDynamic;
  5 +use artweb\artbox\ecommerce\models\Brand;
  6 +use artweb\artbox\ecommerce\models\TaxGroup;
  7 +use artweb\artbox\ecommerce\models\TaxOption;
  8 +use yii\base\Widget;
  9 +use yii\helpers\ArrayHelper;
  10 +
  11 +class Seo extends Widget
  12 +{
  13 + private $url;
  14 + public $row;
  15 + public $own_attr;
  16 + public $fields;
  17 + public $category_name;
  18 + public $description;
  19 + public $title;
  20 + public $meta;
  21 + public $seo_text;
  22 + public $h1;
  23 + public $key;
  24 + public $name;
  25 + public $project_name;
  26 + public static $optionsList;
  27 + protected static $check_url;
  28 + protected static $check_url_bool;
  29 +
  30 +
  31 + const SEO_TEXT = 'seo_text';
  32 + const DESCRIPTION = 'description';
  33 + const META = 'meta';
  34 + const H1 = 'h1';
  35 + const TITLE = 'title';
  36 +
  37 + public function init()
  38 + {
  39 + $this->url = \Yii::$app->request->url;
  40 + $this->project_name = \Yii::$app->name;
  41 + if(empty(self::$optionsList)){
  42 + self::$optionsList = ArrayHelper::getColumn(TaxGroup::find()->where(['is_filter' => 'TRUE'])->all(),'alias');
  43 + }
  44 +
  45 + parent::init();
  46 +
  47 + }
  48 +
  49 +
  50 + public function run()
  51 + {
  52 +
  53 + $seoData = $this->getViewData();
  54 + foreach ($seoData as $key => $value) {
  55 + $this->$key = $value;
  56 + }
  57 +
  58 +
  59 + switch ($this->row) {
  60 + case self::SEO_TEXT:
  61 +
  62 +
  63 + $filter = \Yii::$app->request->get('filters', []);
  64 + $sort = \Yii::$app->request->get('sort', []);
  65 + $paginate = \Yii::$app->request->get('page', []);
  66 +
  67 + if(empty($filter) && empty($sort) && empty($paginate) ){
  68 +
  69 + return $this->selectSeoData(self::SEO_TEXT);
  70 +
  71 + } else {
  72 +
  73 + $widgetData = static::findSeoByUrl($this->url);
  74 +
  75 + $result = '';
  76 +
  77 + if ($widgetData instanceof \artweb\artbox\seo\models\Seo) {
  78 +
  79 + $result = $widgetData->{self::SEO_TEXT};
  80 +
  81 + } else {
  82 +
  83 + $widgetData = $this->findSeoByDynamic();
  84 +
  85 + if ($widgetData instanceof SeoDynamic) {
  86 +
  87 + $result = $widgetData->{self::SEO_TEXT};
  88 +
  89 + }
  90 +
  91 + }
  92 +
  93 + return $this->replaceData($result);
  94 + }
  95 +
  96 +
  97 + break;
  98 + case self::H1:
  99 +
  100 + $filter = \Yii::$app->request->get('filters', []);
  101 +
  102 + $default = $this->selectSeoData(self::H1);
  103 +
  104 + if ($default != $this->{self::H1}) {
  105 +
  106 + return $default;
  107 +
  108 +
  109 + } else if(!empty($filter) && !$this->checkFilter($filter)){
  110 +
  111 + $array = $this->arrayBuilder($filter);
  112 + return $this->getNameString($array);
  113 + }
  114 + else {
  115 +
  116 + return $default;
  117 + }
  118 + break;
  119 + case self::TITLE:
  120 +
  121 + $filter = \Yii::$app->request->get('filters', []);
  122 +
  123 +
  124 + $title = $this->selectSeoData(self::TITLE);
  125 +
  126 +
  127 + if(!empty($filter) && $title == $this->title || !empty($filter) && empty($title)) {
  128 +
  129 + $array = $this->arrayBuilder($filter);
  130 +
  131 + $title_string = $this->getTitleString($array);
  132 +
  133 + if($title_string){
  134 + return $title_string;
  135 + }
  136 +
  137 + }
  138 +
  139 + if (!empty($title)) {
  140 +
  141 + return $title;
  142 + } else {
  143 + return $this->project_name;
  144 + }
  145 +
  146 + break;
  147 + case self::DESCRIPTION:
  148 + $description = $this->selectSeoData(self::DESCRIPTION);
  149 +
  150 + if (!empty($description)) {
  151 +
  152 + $this->getView()->registerMetaTag([
  153 + 'name' => 'description',
  154 + 'content' => $description
  155 + ]);
  156 +
  157 + } else {
  158 +
  159 + $filter = \Yii::$app->request->get('filters', []);
  160 +
  161 + if(!empty($filter)){
  162 + $array = $this->arrayBuilder($filter);
  163 + $this->getView()->registerMetaTag([
  164 + 'name' => 'description',
  165 + 'content' => $this->getDescriptionString($array)
  166 + ]);
  167 + }
  168 +
  169 + }
  170 +
  171 + break;
  172 + case self::META:
  173 +
  174 + $meta = $this->selectSeoData(self::META);
  175 +
  176 + $filter = \Yii::$app->request->get('filters', []);
  177 + $sort = \Yii::$app->request->get('sort', []);
  178 + $paginate = \Yii::$app->request->get('page', []);
  179 +
  180 +
  181 +
  182 + if (!empty($meta) && empty($sort) && empty($paginate) && !isset($filter['prices']) ) {
  183 +
  184 + $this->getView()->registerMetaTag([
  185 + 'name' => 'robots',
  186 + 'content' => $meta
  187 + ]);
  188 +
  189 + } else if(!empty($filter['special'])){
  190 +
  191 + $this->getView()->registerMetaTag([
  192 + 'name' => 'robots',
  193 + 'content' => 'noindex,follow'
  194 + ]);
  195 +
  196 + } else if (
  197 + isset($filter['brands']) && count($filter['brands']) > 1
  198 + || isset($filter) && $this->checkFilter($filter)
  199 +
  200 + ) {
  201 +
  202 + $this->getView()->registerMetaTag([
  203 + 'name' => 'robots',
  204 + 'content' => 'noindex,nofollow'
  205 + ]);
  206 +
  207 + } else if (
  208 + isset($filter['brands']) && count($filter['brands']) > 1 && isset($filter) && count($filter, COUNT_RECURSIVE) >= 4
  209 + || isset($filter) && count($filter, COUNT_RECURSIVE) > 4
  210 + || !empty($sort) || !empty($paginate) || isset($filter['prices'])
  211 + ) {
  212 +
  213 + $this->getView()->registerMetaTag([
  214 + 'name' => 'robots',
  215 + 'content' => 'noindex,nofollow'
  216 + ]);
  217 + } else {
  218 +
  219 + $this->getView()->registerMetaTag([
  220 + 'name' => 'robots',
  221 + 'content' => 'index,follow'
  222 + ]);
  223 + }
  224 +
  225 +
  226 +
  227 +
  228 + break;
  229 + }
  230 +
  231 +
  232 + }
  233 +
  234 + protected function replaceData($str)
  235 + {
  236 +
  237 + if (!empty($this->fields)) {
  238 + foreach ($this->fields as $field_name => $field_value) {
  239 + $str = str_replace('{' . $field_name . '}', $field_value, $str);
  240 + }
  241 + }
  242 + $str = str_replace('{project_name}', $this->project_name, $str);
  243 + return $str;
  244 + }
  245 +
  246 + protected static function findSeoByUrl($url)
  247 + {
  248 + if(empty(self::$check_url_bool)){
  249 + self::$check_url = \artweb\artbox\seo\models\Seo::findOne(['url' => $url]);
  250 + self::$check_url_bool = true;
  251 + }
  252 + return self::$check_url;
  253 + }
  254 +
  255 + protected function findSeoByDynamic()
  256 + {
  257 +
  258 + if(!empty($this->key)){
  259 +
  260 + $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id, 'key' => $this->key]);
  261 + } else {
  262 +
  263 +
  264 + $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller' => \Yii::$app->controller->id, 'action' => \Yii::$app->controller->action->id]);
  265 + }
  266 +
  267 + return $query->one();
  268 + }
  269 +
  270 +
  271 + protected function findSeoByDynamicForFilters(){
  272 + return SeoDynamic::find()->joinWith('seoCategory')->where(['param' =>'filters'])->one();
  273 + }
  274 +
  275 +
  276 + protected function getViewData()
  277 + {
  278 + $params = $this->getView()->params;
  279 + if (isset($params['seo'])) {
  280 + return $params['seo'];
  281 + } else {
  282 + return [];
  283 + }
  284 + }
  285 +
  286 + protected function selectSeoData($param)
  287 + {
  288 +
  289 + $result = '';
  290 +
  291 + $widgetData = static::findSeoByUrl($this->url);
  292 +
  293 + if ($widgetData instanceof \artweb\artbox\seo\models\Seo) {
  294 +
  295 + $result = $widgetData->$param;
  296 +
  297 + } else if (!empty($this->$param)) {
  298 +
  299 + $result = $this->$param;
  300 +
  301 + } else {
  302 +
  303 + $widgetData = $this->findSeoByDynamic();
  304 +
  305 + if ($widgetData instanceof SeoDynamic) {
  306 +
  307 + $result = $widgetData->$param;
  308 +
  309 + }
  310 +
  311 + }
  312 +
  313 + return $this->replaceData($result);
  314 +
  315 + }
  316 +
  317 + public function getTitleString($array){
  318 + // "{Название раздела: Название блока фильтра | Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3} - купить в Киеве, Украине - интернет магазин Лінія Світла";
  319 + $row = '';
  320 + foreach($array as $name => $field){
  321 +
  322 + if($name == 'category' ){
  323 + $row = $field.' | '.$row;
  324 + } else {
  325 + $row .= $field['name'] .' '.$field['value'].' | ' ;
  326 + }
  327 +
  328 +
  329 +
  330 + }
  331 + $row = substr($row, 0,-2 );
  332 + $row .= " - купить в Киеве, Украине - интернет магазин Лінія Світла";
  333 + return $row;
  334 +// $template = SeoDynamic::find()->select('title')->where(['param' =>'filters'])->one();
  335 +// if($template instanceof SeoDynamic){
  336 +// foreach ($array as $field_name => $field_value) {
  337 +// $template->title = str_replace('{' . $field_name . '}', mb_strtolower($field_value), $template->title);
  338 +// }
  339 +// $template = preg_replace('/\{.[^\}]*\}\s/','',$template->title);
  340 +// return $template;
  341 +// }
  342 +//
  343 +// return false;
  344 +
  345 + }
  346 +
  347 +
  348 + public function getDescriptionString($array){
  349 + // "Лучшие цены на {Название раздела | Название блока фильтра: Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3}. Лінія Світла";
  350 + $row = 'Лучшие цены на ';
  351 + foreach($array as $name => $field){
  352 +
  353 + if($name == 'category' ){
  354 + $row = $field.' | '.$row;
  355 + } else {
  356 + $row .= $field['name'] .' '.$field['value'].' | ' ;
  357 + }
  358 +
  359 +
  360 +
  361 + }
  362 + $row = substr($row, 0,-2 );
  363 + $row .= ". Лінія Світла";
  364 + return $row;
  365 +
  366 + }
  367 +
  368 +
  369 + public function getNameString($array){
  370 + // "Лучшие цены на {Название раздела | Название блока фильтра: Фильтр 1 | Название блока фильтра: Фильтр 2 | Название блока фильтра: Фильтр 3}. Лінія Світла";
  371 + $row = '';
  372 + foreach($array as $name => $field){
  373 +
  374 + if($name == 'category' ){
  375 + $row = $field.' | '.$row;
  376 + } else {
  377 + $row .= $field['name'] .' '.$field['value'].' | ' ;
  378 + }
  379 +
  380 +
  381 +
  382 + }
  383 + $row = substr($row, 0,-2 );
  384 + return $row;
  385 +
  386 + }
  387 +
  388 + public function arrayBuilder($filter)
  389 + {
  390 +
  391 + $array = [
  392 + 'category' => $this->category_name
  393 + ];
  394 +
  395 +
  396 + if (isset($filter['brands']) && count($filter['brands']) == 1) {
  397 + $model = Brand::find()->where(['alias' => $filter['brands'][0]])->one();
  398 + if (!$model instanceof Brand) {
  399 +
  400 + \Yii::$app->response->redirect(['/site/error'], 404);
  401 + } else {
  402 + $array['brand']['name'] = 'Бренд';
  403 + $array['brand']['value'] = $model->name;
  404 + }
  405 +
  406 + }
  407 +
  408 +
  409 + $optionsList = ArrayHelper::map(TaxGroup::find()->where(['is_filter' => 'TRUE'])->all(), 'alias', 'name');
  410 +
  411 +
  412 + foreach ($optionsList as $optionList => $name) {
  413 +
  414 +
  415 + if (isset($filter[$optionList]) && count($filter[$optionList]) == 1) {
  416 +
  417 + $model = TaxOption::find()->where(['alias' => $filter[$optionList]])->one();
  418 + if (!$model instanceof TaxOption) {
  419 +
  420 + \Yii::$app->response->redirect(['site/error'], 404);
  421 + } else {
  422 + $array[$optionList]['value'] = $model->value;
  423 + $array[$optionList]['name'] = $name;
  424 + }
  425 +
  426 +
  427 + }
  428 +
  429 +
  430 + }
  431 +
  432 + return $array;
  433 +
  434 + }
  435 +
  436 + protected function checkFilter($filter){
  437 + foreach(self::$optionsList as $optionList){
  438 +
  439 + if(isset($filter[$optionList]) && count($filter[$optionList]) > 1){
  440 + return true;
  441 + }
  442 +
  443 + }
  444 + return false;
  445 + }
  446 +
  447 +
  448 +}
0 449 \ No newline at end of file
... ...