From 498b013324ae08b4ddb127e2dfae324dd4616bb1 Mon Sep 17 00:00:00 2001 From: Yarik Date: Fri, 18 Dec 2015 15:56:11 +0200 Subject: [PATCH] Добавлен виджет мультиязычности --- common/modules/blog/controllers/AjaxController.php | 8 ++++---- common/modules/blog/views/ajax/_article_form.php | 2 +- common/modules/blog/views/ajax/_category_form.php | 2 +- common/modules/blog/views/article/_form.php | 36 +++++++++--------------------------- common/modules/blog/views/category/_form.php | 33 +++++++-------------------------- common/widgets/Multilang.php | 45 +++++++++++++++++++++++++++++++++++++++++++++ common/widgets/views/multilang-begin.php | 29 +++++++++++++++++++++++++++++ common/widgets/views/multilang-end.php | 10 ++++++++++ frontend/web/js/option.js | 76 ++++++++++++++++++++++++++++++++++++++++------------------------------------ 9 files changed, 146 insertions(+), 95 deletions(-) create mode 100644 common/widgets/Multilang.php create mode 100644 common/widgets/views/multilang-begin.php create mode 100644 common/widgets/views/multilang-end.php diff --git a/common/modules/blog/controllers/AjaxController.php b/common/modules/blog/controllers/AjaxController.php index 5322aac..327cade 100644 --- a/common/modules/blog/controllers/AjaxController.php +++ b/common/modules/blog/controllers/AjaxController.php @@ -26,24 +26,24 @@ class AjaxController extends Controller return true; } - public function actionCategoryForm($lang_id) + public function actionCategoryForm($lang_id, $widget_id) { $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1, 'language_id' => $lang_id])->one(); if(!$model) { throw new NotFoundHttpException('Language not found'); } $category_lang = new ArticleCategoryLang(); - return $this->renderAjax('_category_form', ['model' => $model, 'category_lang' => $category_lang]); + return $this->renderAjax('_category_form', ['model' => $model, 'category_lang' => $category_lang, 'widget_id' => $widget_id]); } - public function actionArticleForm($lang_id) + public function actionArticleForm($lang_id, $widget_id) { $model = Language::find()->where(['>=', 'language_id', 1])->andWhere(['active' => 1, 'language_id' => $lang_id])->one(); if(!$model) { throw new NotFoundHttpException('Language not found'); } $article_lang = new ArticleLang(); - return $this->renderAjax('_article_form', ['model' => $model, 'article_lang' => $article_lang]); + return $this->renderAjax('_article_form', ['model' => $model, 'article_lang' => $article_lang, 'widget_id' => $widget_id]); } public function actionRemoveImage() diff --git a/common/modules/blog/views/ajax/_article_form.php b/common/modules/blog/views/ajax/_article_form.php index 6d69bc6..ecc3dbc 100644 --- a/common/modules/blog/views/ajax/_article_form.php +++ b/common/modules/blog/views/ajax/_article_form.php @@ -5,7 +5,7 @@ use mihaildev\ckeditor\CKEditor; $form = \yii\bootstrap\ActiveForm::begin(); ?> -
+
$article_lang, 'attribute' => "[$model->language_id]lang_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> diff --git a/common/modules/blog/views/ajax/_category_form.php b/common/modules/blog/views/ajax/_category_form.php index bad2d83..6b5caf1 100644 --- a/common/modules/blog/views/ajax/_category_form.php +++ b/common/modules/blog/views/ajax/_category_form.php @@ -5,7 +5,7 @@ use mihaildev\ckeditor\CKEditor; $form = \yii\bootstrap\ActiveForm::begin(); ?> -
+
$category_lang, 'attribute' => "[$model->language_id]lang_id"]))->label(false)->hiddenInput(['value' => $model->language_id]) ?> diff --git a/common/modules/blog/views/article/_form.php b/common/modules/blog/views/article/_form.php index eb236e1..8e2d776 100644 --- a/common/modules/blog/views/article/_form.php +++ b/common/modules/blog/views/article/_form.php @@ -1,5 +1,6 @@ - - -
- $article_lang) { - ?> -
+
+ field($article_langs[$index], "[$index]lang_id")->label(false)->hiddenInput(['value' => $index]) ?> field($article_langs[$index], "[$index]text")->widget(CKEditor::className(),['editorOptions' => [ 'preset' => 'full', 'inline' => false, ], ]); ?> @@ -135,7 +115,9 @@ $uploaddir = \Yii::getAlias('@saveImageDir'); $first = 0; } ?> -
+ end(); + ?>
isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $article->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> diff --git a/common/modules/blog/views/category/_form.php b/common/modules/blog/views/category/_form.php index 4e1e615..1248c8b 100644 --- a/common/modules/blog/views/category/_form.php +++ b/common/modules/blog/views/category/_form.php @@ -1,4 +1,5 @@ - - -
+ Url::to(['/blog/ajax/category-form']), 'form' => $form, 'data_langs' => $category_langs]) + ?> $category_lang) { @@ -130,7 +109,9 @@ $uploaddir = \Yii::getAlias('@saveImageDir'); $first = 0; } ?> -
+ end(); + ?>
isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $category->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?> diff --git a/common/widgets/Multilang.php b/common/widgets/Multilang.php new file mode 100644 index 0000000..98549ae --- /dev/null +++ b/common/widgets/Multilang.php @@ -0,0 +1,45 @@ +id)) { + $this->id = \Yii::$app->security->generateRandomString(8); + } + if(empty($this->langs)) { + $this->langs = Language::getActiveLanguages(); + } + if(empty($this->ajaxpath)) { + throw new InvalidParamException('ajaxpath must be set'); + } + if(empty($this->form)) { + throw new InvalidParamException('form must be set'); + } + ob_start(); + echo $this->render('multilang-begin', ['id' => $this->id, 'langs' => $this->langs, 'data_langs' => $this->data_langs, 'ajaxpath' => $this->ajaxpath, 'form' => $this->form]); + } + + public function run() + { + echo $this->render('multilang-end', ['id' => $this->id, 'langs' => $this->langs, 'data_langs' => $this->data_langs, 'ajaxpath' => $this->ajaxpath, 'form' => $this->form]); + $content = ob_get_clean(); + return $content; + } +} \ No newline at end of file diff --git a/common/widgets/views/multilang-begin.php b/common/widgets/views/multilang-begin.php new file mode 100644 index 0000000..dd098f4 --- /dev/null +++ b/common/widgets/views/multilang-begin.php @@ -0,0 +1,29 @@ + + + +
+ diff --git a/common/widgets/views/multilang-end.php b/common/widgets/views/multilang-end.php new file mode 100644 index 0000000..fdec4e6 --- /dev/null +++ b/common/widgets/views/multilang-end.php @@ -0,0 +1,10 @@ + +
+ \ No newline at end of file diff --git a/frontend/web/js/option.js b/frontend/web/js/option.js index 5a9b0ec..60ac1c3 100644 --- a/frontend/web/js/option.js +++ b/frontend/web/js/option.js @@ -36,42 +36,6 @@ $(function() { $(document).on('click', '.remove_lang', function() { $(this).parents('.form-wrapper').remove(); }); - if($('#lang-tabs li').length > 1) { - $('#lang-tabs li').append('') - } - $(document).on('click', '#lang-dropdown li a[data-lang]', function() { - var lang = $(this).data('lang'); - var flag = $(this).find('span').first().clone(); - var el = $(this); - $.get('/blog/ajax/category-form', { lang_id: lang }, function(data) { - $('#lang-tabs li').removeClass('active'); - $('#lang-tabs').append('
  • '+$('

    ').append($(flag)).html()+'

  • '); - $('.lang-tab-content .tab-pane.active').removeClass('active'); - $('.lang-tab-content').append($(data).find('.ajax-loaded').first()); - $('body').append($(data).filter('script')); - $(el).parent().remove(); - if(!$('#lang-dropdown li').length) { - $('#dropdownLang').addClass('disabled'); - } - if($('#lang-tabs li').length > 1) { - $('#lang-tabs li').append('') - } - }); - }); - $(document).on('click', '.remove-lang', function() { - var lang = $(this).parent().data('lang'); - var flag = $(this).parent().find('span.flag').first().clone(); - $('#lang-'+lang).remove(); - $('#lang-dropdown').append('
  • '+$('

    ').append($(flag)).html()+'

  • '); - $('#dropdownLang').removeClass('disabled'); - $(this).parent().remove(); - if($('#lang-tabs li').length <= 1) { - $('#lang-tabs li').find('.remove-lang').remove(); - } - if(!$('#lang-tabs>li.active').length) { - $('#lang-tabs>li').first().find('a').tab('show'); - } - }); $(document).on('change', '.image_inputs_field', function() { readURL(this); }); @@ -89,4 +53,44 @@ $(function() { } return false; }); + $.each($('.nav-tabs.f32'), function(key, value) { + if($(value).find('li').length > 1) { + $(value).find('li').append(''); + } + }); + $(document).on('click', '.dropdown-menu.f32 li a[data-lang]', function() { + var lang = $(this).data('lang'); + var flag = $(this).find('span').first().clone(); + var el = $(this); + var id = $(this).attr('href').substr(1); + $.get(form[id], { lang_id: lang, widget_id: id }, function(data) { + $('#'+id+'-tabs li').removeClass('active'); + $('#'+id+'-tabs').append('
  • '+$('

    ').append($(flag)).html()+'

  • '); + $('#tab-content-'+id+' .tab-pane.active').removeClass('active'); + $('#tab-content-'+id).append($(data).find('.ajax-loaded').first()); + $('body').append($(data).filter('script')); + $(el).parent().remove(); + if(!$('#lang-'+id+' li').length) { + $('#'+id+'Lang').addClass('disabled'); + } + if($('#'+id+'-tabs li').length > 1) { + $('#'+id+'-tabs li').append('') + } + }); + }); + $(document).on('click', '.remove-lang', function() { + var lang = $(this).parent().data('lang'); + var flag = $(this).parent().find('span.flag').first().clone(); + var id = $(this).parent().find('a[aria-controls]').first().attr('aria-controls').substr(0,8); + $('#'+id+'-'+lang).remove(); + $('#lang-'+id).append('
  • '+$('

    ').append($(flag)).html()+'

  • '); + $('#'+id+'Lang').removeClass('disabled'); + $(this).parent().remove(); + if($('#'+id+'-tabs li').length <= 1) { + $('#'+id+'-tabs li').find('.remove-lang').remove(); + } + if(!$('#'+id+'-tabs>li.active').length) { + $('#'+id+'-tabs>li').first().find('a').tab('show'); + } + }); }); \ No newline at end of file -- libgit2 0.21.4