рефакторинг

parent e65ad2ef
<?php <?php
namespace common\components\activeRecordBehaviors; namespace common\components\activeRecordBehaviors;
use yii;
use Yii;
use yii\base\Behavior; use yii\base\Behavior;
use yii\db\ActiveRecord; use yii\db\ActiveRecord;
use \common\models\MetaTags; use \common\models\MetaTags;
use common\modules\languages\models\Languages;
class MetaTagBehavior extends Behavior class MetaTagBehavior extends Behavior
{ {
public $meta;
public function events() public function events()
{ {
return [ return [
ActiveRecord::EVENT_AFTER_UPDATE => 'Save', ActiveRecord::EVENT_INIT => 'eventInit',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert', ActiveRecord::EVENT_AFTER_FIND => 'eventFind',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete', ActiveRecord::EVENT_AFTER_UPDATE => 'eventSave',
ActiveRecord::EVENT_AFTER_INSERT => 'eventInsert',
ActiveRecord::EVENT_BEFORE_DELETE => 'eventDelete',
]; ];
} }
public function Save($event) public function eventInit($event)
{
$langs = Languages::find()->all();
if($this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$mt = new MetaTags;
$mt->lang_id = $lang->id;
$this->meta[$lang->id] = $mt;
}
}
}
public function eventFind($event)
{
$langs = Languages::find()->all();
if(!$this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$mt = $this->owner->getMetaTags($lang->id)->one();
if(!$mt)
{
$mt = new MetaTags;
$mt->lang_id = $lang->id;
}
$this->meta[$lang->id] = $mt;
}
}
}
public function eventSave($event)
{ {
$meta = \Yii::$app->request->post('MetaTags'); $meta = \Yii::$app->request->post('MetaTags');
if ($meta) if ($meta)
...@@ -46,7 +89,7 @@ class MetaTagBehavior extends Behavior ...@@ -46,7 +89,7 @@ class MetaTagBehavior extends Behavior
return true; return true;
} }
public function Insert($event) public function eventInsert($event)
{ {
$meta = \Yii::$app->request->post('MetaTags'); $meta = \Yii::$app->request->post('MetaTags');
if ($meta) if ($meta)
...@@ -67,7 +110,7 @@ class MetaTagBehavior extends Behavior ...@@ -67,7 +110,7 @@ class MetaTagBehavior extends Behavior
return true; return true;
} }
public function Delete($event) public function eventDelete($event)
{ {
if($this->owner->metaTags) if($this->owner->metaTags)
{ {
......
...@@ -77,14 +77,6 @@ class PostAdminController extends AdminController ...@@ -77,14 +77,6 @@ class PostAdminController extends AdminController
public function actionCreate() public function actionCreate()
{ {
$model = new Post(); $model = new Post();
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = new PostLang;
$lng->lang_id = $lang->id;
$langs[$lang->id] = $lng;
}
if (Yii::$app->request->isPost) if (Yii::$app->request->isPost)
{ {
...@@ -110,7 +102,6 @@ class PostAdminController extends AdminController ...@@ -110,7 +102,6 @@ class PostAdminController extends AdminController
return $this->render('create', [ return $this->render('create', [
'model' => $model, 'model' => $model,
'langs' => $langs,
]); ]);
} }
...@@ -123,20 +114,6 @@ class PostAdminController extends AdminController ...@@ -123,20 +114,6 @@ class PostAdminController extends AdminController
public function actionUpdate($id) public function actionUpdate($id)
{ {
$model = $this->findModel($id); $model = $this->findModel($id);
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = $model->getLang($lang->id)->one();
if(!$lng)
{
$lng = new PostLang;
$lng->lang_id = $lang->id;
}
$langs[$lang->id] = $lng;
}
if (Yii::$app->request->isPost) if (Yii::$app->request->isPost)
{ {
...@@ -162,7 +139,6 @@ class PostAdminController extends AdminController ...@@ -162,7 +139,6 @@ class PostAdminController extends AdminController
return $this->render('update', [ return $this->render('update', [
'model' => $model, 'model' => $model,
'langs' => $langs,
]); ]);
} }
......
...@@ -7,6 +7,7 @@ use Yii; ...@@ -7,6 +7,7 @@ use Yii;
use common\modules\languages\models\Languages; use common\modules\languages\models\Languages;
use common\modules\blog\models\PostLang; use common\modules\blog\models\PostLang;
use common\modules\blog\models\PostTags; use common\modules\blog\models\PostTags;
use common\models\MetaTags;
/** /**
* This is the model class for table "posts". * This is the model class for table "posts".
...@@ -65,8 +66,14 @@ class Post extends \common\components\ActiveRecordModel ...@@ -65,8 +66,14 @@ class Post extends \common\components\ActiveRecordModel
public function behaviors() public function behaviors()
{ {
return [ return [
'meta' => [
'class' => 'common\components\activeRecordBehaviors\MetaTagBehavior',
],
'langs' => [ 'langs' => [
'class' => 'common\modules\blog\components\PostLangBehavior', 'class' => 'common\modules\languages\components\LanguageHelperBehavior',
'field' => 'post_id',
'langClass' => 'common\modules\blog\models\PostLang',
'actions' => ['create', 'update']
], ],
'file' => [ 'file' => [
'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior', 'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior',
...@@ -94,6 +101,34 @@ class Post extends \common\components\ActiveRecordModel ...@@ -94,6 +101,34 @@ class Post extends \common\components\ActiveRecordModel
]; ];
} }
/**
* @return \yii\db\ActiveQuery
*/
public function getMetaTags($lang_id = null)
{
$query = $this->hasMany(MetaTags::className(), ['object_id' => 'id'])->where(['model_id' => get_class($this)]);
if($lang_id)
{
$query->andWhere(['lang_id' => $lang_id]);
}
return $query;
}
/**
* @return \yii\db\ActiveQuery
*/
public function getMetaTag($lang_id = null)
{
$lang_id = ($lang_id === null)? Languages::getCurrent()->id: $lang_id;
return $this->hasOne(MetaTags::className(), ['object_id' => 'id'])->where([
'model_id' => get_class($this),
'lang_id' => $lang_id
]);
}
/** /**
* @return \yii\db\ActiveQuery * @return \yii\db\ActiveQuery
*/ */
......
...@@ -4,6 +4,7 @@ use yii\helpers\Html; ...@@ -4,6 +4,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm; use yii\widgets\ActiveForm;
use common\modules\blog\models\Post; use common\modules\blog\models\Post;
use common\modules\content\widgets\MetaTagsWidget;
/* @var $this yii\web\View */ /* @var $this yii\web\View */
/* @var $model common\modules\blog\models\Post */ /* @var $model common\modules\blog\models\Post */
...@@ -39,13 +40,13 @@ use common\modules\blog\models\Post; ...@@ -39,13 +40,13 @@ use common\modules\blog\models\Post;
<?= $form->field($model, 'unlinkFile')->checkbox(); ?> <?= $form->field($model, 'unlinkFile')->checkbox(); ?>
<ul class="nav nav-pills"> <ul class="nav nav-pills">
<?php $c = 0; foreach ($langs as $i => $content) : $c++; ?> <?php $c = 0; foreach ($model->langs as $i => $content) : $c++; ?>
<li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$content->lang->url?>" data-toggle="tab"><?=$content->lang->name?></a></li> <li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$content->lang->url?>" data-toggle="tab"><?=$content->lang->name?></a></li>
<?php endforeach; ?> <?php endforeach; ?>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<?php $c = 0; foreach ($langs as $content) : $c++; <?php $c = 0; foreach ($model->langs as $content) : $c++;
$lang_id = $content->lang->id; ?> $lang_id = $content->lang->id; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$content->lang->url;?>"> <div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$content->lang->url;?>">
...@@ -53,6 +54,11 @@ use common\modules\blog\models\Post; ...@@ -53,6 +54,11 @@ use common\modules\blog\models\Post;
<?= $form->field($content, '['.$lang_id.']text')->textArea() ?> <?= $form->field($content, '['.$lang_id.']text')->textArea() ?>
<?= MetaTagsWidget::widget([
'model' => $model->meta[$lang_id],
'form' => $form,
])?>
</div> </div>
<?php endforeach; ?> <?php endforeach; ?>
</div> </div>
......
...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [ <?= $this->render('_form', [
'model' => $model, 'model' => $model,
'langs' => $langs,
]) ?> ]) ?>
</div> </div>
...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = 'Update'; ...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = 'Update';
<?= $this->render('_form', [ <?= $this->render('_form', [
'model' => $model, 'model' => $model,
'langs' => $langs,
]) ?> ]) ?>
</div> </div>
<?php
namespace common\modules\content\components;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use common\modules\content\models\CoBlocksLang;
class CoBlocksLangBehavior extends Behavior
{
public function events()
{
return [
ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
];
}
public function Save($event)
{
$langs = Yii::$app->request->post('CoBlocksLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = CoBlocksLang::find()->where([
'block_id' => $this->owner->id,
'lang_id' => $lang_id,
])->one();
if (!$lang)
{
$lang = new CoBlocksLang;
}
$attributes['block_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$lang->setAttributes( $attributes );
if(!$lang->save()) die(print_r($lang->errors));
}
}
return true;
}
public function Insert($event)
{
$langs = Yii::$app->request->post('CoBlocksLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = new CoBlocksLang;
$attributes['block_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$lang->setAttributes($attributes);
$lang->save(false);
}
}
return true;
}
public function Delete($event)
{
if($this->owner->langs)
{
foreach ($this->owner->langs as $lang)
{
$lang->delete();
}
}
return true;
}
}
<?php
namespace common\modules\content\components;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use common\modules\content\models\CoContentLang;
class CoContentLangBehavior extends Behavior
{
public function events()
{
return [
ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
];
}
public function Save($event)
{
$langs = Yii::$app->request->post('CoContentLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = CoContentLang::find()->where([
'content_id' => $this->owner->id,
'lang_id' => $lang_id,
])->one();
if (!$lang)
{
$lang = new CoContentLang;
}
$attributes['content_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$lang->setAttributes( $attributes );
if(!$lang->save()) die(print_r($lang->errors));
}
}
return true;
}
public function Insert($event)
{
$langs = Yii::$app->request->post('CoContentLang');
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = new CoContentLang;
$attributes['content_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$lang->setAttributes($attributes);
$lang->save(false);
}
}
return true;
}
public function Delete($event)
{
if($this->owner->langs)
{
foreach ($this->owner->langs as $lang)
{
$lang->delete();
}
}
return true;
}
}
...@@ -78,15 +78,7 @@ class BlockAdminController extends AdminController ...@@ -78,15 +78,7 @@ class BlockAdminController extends AdminController
*/ */
public function actionCreate() public function actionCreate()
{ {
$model = new CoBlocks; $model = new CoBlocks;
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = new CoBlocksLang;
$lng->lang_id = $lang->id;
$langs[$lang->id] = $lng;
}
Yii::$app->controller->page_title = 'Добавить блок'; Yii::$app->controller->page_title = 'Добавить блок';
...@@ -118,7 +110,6 @@ class BlockAdminController extends AdminController ...@@ -118,7 +110,6 @@ class BlockAdminController extends AdminController
return $this->render('create', [ return $this->render('create', [
'model' => $model, 'model' => $model,
'langs' => $langs
]); ]);
} }
...@@ -130,22 +121,7 @@ class BlockAdminController extends AdminController ...@@ -130,22 +121,7 @@ class BlockAdminController extends AdminController
*/ */
public function actionUpdate($id) public function actionUpdate($id)
{ {
$model = $this->findModel($id); $model = $this->findModel($id);
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = $model->getLang($lang->id)->one();
if(!$lng)
{
$lng = new CoBlocksLang;
$lng->lang_id = $lang->id;
}
$langs[$lang->id] = $lng;
}
Yii::$app->controller->page_title = 'Редактировать блок'; Yii::$app->controller->page_title = 'Редактировать блок';
...@@ -177,7 +153,6 @@ class BlockAdminController extends AdminController ...@@ -177,7 +153,6 @@ class BlockAdminController extends AdminController
return $this->render('update', [ return $this->render('update', [
'model' => $model, 'model' => $model,
'langs' => $langs
]); ]);
} }
......
...@@ -84,19 +84,6 @@ class ContentAdminController extends AdminController ...@@ -84,19 +84,6 @@ class ContentAdminController extends AdminController
public function actionCreate() public function actionCreate()
{ {
$model = new CoContent; $model = new CoContent;
$langs = [];
$meta = [];
foreach (Languages::find()->all() as $lang)
{
$lng = new CoContentLang;
$lng->lang_id = $lang->id;
$langs[$lang->id] = $lng;
$mt = new \common\models\MetaTags;
$mt->lang_id = $lang->id;
$meta[$lang->id] = $mt;
}
Yii::$app->controller->page_title = 'Добавить страницу'; Yii::$app->controller->page_title = 'Добавить страницу';
...@@ -128,8 +115,6 @@ class ContentAdminController extends AdminController ...@@ -128,8 +115,6 @@ class ContentAdminController extends AdminController
return $this->render('create', [ return $this->render('create', [
'model' => $model, 'model' => $model,
'meta' => $meta,
'langs' => $langs
]); ]);
} }
...@@ -142,31 +127,6 @@ class ContentAdminController extends AdminController ...@@ -142,31 +127,6 @@ class ContentAdminController extends AdminController
public function actionUpdate($id) public function actionUpdate($id)
{ {
$model = $this->findModel($id); $model = $this->findModel($id);
$langs = [];
$meta = [];
foreach (Languages::find()->all() as $lang)
{
$mt = $model->getMetaTags($lang->id)->one();
if(!$mt)
{
$mt = new \common\models\MetaTags;
$mt->lang_id = $lang->id;
}
$meta[$lang->id] = $mt;
$lng = $model->getLang($lang->id)->one();
if(!$lng)
{
$lng = new CoContentLang;
$lng->lang_id = $lang->id;
}
$langs[$lang->id] = $lng;
}
Yii::$app->controller->page_title = 'Редактировать страницу'; Yii::$app->controller->page_title = 'Редактировать страницу';
...@@ -198,8 +158,6 @@ class ContentAdminController extends AdminController ...@@ -198,8 +158,6 @@ class ContentAdminController extends AdminController
return $this->render('update', [ return $this->render('update', [
'model' => $model, 'model' => $model,
'meta' => $meta,
'langs' => $langs,
]); ]);
} }
......
...@@ -40,8 +40,11 @@ class CoBlocks extends \common\components\ActiveRecordModel ...@@ -40,8 +40,11 @@ class CoBlocks extends \common\components\ActiveRecordModel
{ {
return [ return [
'langs' => [ 'langs' => [
'class' => 'common\modules\content\components\CoBlocksLangBehavior', 'class' => 'common\modules\languages\components\LanguageHelperBehavior',
] 'field' => 'block_id',
'langClass' => 'common\modules\content\models\CoBlocksLang',
'actions' => ['create', 'update']
],
]; ];
} }
......
...@@ -55,7 +55,10 @@ class CoContent extends \common\components\ActiveRecordModel ...@@ -55,7 +55,10 @@ class CoContent extends \common\components\ActiveRecordModel
'class' => 'common\components\activeRecordBehaviors\MetaTagBehavior', 'class' => 'common\components\activeRecordBehaviors\MetaTagBehavior',
], ],
'langs' => [ 'langs' => [
'class' => 'common\modules\content\components\CoContentLangBehavior', 'class' => 'common\modules\languages\components\LanguageHelperBehavior',
'field' => 'content_id',
'langClass' => 'common\modules\content\models\CoContentLang',
'actions' => ['create', 'update']
], ],
'file' => [ 'file' => [
'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior', 'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior',
......
...@@ -30,13 +30,13 @@ use common\modules\content\models\CoBlocks; ...@@ -30,13 +30,13 @@ use common\modules\content\models\CoBlocks;
<?= $form->field($model, 'title')->textInput(['maxlength' => 250])->hint('Заголовок страницы виден пользователю сайта и как правило оформляется в тег &lt;h1&gt;. Если дизайном страницы не предусмотрен вывод заголовка, то он не будет выводиться даже если был введен в данное поле.') ?> <?= $form->field($model, 'title')->textInput(['maxlength' => 250])->hint('Заголовок страницы виден пользователю сайта и как правило оформляется в тег &lt;h1&gt;. Если дизайном страницы не предусмотрен вывод заголовка, то он не будет выводиться даже если был введен в данное поле.') ?>
<ul class="nav nav-pills"> <ul class="nav nav-pills">
<?php $c = 0; foreach ($langs as $i => $block) : $c++; ?> <?php $c = 0; foreach ($model->langs as $i => $block) : $c++; ?>
<li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$block->lang->url?>" data-toggle="tab"><?=$block->lang->name?></a></li> <li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$block->lang->url?>" data-toggle="tab"><?=$block->lang->name?></a></li>
<?php endforeach; ?> <?php endforeach; ?>
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
<?php $c = 0; foreach ($langs as $block) : $c++; <?php $c = 0; foreach ($model->langs as $block) : $c++;
$lang_id = $block->lang->id; ?> $lang_id = $block->lang->id; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$block->lang->url;?>"> <div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$block->lang->url;?>">
......
...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [ <?= $this->render('_form', [
'model' => $model, 'model' => $model,
'langs' => $langs
]) ?> ]) ?>
</div> </div>
...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [ <?= $this->render('_form', [
'model' => $model, 'model' => $model,
'langs' => $langs
]) ?> ]) ?>
</div> </div>
...@@ -53,7 +53,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all(); ...@@ -53,7 +53,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
<?= $form->field($model, 'file')->fileInput() ?> <?= $form->field($model, 'file')->fileInput() ?>
<ul class="nav nav-pills"> <ul class="nav nav-pills">
<?php $c = 0; foreach ($langs as $i => $content) : $c++; ?> <?php $c = 0; foreach ($model->langs as $i => $content) : $c++; ?>
<li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$content->lang->url?>" data-toggle="tab"><?=$content->lang->name?></a></li> <li class="<?=($c==1?'active':'')?>"><a href="#lang-<?=$content->lang->url?>" data-toggle="tab"><?=$content->lang->name?></a></li>
<?php endforeach; ?> <?php endforeach; ?>
</ul> </ul>
...@@ -72,7 +72,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all(); ...@@ -72,7 +72,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
?> ?>
<div class="tab-content"> <div class="tab-content">
<?php $c = 0; foreach ($langs as $content) : $c++; <?php $c = 0; foreach ($model->langs as $content) : $c++;
$lang_id = $content->lang->id; ?> $lang_id = $content->lang->id; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$content->lang->url;?>"> <div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$content->lang->url;?>">
...@@ -83,7 +83,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all(); ...@@ -83,7 +83,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
<?= $form->field($content, '['.$lang_id.']text')->textArea()->hint($block_hint) ?> <?= $form->field($content, '['.$lang_id.']text')->textArea()->hint($block_hint) ?>
<?= MetaTagsWidget::widget([ <?= MetaTagsWidget::widget([
'model' => $meta[$lang_id], 'model' => $model->meta[$lang_id],
'form' => $form, 'form' => $form,
])?> ])?>
......
...@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [ <?= $this->render('_form', [
'model' => $model, 'model' => $model,
'meta' => $meta,
'langs' => $langs
]) ?> ]) ?>
</div> </div>
...@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title; ...@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [ <?= $this->render('_form', [
'model' => $model, 'model' => $model,
'meta' => $meta,
'langs' => $langs,
]) ?> ]) ?>
</div> </div>
\ No newline at end of file
<?php <?php
namespace common\modules\blog\components; namespace common\modules\languages\components;
use Yii; use Yii;
use yii\base\Behavior; use yii\base\Behavior;
use yii\db\ActiveRecord; use yii\db\ActiveRecord;
use common\modules\blog\models\PostLang;
class PostLangBehavior extends Behavior use common\modules\languages\models\Languages;
class LanguageHelperBehavior extends Behavior
{ {
public $langs;
public $langClass;
public $field;
public $langField = 'lang_id';
public $actions;
public function events() public function events()
{ {
return [ return [
ActiveRecord::EVENT_INIT => 'eventInit',
ActiveRecord::EVENT_AFTER_FIND => 'eventFind',
ActiveRecord::EVENT_AFTER_UPDATE => 'Save', ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert', ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete', ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
]; ];
} }
private function getShotNameClass()
{
return (new \ReflectionClass($this->langClass))->getShortName();
}
public function eventInit($event)
{
if(in_array(Yii::$app->controller->action->id, $this->actions))
{
$langs = Languages::find()->all();
if($this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$field = $this->langField;
$lng = new $this->langClass;
$lng->$field = $lang->id;
$this->langs[$lang->id] = $lng;
}
}
}
}
public function eventFind($event)
{
if(in_array(Yii::$app->controller->action->id, $this->actions))
{
$langs = Languages::find()->all();
if(!$this->owner->isNewRecord)
{
foreach ($langs as $lang)
{
$lng = $this->owner->getLang($lang->id)->one();
if(!$lng)
{
$field = $this->langField;
$lng = new $this->langClass;
$lng->$field = $lang->id;
}
$this->langs[$lang->id] = $lng;
}
}
}
}
public function Save($event) public function Save($event)
{ {
$langs = Yii::$app->request->post('PostLang'); $langs = Yii::$app->request->post($this->getShotNameClass());
if ($langs) if ($langs)
{ {
foreach ($langs as $lang_id => $attributes) foreach ($langs as $lang_id => $attributes)
{ {
$lang = PostLang::find()->where([ $class = $this->langClass;
'post_id' => $this->owner->id,
'lang_id' => $lang_id, $lang = $class::find()->where([
$this->field => $this->owner->id,
$this->langField => $lang_id,
])->one(); ])->one();
if (!$lang) if (!$lang)
{ {
$lang = new PostLang; $lang = new $class;
} }
$attributes['post_id'] = $this->owner->id; $attributes[$this->field] = $this->owner->id;
$attributes['lang_id'] = $lang_id; $attributes[$this->langField] = $lang_id;
$lang->setAttributes( $attributes ); $lang->setAttributes( $attributes );
if(!$lang->save()) die(print_r($lang->errors)); if(!$lang->save()) die(print_r($lang->errors));
...@@ -47,15 +111,17 @@ class PostLangBehavior extends Behavior ...@@ -47,15 +111,17 @@ class PostLangBehavior extends Behavior
public function Insert($event) public function Insert($event)
{ {
$langs = Yii::$app->request->post('PostLang'); $langs = Yii::$app->request->post($this->getShotNameClass());
if ($langs) if ($langs)
{ {
foreach ($langs as $lang_id => $attributes) foreach ($langs as $lang_id => $attributes)
{ {
$lang = new PostLang; $class = $this->langClass;
$lang = new $class;
$attributes['post_id'] = $this->owner->id; $attributes[$this->field] = $this->owner->id;
$attributes['lang_id'] = $lang_id; $attributes[$this->langField] = $lang_id;
$lang->setAttributes($attributes); $lang->setAttributes($attributes);
$lang->save(false); $lang->save(false);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment