рефакторинг

parent e65ad2ef
<?php
namespace common\components\activeRecordBehaviors;
use yii;
use Yii;
use yii\base\Behavior;
use yii\db\ActiveRecord;
use \common\models\MetaTags;
use common\modules\languages\models\Languages;
class MetaTagBehavior extends Behavior
{
public $meta;
public function events()
{
return [
ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
ActiveRecord::EVENT_BEFORE_DELETE => 'Delete',
ActiveRecord::EVENT_INIT => 'eventInit',
ActiveRecord::EVENT_AFTER_FIND => 'eventFind',
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');
if ($meta)
......@@ -46,7 +89,7 @@ class MetaTagBehavior extends Behavior
return true;
}
public function Insert($event)
public function eventInsert($event)
{
$meta = \Yii::$app->request->post('MetaTags');
if ($meta)
......@@ -67,7 +110,7 @@ class MetaTagBehavior extends Behavior
return true;
}
public function Delete($event)
public function eventDelete($event)
{
if($this->owner->metaTags)
{
......
......@@ -77,14 +77,6 @@ class PostAdminController extends AdminController
public function actionCreate()
{
$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)
{
......@@ -110,7 +102,6 @@ class PostAdminController extends AdminController
return $this->render('create', [
'model' => $model,
'langs' => $langs,
]);
}
......@@ -123,20 +114,6 @@ class PostAdminController extends AdminController
public function actionUpdate($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)
{
......@@ -162,7 +139,6 @@ class PostAdminController extends AdminController
return $this->render('update', [
'model' => $model,
'langs' => $langs,
]);
}
......
......@@ -7,6 +7,7 @@ use Yii;
use common\modules\languages\models\Languages;
use common\modules\blog\models\PostLang;
use common\modules\blog\models\PostTags;
use common\models\MetaTags;
/**
* This is the model class for table "posts".
......@@ -65,8 +66,14 @@ class Post extends \common\components\ActiveRecordModel
public function behaviors()
{
return [
'meta' => [
'class' => 'common\components\activeRecordBehaviors\MetaTagBehavior',
],
'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' => [
'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior',
......@@ -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
*/
......
......@@ -4,6 +4,7 @@ use yii\helpers\Html;
use yii\widgets\ActiveForm;
use common\modules\blog\models\Post;
use common\modules\content\widgets\MetaTagsWidget;
/* @var $this yii\web\View */
/* @var $model common\modules\blog\models\Post */
......@@ -39,13 +40,13 @@ use common\modules\blog\models\Post;
<?= $form->field($model, 'unlinkFile')->checkbox(); ?>
<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>
<?php endforeach; ?>
</ul>
<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; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$content->lang->url;?>">
......@@ -53,6 +54,11 @@ use common\modules\blog\models\Post;
<?= $form->field($content, '['.$lang_id.']text')->textArea() ?>
<?= MetaTagsWidget::widget([
'model' => $model->meta[$lang_id],
'form' => $form,
])?>
</div>
<?php endforeach; ?>
</div>
......
......@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs,
]) ?>
</div>
......@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = 'Update';
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs,
]) ?>
</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
*/
public function actionCreate()
{
$model = new CoBlocks;
$langs = [];
foreach (Languages::find()->all() as $lang)
{
$lng = new CoBlocksLang;
$lng->lang_id = $lang->id;
$langs[$lang->id] = $lng;
}
$model = new CoBlocks;
Yii::$app->controller->page_title = 'Добавить блок';
......@@ -118,7 +110,6 @@ class BlockAdminController extends AdminController
return $this->render('create', [
'model' => $model,
'langs' => $langs
]);
}
......@@ -130,22 +121,7 @@ class BlockAdminController extends AdminController
*/
public function actionUpdate($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;
}
$model = $this->findModel($id);
Yii::$app->controller->page_title = 'Редактировать блок';
......@@ -177,7 +153,6 @@ class BlockAdminController extends AdminController
return $this->render('update', [
'model' => $model,
'langs' => $langs
]);
}
......
......@@ -84,19 +84,6 @@ class ContentAdminController extends AdminController
public function actionCreate()
{
$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 = 'Добавить страницу';
......@@ -128,8 +115,6 @@ class ContentAdminController extends AdminController
return $this->render('create', [
'model' => $model,
'meta' => $meta,
'langs' => $langs
]);
}
......@@ -142,31 +127,6 @@ class ContentAdminController extends AdminController
public function actionUpdate($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 = 'Редактировать страницу';
......@@ -198,8 +158,6 @@ class ContentAdminController extends AdminController
return $this->render('update', [
'model' => $model,
'meta' => $meta,
'langs' => $langs,
]);
}
......
......@@ -40,8 +40,11 @@ class CoBlocks extends \common\components\ActiveRecordModel
{
return [
'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
'class' => 'common\components\activeRecordBehaviors\MetaTagBehavior',
],
'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' => [
'class' => 'common\components\activeRecordBehaviors\FileUploadBehavior',
......
......@@ -30,13 +30,13 @@ use common\modules\content\models\CoBlocks;
<?= $form->field($model, 'title')->textInput(['maxlength' => 250])->hint('Заголовок страницы виден пользователю сайта и как правило оформляется в тег &lt;h1&gt;. Если дизайном страницы не предусмотрен вывод заголовка, то он не будет выводиться даже если был введен в данное поле.') ?>
<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>
<?php endforeach; ?>
</ul>
<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; ?>
<div class="tab-pane fade <?=($c==1?'active in':'')?>" id="lang-<?=$block->lang->url;?>">
......
......@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs
]) ?>
</div>
......@@ -14,7 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'langs' => $langs
]) ?>
</div>
......@@ -53,7 +53,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
<?= $form->field($model, 'file')->fileInput() ?>
<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>
<?php endforeach; ?>
</ul>
......@@ -72,7 +72,7 @@ $blocks = \common\modules\content\models\CoBlocks::find()->all();
?>
<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; ?>
<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();
<?= $form->field($content, '['.$lang_id.']text')->textArea()->hint($block_hint) ?>
<?= MetaTagsWidget::widget([
'model' => $meta[$lang_id],
'model' => $model->meta[$lang_id],
'form' => $form,
])?>
......
......@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'meta' => $meta,
'langs' => $langs
]) ?>
</div>
......@@ -14,8 +14,6 @@ $this->params['breadcrumbs'][] = $this->title;
<?= $this->render('_form', [
'model' => $model,
'meta' => $meta,
'langs' => $langs,
]) ?>
</div>
\ No newline at end of file
<?php
namespace common\modules\blog\components;
namespace common\modules\languages\components;
use Yii;
use yii\base\Behavior;
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()
{
return [
ActiveRecord::EVENT_INIT => 'eventInit',
ActiveRecord::EVENT_AFTER_FIND => 'eventFind',
ActiveRecord::EVENT_AFTER_UPDATE => 'Save',
ActiveRecord::EVENT_AFTER_INSERT => 'Insert',
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)
{
$langs = Yii::$app->request->post('PostLang');
$langs = Yii::$app->request->post($this->getShotNameClass());
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = PostLang::find()->where([
'post_id' => $this->owner->id,
'lang_id' => $lang_id,
$class = $this->langClass;
$lang = $class::find()->where([
$this->field => $this->owner->id,
$this->langField => $lang_id,
])->one();
if (!$lang)
{
$lang = new PostLang;
$lang = new $class;
}
$attributes['post_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$attributes[$this->field] = $this->owner->id;
$attributes[$this->langField] = $lang_id;
$lang->setAttributes( $attributes );
if(!$lang->save()) die(print_r($lang->errors));
......@@ -47,15 +111,17 @@ class PostLangBehavior extends Behavior
public function Insert($event)
{
$langs = Yii::$app->request->post('PostLang');
$langs = Yii::$app->request->post($this->getShotNameClass());
if ($langs)
{
foreach ($langs as $lang_id => $attributes)
{
$lang = new PostLang;
$class = $this->langClass;
$lang = new $class;
$attributes['post_id'] = $this->owner->id;
$attributes['lang_id'] = $lang_id;
$attributes[$this->field] = $this->owner->id;
$attributes[$this->langField] = $lang_id;
$lang->setAttributes($attributes);
$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