Commit 69bd5fc6b421e994ffbcc9de27ea89689699248b

Authored by Yarik
1 parent 46bf80cf

Добавлены языки по новой технологии и опции

backend/config/bootstrap.php
1 1 <?php
  2 +Yii::setAlias('vendor', dirname(dirname(__DIR__)) . '/vendor');
2 3 \ No newline at end of file
... ...
backend/controllers/LanguageController.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\controllers;
  4 +
  5 +use Yii;
  6 +use backend\models\Language;
  7 +use backend\models\LanguageSearch;
  8 +use yii\web\Controller;
  9 +use yii\web\NotFoundHttpException;
  10 +use yii\filters\VerbFilter;
  11 +
  12 +/**
  13 + * LanguageController implements the CRUD actions for Language model.
  14 + */
  15 +class LanguageController extends Controller
  16 +{
  17 +
  18 + public function behaviors()
  19 + {
  20 + return [
  21 + 'verbs' => [
  22 + 'class' => VerbFilter::className(),
  23 + 'actions' => [
  24 + 'delete' => ['post'],
  25 + ],
  26 + ],
  27 + ];
  28 + }
  29 +
  30 + /**
  31 + * Lists all Language models.
  32 + * @return mixed
  33 + */
  34 + public function actionIndex()
  35 + {
  36 + $searchModel = new LanguageSearch();
  37 + $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  38 +
  39 + return $this->render('index', [
  40 + 'searchModel' => $searchModel,
  41 + 'dataProvider' => $dataProvider,
  42 + ]);
  43 + }
  44 +
  45 + /**
  46 + * Creates a new Language model.
  47 + * If creation is successful, the browser will be redirected to the 'view' page.
  48 + * @return mixed
  49 + */
  50 + public function actionCreate()
  51 + {
  52 + if(!empty(Yii::$app->request->get('id'))) {
  53 + $model = $this->findModel(Yii::$app->request->get('id'));
  54 + $model->active = 1;
  55 + $model->save();
  56 + return $this->redirect(['index']);
  57 + } else {
  58 + $searchModel = new LanguageSearch();
  59 + $dataProvider = $searchModel->searchNew(Yii::$app->request->queryParams);
  60 +
  61 + return $this->render('create', [
  62 + 'searchModel' => $searchModel,
  63 + 'dataProvider' => $dataProvider,
  64 + ]);
  65 + }
  66 + }
  67 +
  68 + /**
  69 + * Deletes an existing Language model.
  70 + * If deletion is successful, the browser will be redirected to the 'index' page.
  71 + * @param integer $id
  72 + * @return mixed
  73 + */
  74 + public function actionDelete($id)
  75 + {
  76 + $model = $this->findModel($id);
  77 + $model->active = 0;
  78 + $model->save();
  79 +
  80 + return $this->redirect(['index']);
  81 + }
  82 +
  83 + public function actionDefault($id)
  84 + {
  85 + $model = $this->findModel($id);
  86 + $models = Language::find()->where(['is_default' => 1])->all();
  87 + foreach($models as $onemodel) {
  88 + $onemodel->is_default = 0;
  89 + $onemodel->save();
  90 + }
  91 + $model->is_default = 1;
  92 + $model->save();
  93 + return $this->redirect(['index']);
  94 + }
  95 + /**
  96 + * Finds the Language model based on its primary key value.
  97 + * If the model is not found, a 404 HTTP exception will be thrown.
  98 + * @param integer $id
  99 + * @return Language the loaded model
  100 + * @throws NotFoundHttpException if the model cannot be found
  101 + */
  102 + protected function findModel($id)
  103 + {
  104 + if (($model = Language::findOne($id)) !== null) {
  105 + return $model;
  106 + } else {
  107 + throw new NotFoundHttpException('The requested page does not exist.');
  108 + }
  109 + }
  110 +}
... ...
backend/controllers/OptionController.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\controllers;
  4 +
  5 +use Yii;
  6 +use frontend\models\Option;
  7 +use frontend\models\OptionSearch;
  8 +use yii\web\Controller;
  9 +use yii\web\NotFoundHttpException;
  10 +use yii\filters\VerbFilter;
  11 +use frontend\models\OptionLang;
  12 +
  13 +/**
  14 + * OptionController implements the CRUD actions for Option model.
  15 + */
  16 +class OptionController extends Controller
  17 +{
  18 + public function behaviors()
  19 + {
  20 + return [
  21 + 'verbs' => [
  22 + 'class' => VerbFilter::className(),
  23 + 'actions' => [
  24 + 'delete' => ['post'],
  25 + ],
  26 + ],
  27 + ];
  28 + }
  29 +
  30 + /**
  31 + * Lists all Option models.
  32 + * @return mixed
  33 + */
  34 + public function actionIndex()
  35 + {
  36 + $searchModel = new OptionSearch();
  37 + $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
  38 +
  39 + return $this->render('index', [
  40 + 'searchModel' => $searchModel,
  41 + 'dataProvider' => $dataProvider,
  42 + ]);
  43 + }
  44 +
  45 + /**
  46 + * Displays a single Option model.
  47 + * @param integer $id
  48 + * @return mixed
  49 + */
  50 + public function actionView($id)
  51 + {
  52 + return $this->render('view', [
  53 + 'model' => $this->findModel($id),
  54 + ]);
  55 + }
  56 +
  57 + /**
  58 + * Creates a new Option model.
  59 + * If creation is successful, the browser will be redirected to the 'view' page.
  60 + * @return mixed
  61 + */
  62 + public function actionCreate()
  63 + {
  64 + $form[0] = Option::create(\Yii::$app->request->post(), 'User', 10, [['name' => 'phone', 'template' => 'text', 'translate' => true], ['name' => 'adres', 'template' => 'text', 'translate' => false]]);
  65 + if($form[0]['success'] == false) {
  66 + return $this->render('create', ['forms' => $form]);
  67 + } else {
  68 + return $this->redirect(['index']);
  69 + }
  70 + }
  71 +
  72 + /**
  73 + * Updates an existing Option model.
  74 + * If update is successful, the browser will be redirected to the 'view' page.
  75 + * @param integer $id
  76 + * @return mixed
  77 + */
  78 + public function actionUpdate($id)
  79 + {
  80 + $form[0] = Option::change($id, \Yii::$app->request->post(), 'User', 10);
  81 + if($form[0]['success'] == false) {
  82 + return $this->render('update', ['forms' => $form]);
  83 + } else {
  84 + return $this->redirect(['view', 'id' => $id]);
  85 + }
  86 + }
  87 +
  88 + /**
  89 + * Deletes an existing Option model.
  90 + * If deletion is successful, the browser will be redirected to the 'index' page.
  91 + * @param integer $id
  92 + * @return mixed
  93 + */
  94 + public function actionDelete($id)
  95 + {
  96 + $model = $this->findModel($id);
  97 + $children = $model->hasMany(Option::className(), ['parent_id' => 'option_id'])->all();
  98 + $langs = array();
  99 + if(!empty($children)) {
  100 + foreach($children as $child) {
  101 + $langs = OptionLang::findAll(['id' => $child->option_id]);
  102 + foreach($langs as $lang) {
  103 + $lang->delete();
  104 + }
  105 + $child->delete();
  106 + }
  107 + }
  108 + $langs = OptionLang::findAll(['id' => $id]);
  109 + foreach($langs as $lang) {
  110 + $lang->delete();
  111 + }
  112 + $model->delete();
  113 +
  114 + return $this->redirect(['index']);
  115 + }
  116 +
  117 + /**
  118 + * Finds the Option model based on its primary key value.
  119 + * If the model is not found, a 404 HTTP exception will be thrown.
  120 + * @param integer $id
  121 + * @return Option the loaded model
  122 + * @throws NotFoundHttpException if the model cannot be found
  123 + */
  124 + protected function findModel($id)
  125 + {
  126 + if (($model = Option::findOne($id)) !== null) {
  127 + return $model;
  128 + } else {
  129 + throw new NotFoundHttpException('The requested page does not exist.');
  130 + }
  131 + }
  132 +}
... ...
backend/models/Language.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use Yii;
  6 +
  7 +/**
  8 + * This is the model class for table "language".
  9 + *
  10 + * @property integer $language_id
  11 + * @property string $lang_code
  12 + * @property boolean $is_default
  13 + * @property string $language_name
  14 + * @property boolean $active
  15 + */
  16 +class Language extends \yii\db\ActiveRecord
  17 +{
  18 + /**
  19 + * @inheritdoc
  20 + */
  21 + public static function tableName()
  22 + {
  23 + return 'language';
  24 + }
  25 +
  26 + /**
  27 + * @inheritdoc
  28 + */
  29 + public function rules()
  30 + {
  31 + return [
  32 + [['lang_code', 'language_name'], 'required'],
  33 + [['is_default', 'active'], 'boolean'],
  34 + [['lang_code'], 'string', 'max' => 4],
  35 + [['language_name'], 'string', 'max' => 255]
  36 + ];
  37 + }
  38 +
  39 + /**
  40 + * @inheritdoc
  41 + */
  42 + public function attributeLabels()
  43 + {
  44 + return [
  45 + 'language_id' => Yii::t('app', 'Language ID'),
  46 + 'lang_code' => Yii::t('app', 'Lang Code'),
  47 + 'is_default' => Yii::t('app', 'Is Default'),
  48 + 'language_name' => Yii::t('app', 'Language Name'),
  49 + 'active' => Yii::t('app', 'Active'),
  50 + ];
  51 + }
  52 +}
... ...
backend/models/LanguageSearch.php 0 → 100644
  1 +<?php
  2 +
  3 +namespace backend\models;
  4 +
  5 +use Yii;
  6 +use yii\base\Model;
  7 +use yii\data\ActiveDataProvider;
  8 +use backend\models\Language;
  9 +
  10 +/**
  11 + * LanguageSearch represents the model behind the search form about `backend\models\Language`.
  12 + */
  13 +class LanguageSearch extends Language
  14 +{
  15 + /**
  16 + * @inheritdoc
  17 + */
  18 + public function rules()
  19 + {
  20 + return [
  21 + [['language_id'], 'integer'],
  22 + [['lang_code', 'language_name'], 'safe'],
  23 + [['is_default', 'active'], 'boolean'],
  24 + ];
  25 + }
  26 +
  27 + /**
  28 + * @inheritdoc
  29 + */
  30 + public function scenarios()
  31 + {
  32 + // bypass scenarios() implementation in the parent class
  33 + return Model::scenarios();
  34 + }
  35 +
  36 + /**
  37 + * Creates data provider instance with search query applied
  38 + *
  39 + * @param array $params
  40 + *
  41 + * @return ActiveDataProvider
  42 + */
  43 + public function search($params)
  44 + {
  45 + $query = Language::find();
  46 +
  47 + $dataProvider = new ActiveDataProvider([
  48 + 'query' => $query,
  49 + ]);
  50 +
  51 + $this->load($params);
  52 +
  53 + if (!$this->validate()) {
  54 + // uncomment the following line if you do not want to return any records when validation fails
  55 + // $query->where('0=1');
  56 + return $dataProvider;
  57 + }
  58 +
  59 + $query->andFilterWhere([
  60 + 'language_id' => $this->language_id,
  61 + 'is_default' => $this->is_default,
  62 + 'active' => $this->active,
  63 + ]);
  64 +
  65 + $query->andFilterWhere(['like', 'lang_code', $this->lang_code])
  66 + ->andFilterWhere(['like', 'language_name', $this->language_name])
  67 + ->andWhere(['active' => '1']);
  68 +
  69 + return $dataProvider;
  70 + }
  71 +
  72 + public function searchNew($params)
  73 + {
  74 + $query = Language::find();
  75 +
  76 + $dataProvider = new ActiveDataProvider([
  77 + 'query' => $query,
  78 + ]);
  79 +
  80 + $this->load($params);
  81 +
  82 + if (!$this->validate()) {
  83 + // uncomment the following line if you do not want to return any records when validation fails
  84 + // $query->where('0=1');
  85 + return $dataProvider;
  86 + }
  87 +
  88 + $query->andFilterWhere([
  89 + 'language_id' => $this->language_id,
  90 + 'is_default' => $this->is_default,
  91 + 'active' => $this->active,
  92 + ]);
  93 +
  94 + $query->andFilterWhere(['like', 'lang_code', $this->lang_code])
  95 + ->andFilterWhere(['like', 'language_name', $this->language_name])
  96 + ->andWhere(['active' => '0']);
  97 +
  98 + return $dataProvider;
  99 + }
  100 +}
