Commit 585f04ca06d450506961a845bc9622f7965167f6

Authored by Administrator
1 parent 37979782

15.04.16 seo widget

backend/controllers/SeoDynamicController.php
... ... @@ -36,7 +36,7 @@ class SeoDynamicController extends Controller
36 36 public function actionIndex($seo_category_id)
37 37 {
38 38 $searchModel = new SeoDynamicSearch();
39   - $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  39 + $dataProvider = $searchModel->search($seo_category_id,Yii::$app->request->queryParams);
40 40  
41 41 return $this->render('index', [
42 42 'searchModel' => $searchModel,
... ...
backend/views/seo-dynamic/_form.php
... ... @@ -16,6 +16,10 @@ use yii\widgets\ActiveForm;
16 16  
17 17 <?= $form->field($model, 'action')->textInput(['maxlength' => true]) ?>
18 18  
  19 + <?= $form->field($model, 'param')->textInput(['maxlength' => true]) ?>
  20 +
  21 + <?= $form->field($model, 'key')->textInput(['maxlength' => true]) ?>
  22 +
19 23 <?= $form->field($model, 'fields')->textInput(['maxlength' => true]) ?>
20 24  
21 25 <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>
... ...
common/models/SeoDynamic.php
... ... @@ -15,8 +15,10 @@ use Yii;
15 15 * @property string $title
16 16 * @property string $h1
17 17 * @property string $description
18   - * @property string $seo-text
  18 + * @property string $seo_text
19 19 * @property integer $status
  20 + * @property string $param
  21 + * @property string $key
20 22 *
21 23 * @property SeoCategory $seoCategory
22 24 */
... ... @@ -39,7 +41,7 @@ class SeoDynamic extends \yii\db\ActiveRecord
39 41 [['seo_category_id', 'status'], 'integer'],
40 42 [['seo_text'], 'string'],
41 43 [['name', 'action'], 'string', 'max' => 200],
42   - [['fields', 'title', 'h1', 'description'], 'string', 'max' => 255],
  44 + [['fields', 'title', 'h1', 'description', 'param', 'key'], 'string', 'max' => 255],
43 45 [['seo_category_id'], 'exist', 'skipOnError' => true, 'targetClass' => SeoCategory::className(), 'targetAttribute' => ['seo_category_id' => 'seo_category_id']],
44 46 ];
45 47 }
... ... @@ -60,6 +62,8 @@ class SeoDynamic extends \yii\db\ActiveRecord
60 62 'description' => Yii::t('app', 'Description'),
61 63 'seo_text' => Yii::t('app', 'Seo Text'),
62 64 'status' => Yii::t('app', 'Status'),
  65 + 'param' => Yii::t('app', 'Param'),
  66 + 'key' => Yii::t('app', 'Key'),
63 67 ];
64 68 }
65 69  
... ...
common/models/SeoDynamicSearch.php
... ... @@ -39,7 +39,7 @@ class SeoDynamicSearch extends SeoDynamic
39 39 *
40 40 * @return ActiveDataProvider
41 41 */
42   - public function search($params)
  42 + public function search($seo_category_id, $params)
43 43 {
44 44 $query = SeoDynamic::find();
45 45  
... ... @@ -60,7 +60,7 @@ class SeoDynamicSearch extends SeoDynamic
60 60 // grid filtering conditions
61 61 $query->andFilterWhere([
62 62 'seo_dynamic_id' => $this->seo_dynamic_id,
63   - 'seo_category_id' => $this->seo_category_id,
  63 + 'seo_category_id' => $seo_category_id,
64 64 'status' => $this->status,
65 65 ]);
66 66  
... ...
console/migrations/m160414_101644_add_param_to_seo_dynamic.php 0 โ†’ 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +/**
  6 + * Handles adding the columns `param`
  7 + * for table `seo_dynamic`.
  8 + */
  9 +class m160414_101644_add_param_to_seo_dynamic extends Migration
  10 +{
  11 + /**
  12 + * @inheritdoc
  13 + */
  14 + public function up()
  15 + {
  16 + $this->addColumn('seo_dynamic', 'param', $this->string());
  17 + }
  18 +
  19 + /**
  20 + * @inheritdoc
  21 + */
  22 + public function down()
  23 + {
  24 + $this->dropColumn('seo_dynamic', 'param');
  25 + }
  26 +}
... ...
console/migrations/m160414_214745_add_key_to_seo_dynamic.php 0 โ†’ 100644
  1 +<?php
  2 +
  3 +use yii\db\Migration;
  4 +
  5 +/**
  6 + * Handles adding the columns `key`
  7 + * for table `seo_dynamic`.
  8 + */
  9 +class m160414_214745_add_key_to_seo_dynamic extends Migration
  10 +{
  11 + /**
  12 + * @inheritdoc
  13 + */
  14 + public function up()
  15 + {
  16 + $this->addColumn('seo_dynamic', 'key', $this->string());
  17 + }
  18 +
  19 + /**
  20 + * @inheritdoc
  21 + */
  22 + public function down()
  23 + {
  24 + $this->dropColumn('seo_dynamic', 'key');
  25 + }
  26 +}
... ...
frontend/views/catalog/product.php
1 1 <?php
2 2 /** @var $this \yii\web\View */
3 3 /** @var $dataProvider \yii\data\ActiveDataProvider */
4   -
  4 +die('here1');
5 5 $this->title = $product->name;
6 6 foreach($product->category->getParents()->all() as $parent) {
7 7 $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]];
... ...
frontend/views/catalog/products.php
... ... @@ -3,14 +3,21 @@
3 3 /** @var $productProvider \yii\data\ActiveDataProvider */
4 4 /** @var $brandProvider \yii\data\ActiveDataProvider */
5 5  
  6 +
