diff --git a/artweb/artbox-catalog/helpers/FilterHelper.php b/artweb/artbox-catalog/helpers/FilterHelper.php index 16acb15..bcb4ab5 100755 --- a/artweb/artbox-catalog/helpers/FilterHelper.php +++ b/artweb/artbox-catalog/helpers/FilterHelper.php @@ -77,7 +77,24 @@ { $this->filterObj = \Yii::createObject(Filter::className()); } - + + /** + * return array of objects + * @return array + */ + public function getActiveOptions(): array + { + $activeOptions = []; + if(!empty($this->activeAliases)) { + foreach ($this->activeAliases as $activeAlias) { + $option = new \stdClass(); + $option->title = $activeAlias->title; + $activeOptions[] = $option; + } + } + return $activeOptions; + } + /** * Getter for $groupModels * diff --git a/frontend/components/SeoCategory.php b/frontend/components/SeoCategory.php new file mode 100644 index 0000000..eb5ec05 --- /dev/null +++ b/frontend/components/SeoCategory.php @@ -0,0 +1,239 @@ + Доступні ціни > Покупка в кредит > Швидка доставка по Україні'; + + /** + * @var \common\models\catalog\Categor0y + */ + public $category; + + /** + * @var array + */ + public $options; + + /** + * @var integer + */ + public $languageId; + + /** + * @var string + */ + protected $mode; + + /** + * @var string + */ + protected $title = ''; + + /** + * @var string + */ + protected $description = ''; + + /** + * @var string + */ + protected $h1 = ''; + + /** + * @var string + */ + protected $robots = ''; + + /** + * @var string + */ + protected $text = ''; + + /** + * @var Alias + */ + public $categoryAlias; + + /** + * @var array + */ + protected $templates = []; + + protected function countOptions() + { + return count($this->options); + } + + /** + * @inheritdoc + */ + public function init() + { + $this->selectMode(); + + $this->generateData(); + + $this->generateRobots(); + } + + protected function selectMode() + { + if (empty($this->options)) { + $this->mode = self::SINGLE_CATEGORY; + } elseif ($this->countOptions() === 1) { + $this->mode = self::ONE_OPTION; + } elseif ($this->countOptions() === 2) { + $this->mode = self::TWO_OPTIONS; + } else { + $this->mode = self::MANY; + } + } + + private function selectH1() + { +// if (!empty($this->categoryAlias->h1)) { +// $this->h1 = $this->categoryAlias->h1; +// } else { + $this->h1 = $this->category->lang->title; +// } + } + + protected function generateData() + { + $this->selectH1(); + $this->selectTitle(); + $this->selectDescription(); + } + + protected function selectTitle() + { + switch ($this->mode) { + case self::SINGLE_CATEGORY: + $this->title = $this->h1 . self::TITLE_TEMPLATE; + break; + case self::ONE_OPTION: + $this->title = $this->h1 . ' ' . $this->options[0]->title . self::TITLE_TEMPLATE; + break; + case self::TWO_OPTIONS: + $this->title = $this->h1 . ' ' . $this->options[0]->title + . ' ' . $this->options[1]->title + . self::TITLE_TEMPLATE; + break; + default: + $this->title = $this->h1 . self::TITLE_TEMPLATE; + } + + } + + protected function selectDescription() + { + switch ($this->mode) { + case self::SINGLE_CATEGORY: + $this->description = str_replace('{inner text}',$this->h1,self::DESC_TEMPLATE); + break; + case self::ONE_OPTION: + $this->description = + str_replace( + '{inner text}', + $this->h1 . ' ' . $this->options[0]->title, + self::DESC_TEMPLATE + ); + break; + case self::TWO_OPTIONS: + $this->description = + str_replace( + '{inner text}', + $this->h1 + . ' ' . $this->options[0]->title + . ' ' . $this->options[1]->title, + self::DESC_TEMPLATE + ); + break; + default: + $this->description = str_replace('{inner text}',$this->h1,self::DESC_TEMPLATE); + } + } + + protected function generateRobots() + { + switch ($this->mode) { + case self::SINGLE_CATEGORY: + $this->robots = 'index, follow'; + case self::ONE_OPTION : + if (!empty($this->template) && !$this->template->isBasic) { + $this->robots = $this->template->robots; + } else { + $this->robots = 'index, follow'; + } + break; + case self::TWO_OPTIONS: + if (!empty($this->template) && !$this->template->isBasic) { + $this->robots = $this->template->robots; + } else { + $this->robots = 'index, follow'; + } + break; + case self::MANY: + $this->robots = 'noindex, nofollow'; + break; + } + } + + public function getFields(): string + { + return ''; + } + + public function getSeoText(): string + { + return $this->text ?? ''; + } + + public function getId() + { + return 0; + } + + public function getTitle(): string + { + return $this->title ?? ''; + } + + public function getDesc(): string + { + return $this->description ?? ''; + } + + public function getH1(): string + { + return mb_strtoupper(mb_substr($this->h1, 0, 1)).mb_strtolower(mb_substr($this->h1, 1)) ?? ''; + } + + public function getText(): string + { + return $this->text ?? ''; + } + + public function getRobots(): string + { + return $this->robots ?? ''; + } +} \ No newline at end of file diff --git a/frontend/controllers/CategoryController.php b/frontend/controllers/CategoryController.php index 787363b..2d547e9 100755 --- a/frontend/controllers/CategoryController.php +++ b/frontend/controllers/CategoryController.php @@ -6,6 +6,7 @@ use artbox\catalog\models\Category; use artbox\core\components\SeoComponent; use artbox\core\models\Alias; + use frontend\components\SeoCategory; use yii\data\ActiveDataProvider; use yii\db\ActiveQuery; use yii\web\Controller; @@ -38,6 +39,15 @@ $seo->setModel($model->lang); $filterHelper = \Yii::$app->get('filter'); $filterHelper->setFilter($filter); + $seoData = new SeoCategory( + [ + 'options' => $filterHelper->getActiveOptions(), + 'category' => $model, + 'categoryAlias' => $seo->alias, + ] + ); + $seo->loaded = false; + $seo->setAlias($seoData); $query = $filterHelper->buildQuery() ->innerJoinWith('category', false) ->andWhere([ 'product_to_category.category_id' => $model->id ]) diff --git a/frontend/views/category/view.php b/frontend/views/category/view.php index d740240..ebf1370 100755 --- a/frontend/views/category/view.php +++ b/frontend/views/category/view.php @@ -22,7 +22,7 @@ $seo = \Yii::$app->get('seo'); $filterHelper = \Yii::$app->get('filter'); $view = $this; - $this->params[ 'breadcrumbs' ][] = $seo->title; + $this->params[ 'breadcrumbs' ][] = $seo->h1; ?>
diff --git a/frontend/views/layouts/main.php b/frontend/views/layouts/main.php index 81cc80c..baccb55 100644 --- a/frontend/views/layouts/main.php +++ b/frontend/views/layouts/main.php @@ -86,6 +86,12 @@ 'content' => $seo->desc, ] ); + $this->registerMetaTag( + [ + 'name' => 'robots', + 'content' => $seo->robots, + ] + ); $preloader = <<controller->id ==='category'||'blog')) { - <?= Html::encode($seo->title) ?> -- libgit2 0.21.4