... ...
backend/views/language/_search.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model backend\models\LanguageSearch */
  8 +/* @var $form yii\widgets\ActiveForm */
  9 +?>
  10 +
  11 +<div class="language-search">
  12 +
  13 + <?php $form = ActiveForm::begin([
  14 + 'action' => ['index'],
  15 + 'method' => 'get',
  16 + ]); ?>
  17 +
  18 + <?= $form->field($model, 'language_id') ?>
  19 +
  20 + <?= $form->field($model, 'lang_code') ?>
  21 +
  22 + <?= $form->field($model, 'is_default')->checkbox() ?>
  23 +
  24 + <?= $form->field($model, 'language_name') ?>
  25 +
  26 + <?= $form->field($model, 'active')->checkbox() ?>
  27 +
  28 + <div class="form-group">
  29 + <?= Html::submitButton(Yii::t('app', 'Search'), ['class' => 'btn btn-primary']) ?>
  30 + <?= Html::resetButton(Yii::t('app', 'Reset'), ['class' => 'btn btn-default']) ?>
  31 + </div>
  32 +
  33 + <?php ActiveForm::end(); ?>
  34 +
  35 +</div>
... ...
backend/views/language/create.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\grid\GridView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $searchModel backend\models\LanguageSearch */
  8 +/* @var $dataProvider yii\data\ActiveDataProvider */
  9 +
  10 +$this->title = Yii::t('app', 'Languages');
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +echo $this->render('layout');
  13 +?>
  14 +<div class="lang-column-2">
  15 +
  16 + <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
  17 +
  18 + <?= GridView::widget([
  19 + 'dataProvider' => $dataProvider,
  20 + 'filterModel' => $searchModel,
  21 + 'layout' => "{items}",
  22 + 'columns' => [
  23 + 'language_name',
  24 + 'lang_code',
  25 + [
  26 + 'class' => 'yii\grid\ActionColumn',
  27 + 'template' => '{create}',
  28 + 'buttons' => [
  29 + 'create' => function ($url, $model, $key) {
  30 + return Html::a('', $url, ['class' => 'glyphicon glyphicon-plus', 'title' => Yii::t('app', 'Create Language')]);
  31 + },
  32 + ],
  33 + ]
  34 + ]
  35 + ]); ?>
  36 +
  37 + <p class="text-right">
  38 + <?= Html::a(Yii::t('app', 'Cancel'), ['index'], ['class' => 'btn btn-success']) ?>
  39 + </p>
  40 +
  41 +</div>
... ...
backend/views/language/index.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\grid\GridView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $searchModel backend\models\LanguageSearch */
  8 +/* @var $dataProvider yii\data\ActiveDataProvider */
  9 +
  10 +$this->title = Yii::t('app', 'Languages');
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +echo $this->render('layout');
  13 +?>
  14 +<div class="lang-column-2">
  15 +
  16 + <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
  17 +
  18 + <?= GridView::widget([
  19 + 'dataProvider' => $dataProvider,
  20 + 'filterModel' => $searchModel,
  21 + 'layout' => "{items}",
  22 + 'columns' => [
  23 + 'language_name',
  24 + 'lang_code',
  25 + 'is_default:boolean',
  26 + [
  27 + 'class' => 'yii\grid\ActionColumn',
  28 + 'template' => '{default} {delete}',
  29 + 'buttons' => [
  30 + 'default' => function ($url, $model, $key) {
  31 + return Html::a('', $model->is_default?'#':$url, ['class' => $model->is_default?'glyphicon glyphicon-star':'glyphicon glyphicon-star-empty', 'title' => Yii::t('app', 'Make default')]);
  32 + },
  33 + ],
  34 + ]
  35 + ]
  36 + ]); ?>
  37 +
  38 + <p class="text-right">
  39 + <?= Html::a(Yii::t('app', 'Create Language'), ['create'], ['class' => 'btn btn-success']) ?>
  40 + </p>
  41 +
  42 +</div>
... ...
backend/views/language/layout.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\grid\GridView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $searchModel backend\models\LanguageSearch */
  8 +/* @var $dataProvider yii\data\ActiveDataProvider */
  9 +$this->registerCssFile('/backend/web/css/language.css');
  10 +$this->registerJsFile('/backend/web/js/language.js', ['depends' => ['yii\web\JqueryAsset'], 'position' => $this::POS_END]);
  11 +$this->title = Yii::t('app', 'Settings');
  12 +$this->params['breadcrumbs'][] = $this->title;
  13 +?>
  14 + <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
  15 + <div class="lang-column-1">
  16 + <h1><?= Html::encode($this->title) ?></h1>
  17 + <ul class="settings_menu sidebar-menu">
  18 + <li>
  19 + <a href="#collapseLanguages" data-toggle="collapse" aria-expanded="false" aria-controls="collapseLanguages"><?php echo \Yii::t('app', 'languages');?></a>
  20 + <ul class="collapse settings_menu_inner" id="collapseLanguages">
  21 + <li>
  22 + <?= Html::a(Yii::t('app', 'Language list'), ['index']) ?>
  23 + </li>
  24 + <li>
  25 + <a href="#collapseLanguagesStaticFront" data-toggle="collapse" aria-expanded="false" aria-controls="collapseLanguagesStaticFront"><?php echo \Yii::t('app', 'languages_static_front');?></a>
  26 + </li>
  27 + <li>
  28 + <a href="#collapseLanguagesStaticAdmin" data-toggle="collapse" aria-expanded="false" aria-controls="collapseLanguagesStaticAdmin"><?php echo \Yii::t('app', 'languages_static_admin');?></a>
  29 + </li>
  30 + </ul>
  31 + </li>
  32 + <li>
  33 + <a href="#collapseRoles" data-toggle="collapse" aria-expanded="false" aria-controls="collapseRoles"><?php echo \Yii::t('app', 'roles');?></a>
  34 + <ul class="collapse settings_menu_inner" id="collapseRoles">
  35 + <li>Ipsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum Ipsum</li>
  36 + <li>Ipsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum IpsumIpsum Ipsum</li>
  37 + </ul>
  38 + </li>
  39 + </ul>
  40 + </div>