6 7 use yii\helpers\Url;
7 8 use common\modules\product\helpers\ProductHelper;
8 9  
  10 +
9 11 $this->title = $category->categoryName->value;
10 12 foreach($category->getParents()->all() as $parent) {
11 13 $this->params['breadcrumbs'][] = ['label' => $parent->categoryName->value, 'url' => ['catalog/category', 'category' => $parent]];
12 14 }
13 15 $this->params['breadcrumbs'][] = $category->categoryName->value;
  16 +$this->params['seo']['seo_text'] = 'TEST SEO TEXT';
  17 +$this->params['seo']['h1'] = 'TEST H1';
  18 +$this->params['seo']['description'] = 'TEST DESCRIPTION';
  19 +$this->params['seo']['fields']['name'] = 'TEST NAME FROM FIELD';
  20 +$this->params['seo']['key']= 'product_list';
14 21 ?>
15 22 <script type="text/javascript">
16 23 <?php if ($priceLimits['min'] < $priceLimits['max']) :?>
... ...
frontend/views/event/index.php
... ... @@ -2,6 +2,10 @@
2 2 use yii\widgets\ListView;
3 3 use frontend\widgets\Seo;
4 4 $this->params['breadcrumbs'][] = ['label' => 'ะะบั†ะธะธ', 'url' => ['index']];
  5 +$this->params['seo']['seo_text'] = 'TEST SEO TEXT';
  6 +$this->params['seo']['h1'] = 'TEST H1';
  7 +$this->params['seo']['description'] = 'TEST DESCRIPTION';
  8 +$this->params['seo']['fields']['name'] = 'TEST NAME FROM FIELD';
