Как переопределить метатеги из layout

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
anton12rus
Сообщения: 13
Зарегистрирован: 2019.08.09, 15:34

Как переопределить метатеги из layout

Сообщение anton12rus »

Здравствуйте уважаемые, в ходе разработки простого сео модуля, который принудительно должен переопределять метатеги на указанной странице, столкнулся с загвоздкой, не могу переопределить метатеги из layout, если регистрация метатега происходила во вьюшке, все теги находятся тут $this->head() , прошу помощи, объясните как переопределить или как реализовать данный функционал правильным путем не упираясь рогами в данное ограничение.
anton12rus
Сообщения: 13
Зарегистрирован: 2019.08.09, 15:34

Re: Как переопределить метатеги из layout

Сообщение anton12rus »

Не хотелось бы делать кустарным способом, но покатолько переопределить в наглую $this->metaTags[0] = 'Текст'
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Как переопределить метатеги из layout

Сообщение yiiliveext »

Вьюха

Код: Выделить всё

$this->registerMetaTag(['name' => 'keywords', 'content' => 'SEO Keywords'], 'seo_keywords');
$this->registerMetaTag(['name' => 'description', 'content' => 'SEO Description'], 'seo_description');
Контроллер

Код: Выделить всё

$content = $this->getView()->render('index', [
                      'param' => $param,
                  ], $this);
Yii::$app->view->registerMetaTag(['name' => 'keywords', 'content' => 'New SEO Keywords'], 'seo_keywords');
Yii::$app->view->registerMetaTag(['name' => 'description', 'content' => 'New SEO Description'], 'seo_description');

return $this->renderContent($content);
Выведет

Код: Выделить всё

<meta name="keywords" content="New SEO Keywords">
<meta name="description" content="New SEO Description">
anton12rus
Сообщения: 13
Зарегистрирован: 2019.08.09, 15:34

Re: Как переопределить метатеги из layout

Сообщение anton12rus »

yiiliveext писал(а): 2019.10.04, 19:53 Вьюха

Код: Выделить всё

$this->registerMetaTag(['name' => 'keywords', 'content' => 'SEO Keywords'], 'seo_keywords');
$this->registerMetaTag(['name' => 'description', 'content' => 'SEO Description'], 'seo_description');
Контроллер

Код: Выделить всё

$content = $this->getView()->render('index', [
                      'param' => $param,
                  ], $this);
Yii::$app->view->registerMetaTag(['name' => 'keywords', 'content' => 'New SEO Keywords'], 'seo_keywords');
Yii::$app->view->registerMetaTag(['name' => 'description', 'content' => 'New SEO Description'], 'seo_description');

return $this->renderContent($content);
Выведет

Код: Выделить всё

<meta name="keywords" content="New SEO Keywords">
<meta name="description" content="New SEO Description">

Это понятно, но не то, как зарегистрировать я знаю, как переопределить из layout не знаю.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Как переопределить метатеги из layout

Сообщение yiiliveext »

anton12rus писал(а): 2019.10.04, 19:58 Это понятно, но не то, как зарегистрировать я знаю, как переопределить из layout не знаю.
Здесь в контроллере перопределяются значения заданные во вьюхе.
anton12rus
Сообщения: 13
Зарегистрирован: 2019.08.09, 15:34

Re: Как переопределить метатеги из layout

Сообщение anton12rus »

yiiliveext писал(а): 2019.10.04, 20:04
anton12rus писал(а): 2019.10.04, 19:58 Это понятно, но не то, как зарегистрировать я знаю, как переопределить из layout не знаю.
Здесь в контроллере перопределяются значения заданные во вьюхе.

По вашей схеме мне нужно в каждый контроллер засунуть переопределение? если так, то меня это не устраивает, не удобно.
yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Как переопределить метатеги из layout

Сообщение yiiliveext »

anton12rus писал(а): 2019.10.04, 20:12 По вашей схеме мне нужно в каждый контроллер засунуть переопределение? если так, то меня это не устраивает, не удобно.
Я без понятия как у вас там реализован ваш seo модуль. Для всех вьюх можете использовать событие View::EVENT_BEFORE_RENDER

Код: Выделить всё

Event::on(\yii\web\View::class, \yii\web\View::EVENT_BEFORE_RENDER, function ($event) {
            $event->sender->registerMetaTag(['name' => 'keywords', 'content' => 'New SEO Keywords'], 'seo_keywords');
            $event->sender->registerMetaTag(['name' => 'description', 'content' => 'New SEO Description'], 'seo_description');
        });
Ответить