public function safeUp() { // Load application languages $languages = Yii::$app->params['languages']; // Create SEO settings $seoSettings = ['seo/meta/title' => ['label' => 'Metatag - Title', 'value' => 'Title', 'translateable' => 1], 'seo/meta/description' => ['label' => 'Metatag - Description', 'value' => 'Description', 'translateable' => 1], 'seo/meta/keywords' => ['label' => 'Metatag - Keywords', 'value' => 'Keywords', 'translateable' => 1], 'seo/analytics/email-google-account' => ['label' => 'E-mailadres Google account', 'value' => '*****@*****.**', 'translateable' => 0]]; foreach ($seoSettings as $k => $v) { // Create setting $setting = new Setting(['key' => $k, 'category_id' => 2, 'label' => $v['label'], 'type' => Setting::TYPE_USER_DEFINED, 'template' => Setting::TEMPLATE_TEXT, 'translateable' => $v['translateable']]); // Set values foreach ($languages as $languageId => $languageName) { $setting->translate($languageId)->value = $v['value']; } $setting->save(false); } // Create Social settings $socialSettings = ['social/facebook' => ['label' => 'Facebook account', 'value' => 'https://www.facebook.com', 'translateable' => 1], 'social/twitter' => ['label' => 'Twitter account', 'value' => 'https://www.twitter.com/', 'translateable' => 1], 'social/google+' => ['label' => 'Google+ account', 'value' => 'https://plus.google.com', 'translateable' => 1], 'social/linkedin' => ['label' => 'LinkedIn account', 'value' => 'https://www.linkedin.com/', 'translateable' => 1]]; foreach ($socialSettings as $k => $v) { // Create setting $setting = new Setting(['key' => $k, 'category_id' => 3, 'label' => $v['label'], 'type' => Setting::TYPE_USER_DEFINED, 'template' => Setting::TEMPLATE_TEXT, 'translateable' => $v['translateable']]); // Set values foreach ($languages as $languageId => $languageName) { $setting->translate($languageId)->value = $v['value']; } $setting->save(false); } }
/** * Lists all Seo models. * @return mixed */ public function actionIndex() { $languages = Yii::$app->params['languages']; $tags = ['title' => Setting::findOne(['key' => 'seo/meta/title']), 'description' => Setting::findOne(['key' => 'seo/meta/description']), 'keywords' => Setting::findOne(['key' => 'seo/meta/keywords'])]; if (Yii::$app->request->getIsPost()) { $post = Yii::$app->request->post(); try { // Load the models $title = Setting::findOne(['key' => 'seo/meta/title']); $description = Setting::findOne(['key' => 'seo/meta/description']); $keywords = Setting::findOne(['key' => 'seo/meta/keywords']); // Wrap the everything in a database transaction $transaction = Yii::$app->db->beginTransaction(); // Update the values foreach ($languages as $languageId => $languageName) { // Update 'seo/meta/title' $title->translate($languageId)->value = $post['title'][$languageId]; // Update 'seo/meta/description' $description->translate($languageId)->value = $post['description'][$languageId]; // Update 'seo/meta/keywords' $keywords->translate($languageId)->value = $post['keywords'][$languageId]; } if (!$title->save()) { return $this->render('settings', ['tags' => $tags]); } if (!$description->save()) { return $this->render('settings', ['tags' => $tags]); } if (!$keywords->save()) { return $this->render('settings', ['tags' => $tags]); } $transaction->commit(); // Set flash message Yii::$app->getSession()->setFlash('seo', Yii::t('app', 'The settings have been updated')); return $this->redirect(['index']); } catch (\Exception $e) { return $this->render('settings', ['tags' => $tags, 'errors' => $e->getMessage()]); } } return $this->render('settings', ['tags' => $tags]); }
/** * Creates data provider instance with search query applied * @return ActiveDataProvider */ public function search($params) { $query = Setting::find(); //$query->andFilterWhere(['language' => Yii::$app->language]); $dataProvider = new ActiveDataProvider(['query' => $query, 'pagination' => ['pageSize' => 50]]); // Join the entity model as a relation $query->joinWith(['category']); // A normal user is only allowed to view the 'user-defined' settings if (!Yii::$app->user->can('Superadmin')) { $query->andFilterWhere(['type' => Setting::TYPE_USER_DEFINED]); } // enable sorting for the label attribute $dataProvider->sort->attributes['label'] = ['asc' => ['label' => SORT_ASC], 'desc' => ['label' => SORT_DESC]]; // enable sorting for the related column $dataProvider->sort->attributes['category.name'] = ['asc' => ['settings_categories.name' => SORT_ASC], 'desc' => ['settings_categories.name' => SORT_DESC]]; $dataProvider->sort->defaultOrder = ['category.name' => SORT_ASC, 'label' => SORT_ASC]; if (!($this->load($params) && $this->validate())) { return $dataProvider; } $query->andFilterWhere(['key' => $this->key]); $query->andFilterWhere(['like', 'label', $this->label])->andFilterWhere(['LIKE', 'settings_categories.name', $this->getAttribute('category.name')]); return $dataProvider; }
/** * @return \yii\db\ActiveQuery */ public function getSetting() { return $this->hasOne(Setting::className(), ['id' => 'setting_id']); }
/** * Finds the Setting model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param string $id * @return Setting the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Setting::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException(Yii::t('app', 'The requested item does not exist')); } }