5 9 ?>
6 10  
7 11 <?php
... ...
frontend/views/event/view.php
... ... @@ -22,5 +22,5 @@ $this-&gt;params[&#39;name&#39;] = $this-&gt;title;
22 22 </div>
23 23 </div>
24 24 <div class="seo-text">
25   - <?= Seo::widget(['row'=>'seo_text'])?>
  25 +<!-- --><?//= Seo::widget(['row'=>'seo_text'])?>
26 26 </div>
... ...
frontend/views/layouts/main.php
... ... @@ -19,24 +19,8 @@ AppAsset::register($this);
19 19 <html lang="en">
20 20 <head>
21 21 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
22   - <title><?= Seo::widget([
23   - 'row'=>'title',
24   - 'own_attr'=>$this->title,
25   - 'fields' =>[
26   - 'name' => isset($this->params[ 'name' ]) ? $this->params[ 'name' ] : ''
27   - ]
28   - ])?>
29   - </title>
30   - <?php $this->registerMetaTag([
31   - 'name' => 'description',
32   - 'content' => Seo::widget([
33   - 'row'=>'description',
34   - 'own_attr'=>isset($this->params[ 'description' ]) ? $this->params[ 'description' ] : '',
35   - 'fields' =>[
36   - 'name' => isset($this->params[ 'name' ]) ? $this->params[ 'name' ] : ''
37   - ]
38   - ])
39   - ]); ?>
  22 + <title><?= Seo::widget([ 'row'=>'title'])?></title>
  23 + <?= Seo::widget([ 'row'=>'description'])?>
40 24 <?php $this->head() ?>
41 25 <?//= Html::csrfMetaTags() ?>
42 26 <link href='https://fonts.googleapis.com/css?family=Ubuntu:400,300italic,300,400italic,500,500italic,700italic,700' rel='stylesheet' type='text/css'>
... ...
frontend/widgets/Seo.php
1 1 <?php
2 2 namespace frontend\widgets;
3   -use common\models\SeoCategory;
4 3 use common\models\SeoDynamic;
5 4 use yii\base\Widget;
6 5 use yii\helpers\Html;
... ... @@ -11,9 +10,20 @@ class Seo extends Widget
11 10 public $row;
12 11 public $own_attr;
13 12 public $fields;
  13 + public $description;
  14 + public $title;
  15 + public $seo_text;
  16 + public $h1;
  17 + public $key;
  18 + public $project_name;
  19 + const SEO_TEXT = 'seo_text';
  20 + const DESCRIPTION = 'description';
  21 + const H1 = 'h1';
  22 + const TITLE = 'title';
14 23  
15 24 public function init(){
16   - $this->url = $_SERVER['REQUEST_URI'];
  25 + $this->url = \Yii::$app->request->url;
  26 + $this->project_name = \Yii::$app->name;
17 27 parent::init();
18 28  
19 29 }
... ... @@ -21,27 +31,62 @@ class Seo extends Widget
21 31  
22 32 public function run()
23 33 {
24   - $row = '';
25 34  
  35 + $seoData = $this->getViewData();
  36 + foreach($seoData as $key=>$value){
  37 + $this->$key = $value;
  38 + }
26 39  
27   - $widgetData = $this->findSeoByUrl();
28   - if($widgetData instanceof \common\models\Seo){
29 40  
30   - $row = $widgetData->{$this->row};
31   - } else{
  41 + switch ($this->row) {
  42 + case self::SEO_TEXT:
  43 + $this->selectSeoData(self::SEO_TEXT);
32 44  
33   - $widgetData = $this->findSeoByDynamic();
34   - if($widgetData instanceof SeoDynamic){
35   - $row = $widgetData->{$this->row};
36   - }
37   - }
38   - if(!empty($this->own_attr) && empty($row)) {
  45 + break;
  46 + case self::H1:
  47 + $this->selectSeoData(self::H1);
  48 + break;
  49 + case self::TITLE:
39 50  
40   - $row = $this->own_attr;
41   - }
  51 + $filter = \Yii::$app->request->get('filter', []);
  52 + if(!empty($filter)){
  53 + $filter_row = '';
  54 + foreach($filter as $sub_filter_name => $sub_filter_array){
  55 + if($sub_filter_name=='options'){
  56 + foreach($sub_filter_array as $f_name=>$f_values){
  57 + $filter_row .= $f_name.':'.implode(',',$f_values).'|';
  58 + }
  59 + }
  60 +
  61 + }
  62 + $this->fields['name'] = $filter_row;
  63 + }
  64 +
  65 + $title = $this->selectSeoData(self::TITLE);
  66 +
  67 +
  68 +
  69 + if(!empty($title)){
  70 + return $title;
  71 + } else {
  72 + return $this->project_name;
  73 + }
  74 +
  75 + break;
  76 + case self::DESCRIPTION:
  77 + $description = $this->selectSeoData(self::DESCRIPTION);
42 78  
  79 + if(!empty($description)){
43 80  
44   - return $this->replaceData($row);
  81 + $this->getView()->registerMetaTag([
  82 + 'name' => 'description',
  83 + 'content' => $description
  84 + ]);
  85 +
  86 + }
  87 +
  88 + break;
  89 + }
45 90  
46 91  
47 92 }
... ... @@ -54,6 +99,7 @@ class Seo extends Widget
54 99 $str = str_replace('{'.$field_name.'}', $field_value, $str);
55 100 }
56 101 }
  102 + $str = str_replace('{project_name}', $this->project_name, $str);
57 103 return Html::encode($str);
58 104 }
59 105  
... ... @@ -64,6 +110,54 @@ class Seo extends Widget
64 110  
65 111 protected function findSeoByDynamic()
66 112 {
67   - return SeoDynamic::find()->joinWith('seoCategory')->where(['controller'=> \Yii::$app->controller->id, 'action'=>\Yii::$app->controller->action->id])->one();
  113 + $query = SeoDynamic::find()->joinWith('seoCategory')->where(['controller'=> \Yii::$app->controller->id, 'action'=>\Yii::$app->controller->action->id]);
  114 + if(!empty($this->key)){
  115 + $query->andWhere(['key'=>$this->key]);
  116 + }
  117 + return $query->one();
  118 + }
  119 +
  120 +
  121 + protected function getViewData(){
  122 + $params = $this->getView()->params;
  123 + if(isset($params['seo'])){
  124 + return $params['seo'];
  125 + } else {
  126 + return [];
  127 + }
  128 + }
  129 +
  130 + protected function selectSeoData($param){
  131 + $result = '';
  132 +
  133 +
  134 +
  135 + if(!empty($this->$param)){
  136 +
  137 + $result = $this->$param;
  138 +
  139 + } else {
  140 +
  141 + $widgetData = $this->findSeoByUrl();
  142 +
  143 + if($widgetData instanceof \common\models\Seo){
  144 +
  145 + $result = $widgetData->$param;
  146 + } else {
  147 +
  148 + $widgetData = $this->findSeoByDynamic();
  149 +
  150 + if($widgetData instanceof SeoDynamic){
  151 +
  152 + $result = $widgetData->$param;
  153 +
  154 + }
  155 + }
  156 + }
  157 +
  158 + return $this->replaceData($result);
  159 +
68 160 }
  161 +
  162 +
69 163 }
70 164 \ No newline at end of file
... ...