首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >yii2如何将“视图”中的自定义元标记替换为“布局”中的默认元标记

yii2如何将“视图”中的自定义元标记替换为“布局”中的默认元标记
EN

Stack Overflow用户
提问于 2015-05-11 15:10:11
回答 3查看 9.1K关注 0票数 5

我想把默认的元数据描述标签作为主模板布局。

在许多情况下,我需要用视图中的自定义数据替换默认的元标记(如description和关键字)。

我试过:

代码语言:javascript
运行
复制
$this->registerMetaTag

在视图中,我需要自定义元标记,并且我已经在主布局中使用了这一点。

我想,如果我使用元标签与他们的id或名称,它将被替换,但结果显示重复的元标签,如。

代码语言:javascript
运行
复制
<meta id="main_index" name="Description" content="my default content added by layout.">


<meta id="main_index" name="Description" content="my customized content added by the view"></head>

提供默认描述标记的最佳方法是什么,但当我调用$this->registerMetaTag时可以由视图进行自定义

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-14 07:16:58

我把它变成了我自己,因为我的目标不是在每个动作上重复一个默认的关键字或其他元标记,而是在我想要替换的地方使用registerMetaTag。

  • 首先,创建您自己的Controller扩展版本,如下所示 类\Yii::$app->view->registerMetaTag(Yii::$app->params'pageDefaultDescription',扩展控制器{ public function beforeAction($event){ $this->view->title =Yii::$app->params‘’pageTitle‘;MyController“default_description”;\Yii::$app->view->registerMetaTag(Yii::$app->params'pageDefaultKeywords',"default_keywords");//打开图形标签\Yii::$app->view->registerMetaTag(Yii::$app->params'pageDefaultOG_Description',“default_og_description”;\Yii::$app->view->registerMetaTag(Yii::$app->params'pageDefaultOG_SiteName',"default_og_sitename");\Yii::$app->view->registerMetaTag(Yii::$app->params'pageDefaultOG_Title',"default_og_title");\Yii::$app->view->registerMetaTag(Yii::$app->params'pageDefaultOG_Type',"default_og_type");返回父级::beforeAction($event);}
  • 因此,现在可以从param的配置文件中添加所有自定义的关键字、author等元标记,作为默认值。
  • 现在,您创建的任何新控制器只要用MyController扩展即可,因此在默认情况下,所有上述元标记都将被附加。
  • 如果您需要在某些操作中替换元标记或自定义,请执行以下操作。 公共函数actionIndex() {\Yii:$app->view->registerMetaTag( 'name‘=> ' description ',’=> 'my‘=>’my customize one the index.','id'=>"main_index“,"main_index");//这将取代默认的描述。返回$this->呈现(‘index’);}
票数 4
EN

Stack Overflow用户

发布于 2016-11-09 15:20:53

这里是我的解决方案,它更简单,没有冗余控制器。您所需要的就是在app params中定义默认标记,并在视图中覆盖它们。

config/params.php

代码语言:javascript
运行
复制
<?php
return [
    'adminEmail' => 'admin@example.com',
    'og_title' => ['property' => 'og:title', 'content' => 'title'],
    'og_description' => ['property' => 'og:description', 'content' => 'description'],
    'og_url' => ['property' => 'og:url', 'content' => '/'],
    'og_image' => ['property' => 'og:image', 'content' => 'image']
];

views/layouts/main.php

代码语言:javascript
运行
复制
<?php
    $this->registerMetaTag(Yii::$app->params['og_title'], 'og_title');
    $this->registerMetaTag(Yii::$app->params['og_description'], 'og_description');
    $this->registerMetaTag(Yii::$app->params['og_url'], 'og_url');
    $this->registerMetaTag(Yii::$app->params['og_image'], 'og_image');
?>

现在,如果需要设置自定义标记,则在我的视图中覆盖params。

views/site/index.php

代码语言:javascript
运行
复制
<?php
    Yii::$app->params['og_title']['content'] = 'custom title';
    Yii::$app->params['og_description']['content'] = 'custom desc';
    Yii::$app->params['og_url']['content'] = '/new/url';
    Yii::$app->params['og_image']['content'] = 'image.jpg';
?>
票数 11
EN

Stack Overflow用户

发布于 2015-05-11 15:35:09

您可以使用类似的id来管理已注册的元标记。确保使用Yii生成元标记。从您的问题中,您已经生成了一个表标签,这是不可能更换的,因为Yii没有管理它。

代码语言:javascript
运行
复制
public function actionTest1{
    $this->registerMetaTag('your example', 'description', null, array(), 'metaDescription');
    $this->render('myView');
}

public function actionTest2{
    $this->registerMetaTag('your example2', 'description', null, array(), 'metaDescription');
    $this->render('myView2');
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30171328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档