-
Notifications
You must be signed in to change notification settings - Fork 7
/
MetaTagBehavior.php
106 lines (80 loc) · 2.31 KB
/
MetaTagBehavior.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
/**
* Created by PhpStorm.
* User: artemshmanovsky
* Date: 12.03.15
* Time: 1:52
*/
namespace v0lume\yii2\metaTags;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use v0lume\yii2\metaTags\models\MetaTag;
use yii\web\Request;
class MetaTagBehavior extends Behavior
{
private $_model = null;
public function events()
{
return [
ActiveRecord::EVENT_AFTER_INSERT => 'afterSave',
ActiveRecord::EVENT_AFTER_UPDATE => 'afterSave',
ActiveRecord::EVENT_AFTER_DELETE => 'afterDelete',
];
}
public function afterSave($event)
{
if(Yii::$app->request instanceof Request){
$attributes = Yii::$app->request->post('MetaTag', Yii::$app->request->get('MetaTag', null) );
if($attributes)
{
$model = $this->getModel();
if(!isset($model))
$model = new MetaTag();
$attributes['model_id'] = $this->owner->id;
$attributes['model'] = (new \ReflectionClass($this->owner))->getShortName();
$model->attributes = $attributes;
$model->save();
}
}
}
public function afterDelete($event)
{
MetaTag::deleteAll([
'model_id' => $this->owner->id,
'model' => (new \ReflectionClass($this->owner))->getShortName()
]);
}
public function getModel()
{
$model = MetaTag::findOne([
'model_id' => $this->owner->id,
'model' => (new \ReflectionClass($this->owner))->getShortName()
]);
if($model == null)
$model = new MetaTag();
$this->_model = $model;
return $model;
}
public function getTitle()
{
$model = $this->_model;
if(!isset($model))
$model = $this->getModel();
return isset($model) ? $model->title : '';
}
public function getDescription()
{
$model = $this->_model;
if(!isset($model))
$model = $this->getModel();
return isset($model) ? $model->description : '';
}
public function getKeywords()
{
$model = $this->_model;
if(!isset($model))
$model = $this->getModel();
return isset($model) ? $model->keywords : '';
}
}