/** * @inheritdoc */ public function run() { $items = []; /** @var \DevGroup\Multilingual\Multilingual $multilingual */ $multilingual = Yii::$app->get('multilingual'); $languages = $multilingual->getAllLanguages(); foreach ($languages as $index => $language) { $flag = $language->iso_639_1 === 'en' ? 'gb' : $language->iso_639_1; $items[] = ['label' => '<span class="flag-icon flag-icon-' . $flag . '"></span> ' . $language->name, 'active' => $index === 0, 'content' => $this->renderFile($this->childView, ['model' => $this->model->getTranslation($language->id), 'form' => $this->form, 'language' => $language, 'language_id' => $language->id, 'attributePrefix' => "[{$language->id}]"])]; } FlagIconAsset::register($this->view); $items = ArrayHelper::merge($items, $this->additionalTabs); return "<div class=\"nav-tabs-custom {$this->tagClass}\">" . Tabs::widget(['items' => $items, 'options' => $this->options, 'encodeLabels' => false]) . $this->footer . '</div>'; }
/** * @param array $data */ private function saveData(array $data) { foreach ($this->getLanguages() as $locale => $language) { /** @var ActiveRecord $translation */ $translation = $this->owner->getTranslation($locale)->one(); if ($translation === null) { $translation = new $this->translationModelName(); $translation->{$this->translationOwnerField} = $this->owner->{$this->ownerPrimaryKey}; $translation->{$this->languageField} = $language->id; } if (isset($data[$locale])) { $translation->setAttributes($data[$locale]); } if (!$translation->save()) { $this->owner->addError($locale, $translation->getErrors()); } } }
/** * @param \yii\db\ActiveRecord $model * * @return bool */ public function loadModels($model) { $loaded = true; if ($model instanceof \common\components\model\Translateable) { $languages = LanguageHelper::getLanguageModels(); $models = []; foreach ($languages as $language) { if ($language->locale === LanguageHelper::getDefaultLanguage()->locale) { continue; } $models[$language->locale] = $model->getTranslation($language->locale); } if (!empty($models)) { $loaded &= Model::loadMultiple($models, Yii::$app->request->post()); } } $loaded = $model->load(Yii::$app->request->post()) && $loaded; return $loaded; }