... ...
backend/views/language/update.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +
  5 +/* @var $this yii\web\View */
  6 +/* @var $model backend\models\Language */
  7 +
  8 +$this->title = Yii::t('app', 'Update {modelClass}: ', [
  9 + 'modelClass' => 'Language',
  10 +]) . ' ' . $model->language_id;
  11 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Languages'), 'url' => ['index']];
  12 +$this->params['breadcrumbs'][] = ['label' => $model->language_id, 'url' => ['view', 'id' => $model->language_id]];
  13 +$this->params['breadcrumbs'][] = Yii::t('app', 'Update');
  14 +?>
  15 +<div class="language-update">
  16 +
  17 + <h1><?= Html::encode($this->title) ?></h1>
  18 +
  19 + <?= $this->render('_form', [
  20 + 'model' => $model,
  21 + ]) ?>
  22 +
  23 +</div>
... ...
backend/views/language/view.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\DetailView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model backend\models\Language */
  8 +
  9 +$this->title = $model->language_id;
  10 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Languages'), 'url' => ['index']];
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +<div class="language-view">
  14 +
  15 + <h1><?= Html::encode($this->title) ?></h1>
  16 +
  17 + <p>
  18 + <?= Html::a(Yii::t('app', 'Update'), ['update', 'id' => $model->language_id], ['class' => 'btn btn-primary']) ?>
  19 + <?= Html::a(Yii::t('app', 'Delete'), ['delete', 'id' => $model->language_id], [
  20 + 'class' => 'btn btn-danger',
  21 + 'data' => [
  22 + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'),
  23 + 'method' => 'post',
  24 + ],
  25 + ]) ?>
  26 + </p>
  27 +
  28 + <?= DetailView::widget([
  29 + 'model' => $model,
  30 + 'attributes' => [
  31 + 'language_id',
  32 + 'lang_code',
  33 + 'is_default:boolean',
  34 + 'language_name',
  35 + 'active:boolean',
  36 + ],
  37 + ]) ?>
  38 +
  39 +</div>
... ...
backend/views/option/_form.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model frontend\models\Option */
  8 +/* @var $form yii\widgets\ActiveForm */
  9 +?>
  10 +
  11 +<div class="option-form">
  12 + <?php $form = ActiveForm::begin(); ?>
  13 + <input type="hidden" name="Option[model]" value="<?=$modeldb?>"/>
  14 + <input type="hidden" name="Option[model_id]" value="<?=$model_id?>"/>
  15 + <p class="text-right"><span class="glyphicon glyphicon-plus add_row"></span></p>
  16 + <?php if(empty($models)) {
  17 + ?>
  18 + <div class="form-group" id="main_row">
  19 + <?php foreach($fields as $index => $field) {
  20 + ?>
  21 + <div class="fields_block">
  22 + <label for="Option[0][<?=$field['name']?>]"><?php echo Yii::t('app', $field['name']); ?></label>
  23 + <?php
  24 + if($field['translate']) { ?><p class="text-right"><span class="glyphicon glyphicon-globe add_lang"></span></p><?php }
  25 + ?>
  26 + <input type="hidden" name="Option[0][<?=$field['name']?>][template]" value="<?=$field['template']?>"/>
  27 + <input type="hidden" name="Option[0][<?=$field['name']?>][translate]" value="<?=$field['translate']?>"/>
  28 + <input type="<?=$field['template']?>" name="Option[0][value][<?=$field['name']?>]" class="form-control required main_input" required/>
  29 + <?php
  30 + if($field['translate']) {
  31 + ?>
  32 + <div class="lang_inputs" style="display: none">
  33 + <?php
  34 + foreach($model->getLangs() as $lang) {
  35 + ?>
  36 + <div class="form-group">
  37 + <div class="col-xs-1"><?=$lang['lang_code']?></div>
  38 + <div class="col-xs-11"><input type="<?=$field['template']?>" name="Option[0][lang][<?=$field['name']?>][<?=$lang['language_id']?>]" class="form-control" /></div>
  39 + <div class="clearfix"></div>
  40 + </div>
  41 + <?php
  42 + }
  43 + ?>
  44 + </div>
  45 + <?php
  46 + }
  47 + ?>
  48 + </div>
  49 + <?php
  50 + }?>
  51 + </div>
  52 + <?php
  53 + } else {
  54 + $first = 1;
  55 + foreach($models as $index => $row) {
  56 + foreach($row as $key => $value) {
  57 + if(!$modellang[$index][$key][0]->hasErrors('value')) {
  58 + continue;
  59 + }
  60 + if($first) {
  61 + ?>
  62 + <div class="form-group" id="main_row">
  63 + <?php
  64 + }
  65 + ?>
  66 + <div class="fields_block">
  67 + <label for="Option[0][<?=$key?>]"><?php echo Yii::t('app', $key); ?></label>
  68 + <input type="hidden" name="Option[0][template]" value="<?=$value->template?>"/>
  69 + <input type="<?=$value->template?>" name="Option[0][value][<?=$key?>]" class="form-control required main_input" required value="<?=$modellang[$index][$key][0]->value?>"/>
  70 + <div class="help-block"><?=$modellang[$index][$key][0]->getFirstError('value')?></div>
  71 + <?php
  72 + if($field['translate']) {
  73 + ?>
  74 + <div class="lang_inputs">
  75 + <?php
  76 + foreach($value->getLangs() as $lang) {
  77 + ?>
  78 + <div class="form-group">
  79 + <div class="col-xs-1"><?=$lang['lang_code']?></div>
  80 + <div class="col-xs-11"><input type="<?=$value->template?>" name="Option[0][lang][<?=$key?>][<?=$lang['language_id']?>]" class="form-control" value="<?=$modellang[$index][$key][$lang['language_id']]->value?>"/></div>
  81 + </div>
  82 + <?php
  83 + }
  84 + ?>
  85 + </div>
  86 + <?php
  87 + } ?>
  88 + </div>
  89 + <?php
  90 + if($first) {
  91 + ?>
  92 + </div>
  93 + <?php
  94 + $first = 0;
  95 + }
  96 + }
  97 + }
  98 + }?>
  99 +
  100 + <div class="form-group">
  101 + <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
  102 + </div>
  103 +
  104 + <?php ActiveForm::end(); ?>
  105 + <script>
  106 + $(function() {
  107 + var counter = 0;
  108 + $(document).on('click', '.add_row', function() {
  109 + counter++;
  110 + var clone = $('#main_row').clone().html().replace(new RegExp("Option\\[0\\]", 'g'), "Option["+counter+"]");
  111 + $(clone).appendTo('#<?=$form->getId()?>');
  112 + $('#<?=$form->getId()?> button[type=submit]').parent().appendTo('#<?=$form->getId()?>');
  113 + });
  114 + $(document).on('click', '.add_lang', function() {
  115 + var field_block = $(this).parent().parent();
  116 + if($(this).hasClass('active')) {
  117 + $(field_block).find('.main_input').attr('required', '').show();
  118 + $(field_block).find('.lang_inputs').hide();
  119 + $(this).removeClass('active');
  120 + } else {
  121 + $(field_block).find('.main_input').removeAttr('required').hide();
  122 + $(field_block).find('.lang_inputs').show();
  123 + $(this).addClass('active');
  124 + }
  125 + });
  126 + });
  127 + </script>
  128 +</div>
... ...
backend/views/option/_form_edit.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model frontend\models\Option */
  8 +/* @var $form yii\widgets\ActiveForm */
  9 +?>
  10 +
  11 +<div class="option-form">
  12 + <?php $form = ActiveForm::begin(); ?>
  13 + <input type="hidden" name="Option[model]" value="<?=$modeldb?>"/>
  14 + <input type="hidden" name="Option[model_id]" value="<?=$model_id?>"/>
  15 + <?php foreach($models as $id => $row) {
  16 + ?>
  17 + <label for="Option[<?=$id?>][<?=$key?>]"><?php echo Yii::t('app', $key); ?></label>
  18 + <input type="hidden" name="Option[<?=$id?>][id]" value="<?=$id?>" />
  19 + <input type="hidden" name="Option[<?=$id?>][template]" value="<?=$row->template?>"/>
  20 + <input type="<?=$row->template?>" name="Option[<?=$id?>][value][<?=$row->name?>]" class="form-control required" required value="<?=$modellang[$id][0]->value?>"/>
  21 + <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?>
  22 + <?php
  23 + if($row->translate) {
  24 + foreach($row->getLangs() as $lang_id => $lang) {
  25 + ?>
  26 + <div class="form-group">
  27 + <div class="col-xs-1"><?=$lang['lang_code']?></div>
  28 + <div class="col-xs-11"><input type="<?=$row->template?>" name="Option[<?=$id?>][lang][<?=$lang['language_id']?>]" class="form-control" value="<?=$modellang[$id][$lang['language_id']]->value?>"/></div>
  29 + </div>
  30 + <?php
  31 + }
  32 + }
  33 +
  34 + }?>
  35 +
  36 + <div class="form-group">
  37 + <?= Html::submitButton($model->isNewRecord ? Yii::t('app', 'Create') : Yii::t('app', 'Update'), ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
  38 + </div>
  39 +
  40 + <?php ActiveForm::end(); ?>
  41 +</div>
... ...
backend/views/option/_search.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\ActiveForm;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model frontend\models\OptionSearch */
  8 +/* @var $form yii\widgets\ActiveForm */
  9 +?>
  10 +
  11 +<div class="option-search">
  12 +
  13 + <?php $form = ActiveForm::begin([
  14 + 'action' => ['index'],
  15 + 'method' => 'get',
  16 + ]); ?>
  17 +
  18 + <?= $form->field($model, 'option_id') ?>
  19 +
  20 + <?= $form->field($model, 'model') ?>
  21 +
  22 + <?= $form->field($model, 'model_id') ?>
  23 +
  24 + <?= $form->field($model, 'name') ?>
  25 +
  26 + <?= $form->field($model, 'template') ?>
  27 +
  28 + <?php // echo $form->field($model, 'parent_id') ?>
  29 +
  30 + <div class="form-group">
  31 + <?= Html::submitButton(Yii::t('app', 'Search'), ['class' => 'btn btn-primary']) ?>
  32 + <?= Html::resetButton(Yii::t('app', 'Reset'), ['class' => 'btn btn-default']) ?>
  33 + </div>
  34 +
  35 + <?php ActiveForm::end(); ?>
  36 +
  37 +</div>
... ...
backend/views/option/create.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model frontend\models\Option */
  8 +
  9 +$this->title = Yii::t('app', 'Create Option');
  10 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Options'), 'url' => ['index']];
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +<div class="option-create">
  14 + <h1><?= Html::encode($this->title) ?></h1>
  15 + <?php foreach($forms as $oneform) {
  16 + echo $this->render('_form', $oneform);
  17 + }?>
  18 +
  19 +</div>
... ...
backend/views/option/index.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\grid\GridView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $searchModel frontend\models\OptionSearch */
  8 +/* @var $dataProvider yii\data\ActiveDataProvider */
  9 +
  10 +$this->title = Yii::t('app', 'Options');
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +<div class="col-xs-6">
  14 + <div class="option-index">
  15 +
  16 + <h1><?= Html::encode($this->title) ?></h1>
  17 + <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
  18 +
  19 + <p>
  20 + <?= Html::a(Yii::t('app', 'Create Option'), ['create'], ['class' => 'btn btn-success']) ?>
  21 + </p>
  22 +
  23 + <?= GridView::widget([
  24 + 'dataProvider' => $dataProvider,
  25 + 'filterModel' => $searchModel,
  26 + 'columns' => [
  27 + ['class' => 'yii\grid\SerialColumn'],
  28 +
  29 + 'option_id',
  30 + 'model',
  31 + 'model_id',
  32 + 'name',
  33 + 'template',
  34 + // 'parent_id',
  35 +
  36 + ['class' => 'yii\grid\ActionColumn'],
  37 + ],
  38 + ]); ?>
  39 +
  40 + </div>
  41 +</div>
  42 +<div class="col-xs-6">
  43 + <div class="option-index">
  44 +
  45 + <h1><?= Html::encode($this->title) ?></h1>
  46 + <?php // echo $this->render('_search', ['model' => $searchModel]); ?>
  47 +
  48 + <p>
  49 + <?= Html::a(Yii::t('app', 'Create Option'), ['create'], ['class' => 'btn btn-success']) ?>
  50 + </p>
  51 +
  52 + <?= GridView::widget([
  53 + 'dataProvider' => $dataProvider,
  54 + 'filterModel' => $searchModel,
  55 + 'columns' => [
  56 + ['class' => 'yii\grid\SerialColumn'],
  57 +
  58 + 'option_id',
  59 + 'model',
  60 + 'model_id',
  61 + 'name',
  62 + 'template',
  63 + // 'parent_id',
  64 +
  65 + ['class' => 'yii\grid\ActionColumn'],
  66 + ],
  67 + ]); ?>
  68 +
  69 + </div>
  70 +</div>
  71 +<div class="clearfix"></div>
0 72 \ No newline at end of file
... ...
backend/views/option/update.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +
  5 +/* @var $this yii\web\View */
  6 +/* @var $model frontend\models\Option */
  7 +
  8 +$this->title = Yii::t('app', 'Update {modelClass}: ', [
  9 + 'modelClass' => 'Option',
  10 +]) . ' ' . $forms[0]['models'][\Yii::$app->request->get('id')]->name;
  11 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Options'), 'url' => ['index']];
  12 +$this->params['breadcrumbs'][] = ['label' => $forms[0]['models'][\Yii::$app->request->get('id')]->name, 'url' => ['view', 'id' => $forms[0]['models'][\Yii::$app->request->get('id')]->option_id]];
  13 +$this->params['breadcrumbs'][] = Yii::t('app', 'Update');
  14 +?>
  15 +<div class="option-update">
  16 + <h1><?= Html::encode($this->title) ?></h1>
  17 + <?php foreach($forms as $oneform) {
  18 + echo $this->render('_form_edit', $oneform);
  19 + }?>
  20 +
  21 +</div>
... ...
backend/views/option/view.php 0 → 100644
  1 +<?php
  2 +
  3 +use yii\helpers\Html;
  4 +use yii\widgets\DetailView;
  5 +
  6 +/* @var $this yii\web\View */
  7 +/* @var $model frontend\models\Option */
  8 +
  9 +$this->title = $model->name;
  10 +$this->params['breadcrumbs'][] = ['label' => Yii::t('app', 'Options'), 'url' => ['index']];
  11 +$this->params['breadcrumbs'][] = $this->title;
  12 +?>
  13 +<div class="option-view">
  14 +
  15 + <h1><?= Html::encode($this->title) ?></h1>
  16 +
  17 + <p>
  18 + <?= Html::a(Yii::t('app', 'Update'), ['update', 'id' => $model->option_id], ['class' => 'btn btn-primary']) ?>
  19 + <?= Html::a(Yii::t('app', 'Delete'), ['delete', 'id' => $model->option_id], [
  20 + 'class' => 'btn btn-danger',
  21 + 'data' => [
  22 + 'confirm' => Yii::t('app', 'Are you sure you want to delete this item?'),
  23 + 'method' => 'post',
  24 + ],
  25 + ]) ?>
  26 + </p>
  27 +
  28 + <?= DetailView::widget([
  29 + 'model' => $model,
  30 + 'attributes' => [
  31 + 'option_id',
  32 + 'model',
  33 + 'model_id',
  34 + 'name',
  35 + 'template',
  36 + 'parent_id',
  37 + ],
  38 + ]) ?>
  39 +
  40 +</div>
... ...
backend/web/css/language.css 0 → 100644
  1 +section.content-header {
  2 + display: none;
  3 +}
  4 +section.content {
  5 + height: 100%;
  6 + padding: 0;
  7 +}
  8 +.content-wrapper {
  9 + background: #444444 !important;
  10 + position: absolute;
  11 + top: 50px;
  12 + height: calc(100% - 50px);
  13 + left:0;
  14 + width: calc(100% - 230px);
  15 +}
  16 +footer.main-footer {
  17 + position: absolute;
  18 + width: 100%;
  19 + bottom: 0;
  20 + left: 0;
  21 +}
  22 +footer.main-footer div.pull-right.hidden-xs {
  23 + margin-right: 230px;
  24 +}
  25 +.lang-column-1 {
  26 + float: left;
  27 + width: 50%;
  28 + height: 100%;
  29 + overflow: auto;
  30 +}
  31 +.lang-column-1 h1 {
  32 + text-align: center;
  33 + color: #ecf0f5;
  34 +}
  35 +.lang-column-2 {
  36 + background: #ecf0f5;
  37 + padding: 50px 10px 0 10px;
  38 + width: 50%;
  39 + height: 100%;
  40 + display:inline-block;
  41 +}
  42 +.settings_menu {
  43 + color: #ecf0f5;
  44 + white-space: normal !important;
  45 +}
  46 +.settings_menu a {
  47 + color: #ecf0f5;
  48 +}
  49 +.settings_menu a:focus {
  50 + color: #ecf0f5;
  51 +}
  52 +.settings_menu_inner {
  53 + list-style: none;
  54 + padding-left: 20px;
  55 + background: #2c3b41;
  56 +}
  57 +.settings_menu_inner li {
  58 + color: #8aa4af;
  59 + padding: 5px 0;
  60 +}
  61 +.settings_menu_inner li .grid-view {
  62 + background: #ecf0f5;
  63 + margin-right: 10px;
  64 + padding: 5px;
  65 + color: #8aa4af !important;
  66 +}
  67 +.settings_menu_inner li .grid-view a:hover, .settings_menu_inner li .grid-view a:focus {
  68 + color: #3C8DBC;
  69 +}
  70 +.settings_menu_inner li:hover {
  71 + color: #ecf0f5;
  72 + padding: 5px 0;
  73 +}
  74 +.settings_menu_inner li:focus {
  75 + color: #ecf0f5;
  76 + padding: 5px 0;
  77 +}
  78 +.settings_menu_inner li a {
  79 + color: #8aa4af;
  80 +}
  81 +.settings_menu_inner li a:hover {
  82 + color: #ecf0f5;
  83 +}
  84 +.settings_menu_inner li a:focus {
  85 + color: #ecf0f5;
  86 +}
  87 +.settings_menu_inner li a.glyphicon {
  88 + padding-left: 15px;
  89 +}
0 90 \ No newline at end of file
... ...
backend/web/js/language.js 0 → 100644
  1 +$(function() {
  2 + $(document).on('click', '.settings_menu>li>a', function() {
  3 + console.log('event');
  4 + $(this).parent().toggleClass('active');
  5 + });
  6 +});
0 7 \ No newline at end of file
... ...
common/config/main.php
... ... @@ -27,9 +27,9 @@ return [
27 27 ],
28 28 'i18n' => [
29 29 'translations' => [
30   - '*' => [
  30 + 'app*' => [
31 31 'class' => 'yii\i18n\PhpMessageSource',
32   - 'basePath' => $_SERVER['DOCUMENT_ROOT'].'/common/translation',
  32 + 'basePath' => '@common/translation',
33 33 'fileMap' => [
34 34 'app' => 'app.php',
35 35 'app/error' => 'error.php',
... ... @@ -41,4 +41,5 @@ return [
41 41 'class' => 'yii\rbac\DbManager',
42 42 ],
43 43 ],
  44 + 'language' => 'ru-RU'
44 45 ];
... ...
common/translation/ru/app.php 0 → 100644
  1 +<?php
  2 +return [
  3 + 'Create' => 'Добавить',
  4 + 'Settings' => 'Настройки',
  5 + 'languages' => 'Языки',
  6 + 'Languages' => 'Языки',
  7 + 'Language list' => 'Список языков',
  8 + 'roles' => 'Роли',
  9 + 'Create Language' => 'Добавить язык',
  10 + 'Cancel' => 'Отмена'
  11 +];
0 12 \ No newline at end of file
... ...
frontend/controllers/OptionController.php
... ... @@ -61,7 +61,7 @@ class OptionController extends Controller
61 61 */
62 62 public function actionCreate()
63 63 {
64   - $form[0] = Option::create(\Yii::$app->request->post(), 'User', 10, [['name' => 'phone', 'template' => 'text'], ['name' => 'adres', 'template' => 'text']]);
  64 + $form[0] = Option::create(\Yii::$app->request->post(), 'User', 10, [['name' => 'phone', 'template' => 'text', 'translate' => true], ['name' => 'adres', 'template' => 'text', 'translate' => false]]);
65 65 if($form[0]['success'] == false) {
66 66 return $this->render('create', ['forms' => $form]);
67 67 } else {
... ...
frontend/models/Option.php
... ... @@ -73,21 +73,33 @@ class Option extends \yii\db\ActiveRecord
73 73 if(!empty($post)) {
74 74 foreach($post['Option'] as $key => $option) {
75 75 if(in_array($key, array('model', 'model_id'))) { continue; }
  76 + if(empty($option['value'][$models[$key]->name]) && !empty($option['lang'])) {
  77 + foreach($option['lang'] as $lang_id => $lang) {
  78 + if(!empty($lang)) {
  79 + $option['value'][$models[$key]->name] = $lang;
  80 + break;
  81 + }
  82 + }
  83 + }
76 84 $modellang[$key][0]->value = $option['value'][$models[$key]->name];
77   - if(!$modellang[$key][0]->save()) {
  85 + if(empty($modellang[$key][0]->value) || !$modellang[$key][0]->save()) {
78 86 $ok = 0;
  87 + $models[$key]->addError('value', 'Value must be set');
  88 + $modellang[$key][0]->addError('value', 'Value must be set');
79 89 }
80   - foreach($option['lang'] as $lang_id => $lang) {
81   - if(empty($modellang[$key][$lang_id])) {
82   - $modellang[$key][$lang_id] = new OptionLang();
83   - $modellang[$key][$lang_id]->id = $models[$key]->option_id;
84   - $modellang[$key][$lang_id]->lang_id = $lang_id;
85   - $modellang[$key][$lang_id]->value = $lang;
86   - } else {
87   - $modellang[$key][$lang_id]->value = $lang;
88   - }
89   - if(!$modellang[$key][$lang_id]->save()) {
90   - $ok = 0;
  90 + if(!empty($option['lang'])) {
  91 + foreach($option['lang'] as $lang_id => $lang) {
  92 + if(empty($modellang[$key][$lang_id])) {
  93 + $modellang[$key][$lang_id] = new OptionLang();
  94 + $modellang[$key][$lang_id]->id = $models[$key]->option_id;
  95 + $modellang[$key][$lang_id]->lang_id = $lang_id;
  96 + $modellang[$key][$lang_id]->value = $lang;
  97 + } else {
  98 + $modellang[$key][$lang_id]->value = $lang;
  99 + }
  100 + if(!$modellang[$key][$lang_id]->save()) {
  101 + $ok = 0;
  102 + }
91 103 }
92 104 }
93 105 }
... ... @@ -125,12 +137,21 @@ class Option extends \yii\db\ActiveRecord
125 137 $models[$index][$key] = new Option();
126 138 $models[$index][$key]->model = $post['Option']['model'];
127 139 $models[$index][$key]->model_id = $post['Option']['model_id'];
128   - $models[$index][$key]->template = $option['template'];
  140 + $models[$index][$key]->template = $option[$key]['template'];
  141 + $models[$index][$key]->translate = $option[$key]['translate']?1:0;
129 142 $models[$index][$key]->name = $key;
130 143 if(!$first) {
131 144 $models[$index][$key]->parent_id = $parentid;
132 145 }
133 146 $modelslang[$index][$key][0] = new OptionLang();
  147 + if(!empty($option['lang'][$key])) {
  148 + foreach($option['lang'][$key] as $code => $lang) {
  149 + if(!empty($lang)) {
  150 + $value = $lang;
  151 + break;
  152 + }
  153 + }
  154 + }
134 155 if(!empty($value) && $models[$index][$key]->save()) {
135 156 if($first) {
136 157 $parentid = $models[$index][$key]->option_id;
... ...
frontend/views/option/_form.php
... ... @@ -16,20 +16,37 @@ use yii\widgets\ActiveForm;
16 16 <?php if(empty($models)) {
17 17 ?>
18 18 <div class="form-group" id="main_row">
19   - <?php foreach($fields as $field) {
  19 + <?php foreach($fields as $index => $field) {
20 20 ?>
  21 + <div class="fields_block">
21 22 <label for="Option[0][<?=$field['name']?>]"><?php echo Yii::t('app', $field['name']); ?></label>
22   - <input type="hidden" name="Option[0][template]" value="<?=$field['template']?>"/>
23   - <input type="<?=$field['template']?>" name="Option[0][value][<?=$field['name']?>]" class="form-control required" required/>
  23 + <?php
  24 + if($field['translate']) { ?><p class="text-right"><span class="glyphicon glyphicon-globe add_lang"></span></p><?php }
  25 + ?>
  26 + <input type="hidden" name="Option[0][<?=$field['name']?>][template]" value="<?=$field['template']?>"/>
  27 + <input type="hidden" name="Option[0][<?=$field['name']?>][translate]" value="<?=$field['translate']?>"/>
  28 + <input type="<?=$field['template']?>" name="Option[0][value][<?=$field['name']?>]" class="form-control required main_input" required/>
24 29 <?php
25   - foreach($model->getLangs() as $lang) {
  30 + if($field['translate']) {
  31 + ?>
  32 + <div class="lang_inputs" style="display: none">
  33 + <?php
  34 + foreach($model->getLangs() as $lang) {
  35 + ?>
  36 + <div class="form-group">
  37 + <div class="col-xs-1"><?=$lang['lang_code']?></div>
  38 + <div class="col-xs-11"><input type="<?=$field['template']?>" name="Option[0][lang][<?=$field['name']?>][<?=$lang['language_id']?>]" class="form-control" /></div>
  39 + <div class="clearfix"></div>
  40 + </div>
  41 + <?php
  42 + }
26 43 ?>
27   - <div class="form-group">
28   - <div class="col-xs-1"><?=$lang['lang_code']?></div>
29   - <div class="col-xs-11"><input type="<?=$field['template']?>" name="Option[0][lang][<?=$field['name']?>][<?=$lang['language_id']?>]" class="form-control" /></div>
30 44 </div>
31 45 <?php
32 46 }
  47 + ?>
  48 + </div>
  49 + <?php
33 50 }?>
34 51 </div>
35 52 <?php
... ... @@ -46,19 +63,30 @@ use yii\widgets\ActiveForm;
46 63 <?php
47 64 }
48 65 ?>
  66 + <div class="fields_block">
49 67 <label for="Option[0][<?=$key?>]"><?php echo Yii::t('app', $key); ?></label>
50 68 <input type="hidden" name="Option[0][template]" value="<?=$value->template?>"/>
51   - <input type="<?=$value->template?>" name="Option[0][value][<?=$key?>]" class="form-control required" required value="<?=$modellang[$index][$key][0]->value?>"/>
  69 + <input type="<?=$value->template?>" name="Option[0][value][<?=$key?>]" class="form-control required main_input" required value="<?=$modellang[$index][$key][0]->value?>"/>
52 70 <div class="help-block"><?=$modellang[$index][$key][0]->getFirstError('value')?></div>
53 71 <?php
54   - foreach($value->getLangs() as $lang) {
55   - ?>
56   - <div class="form-group">
57   - <div class="col-xs-1"><?=$lang['lang_code']?></div>
58   - <div class="col-xs-11"><input type="<?=$value->template?>" name="Option[0][lang][<?=$key?>][<?=$lang['language_id']?>]" class="form-control" value="<?=$modellang[$index][$key][$lang['language_id']]->value?>"/></div>
59   - </div>
60   - <?php
61   - }
  72 + if($field['translate']) {
  73 + ?>
  74 + <div class="lang_inputs">
  75 + <?php
  76 + foreach($value->getLangs() as $lang) {
  77 + ?>
  78 + <div class="form-group">
  79 + <div class="col-xs-1"><?=$lang['lang_code']?></div>
  80 + <div class="col-xs-11"><input type="<?=$value->template?>" name="Option[0][lang][<?=$key?>][<?=$lang['language_id']?>]" class="form-control" value="<?=$modellang[$index][$key][$lang['language_id']]->value?>"/></div>
  81 + </div>
  82 + <?php
  83 + }
  84 + ?>
  85 + </div>
  86 + <?php
  87 + } ?>
  88 + </div>
  89 + <?php
62 90 if($first) {
63 91 ?>
64 92 </div>
... ... @@ -83,6 +111,18 @@ use yii\widgets\ActiveForm;
83 111 $(clone).appendTo('#<?=$form->getId()?>');
84 112 $('#<?=$form->getId()?> button[type=submit]').parent().appendTo('#<?=$form->getId()?>');
85 113 });
  114 + $(document).on('click', '.add_lang', function() {
  115 + var field_block = $(this).parent().parent();
  116 + if($(this).hasClass('active')) {
  117 + $(field_block).find('.main_input').attr('required', '').show();
  118 + $(field_block).find('.lang_inputs').hide();
  119 + $(this).removeClass('active');
  120 + } else {
  121 + $(field_block).find('.main_input').removeAttr('required').hide();
  122 + $(field_block).find('.lang_inputs').show();
  123 + $(this).addClass('active');
  124 + }
  125 + });
86 126 });
87 127 </script>
88 128 </div>
... ...
frontend/views/option/_form_edit.php
... ... @@ -20,14 +20,17 @@ use yii\widgets\ActiveForm;
20 20 <input type="<?=$row->template?>" name="Option[<?=$id?>][value][<?=$row->name?>]" class="form-control required" required value="<?=$modellang[$id][0]->value?>"/>
21 21 <?php if($row->hasErrors()) { ?><div class="help-block"><?php echo $modellang[$id][0]->getFirstError('value');?></div> <?php } ?>
22 22 <?php
23   - foreach($row->getLangs() as $lang_id => $lang) {
24   - ?>
25   - <div class="form-group">
26   - <div class="col-xs-1"><?=$lang['lang_code']?></div>
27   - <div class="col-xs-11"><input type="<?=$row->template?>" name="Option[<?=$id?>][lang][<?=$lang['language_id']?>]" class="form-control" value="<?=$modellang[$id][$lang['language_id']]->value?>"/></div>
28   - </div>
29   - <?php
30   - }
  23 + if($row->translate) {
  24 + foreach($row->getLangs() as $lang_id => $lang) {
  25 + ?>
  26 + <div class="form-group">
  27 + <div class="col-xs-1"><?=$lang['lang_code']?></div>
  28 + <div class="col-xs-11"><input type="<?=$row->template?>" name="Option[<?=$id?>][lang][<?=$lang['language_id']?>]" class="form-control" value="<?=$modellang[$id][$lang['language_id']]->value?>"/></div>
  29 + </div>
  30 + <?php
  31 + }
  32 + }
  33 +
31 34 }?>
32 35  
33 36 <div class="form-group">
... ...
vendor/dmstr/yii2-adminlte-asset/example-views/yiisoft/yii2-app/layouts/content.php
1 1 <?php
2 2 use yii\widgets\Breadcrumbs;
3 3 use dmstr\widgets\Alert;
  4 +use yii\helpers\Html;
4 5  
5 6 ?>
6 7 <div class="content-wrapper">
... ... @@ -226,6 +227,11 @@ use dmstr\widgets\Alert;
226 227 </div>
227 228 <!-- /.form-group -->
228 229 </form>
  230 + <?=Html::a(
  231 + \Yii::t('app', 'settings'),
  232 + ['/language'],
  233 + ['data-method' => 'post', 'class' => 'btn btn-default btn-flat']
  234 + )?>
229 235 </div>
230 236 <!-- /.tab-pane -->
231 237 </div>
... ...