如何从节点Twig文件添加到html.twig? -- 8 领域 和 theming 领域 和 social-network 领域 drupal 相关 的问题

how to add to html.twig from a node twig file?


0
vote

问题

中文

我需要将物品映像添加到Facebook和Twitter上共享的帖子,这是由如下所示的Meta标签完成的,如下所示

  <head>   <head-placeholder token="{{ placeholder_token|raw }}">   <title>{{ head_title|safe_join(' | ') }}</title>   <css-placeholder token="{{ placeholder_token|raw }}">   <js-placeholder token="{{ placeholder_token|raw }}">    {# RIGHT HERE  #}   <meta name='og:image' content='{{ file_url(element['#object'].field_image.0.entity.uri.value) }}'>   <meta name="twitter:card" content="photo" />   <meta name="twitter:site" content="@nestle" />   <meta name="twitter:title" content="Article Picture" />   <meta name="twitter:description" content="A description" />   <meta name="twitter:image" content="{{ file_url(element['#object'].field_image.0.entity.uri.value) }}" />   <meta name="twitter:url" content="{{ base_path }}" /> </head>   

我需要在html.html.twig文件中添加元标记,问题是那些元标记依赖于分享的文章,因为我需要获取图像的URL,我无法弄清楚如何做这使得在Node.html.twig文件中写入的代码块将被放在html.html.twig文件中。

我尝试了什么 我尝试在节点文件开始中添加一个块并扩展HTML.html文件 节点 - 文章.html.twig(文件的开始):

  {% extends "html.html.twig" %} {% block metablock %}   <meta name='og:image' content='{{ file_url(element['#object'].field_image.0.entity.uri.value) }}'>   <meta name="twitter:card" content="photo" />   <meta name="twitter:site" content="@nestle" />   <meta name="twitter:title" content="Article Picture" />   <meta name="twitter:description" content="A description" />   <meta name="twitter:image" content="{{ file_url(element['#object'].field_image.0.entity.uri.value) }}" />   <meta name="twitter:url" content="{{ base_path }}" /> {% endblock %}   

然后从类似的HTML.html文件调用此块:

    <head>     <head-placeholder token="{{ placeholder_token|raw }}">     <title>{{ head_title|safe_join(' | ') }}</title>     <css-placeholder token="{{ placeholder_token|raw }}">     <js-placeholder token="{{ placeholder_token|raw }}">      {# RIGHT HERE #}     {{ block('metablock') }}    </head>   

但这给出了错误

网站遇到意外错误。请再试一次 lover.twig_error_syntax:A. 扩展另一个的模板不能包括枝条外的内容 块。

我尝试将其余的代码放在节点中 - 块内部的文章,这确实是工作,但是元区块块被放置在每篇文章视口的开始(不是我想要的)中,我需要它只能放在头标签。

希望我足够清楚,总结,如何从节点中向头部的元标记放置 - Stritic.html文件,而不是html.html文件。

英文原文

I need to add the article image to the post shared on facebook and twitter, this is done by meta tags added in the as shown below

<head>   <head-placeholder token="{{ placeholder_token|raw }}">   <title>{{ head_title|safe_join(' | ') }}</title>   <css-placeholder token="{{ placeholder_token|raw }}">   <js-placeholder token="{{ placeholder_token|raw }}">    {# RIGHT HERE  #}   <meta name='og:image' content='{{ file_url(element['#object'].field_image.0.entity.uri.value) }}'>   <meta name="twitter:card" content="photo" />   <meta name="twitter:site" content="@nestle" />   <meta name="twitter:title" content="Article Picture" />   <meta name="twitter:description" content="A description" />   <meta name="twitter:image" content="{{ file_url(element['#object'].field_image.0.entity.uri.value) }}" />   <meta name="twitter:url" content="{{ base_path }}" /> </head> 

I need to add meta tags in the in the html.html.twig file, the problem is those meta tags depend on the article being shared because I need to get the URL of the image, I cannot figure out how to do it such that a block of code written in the node.html.twig file would be placed in the in the html.html.twig file.

WHAT I TRIED i tried adding a block in start of node file and extending the html.html file node--article.html.twig (start of file) :

{% extends "html.html.twig" %} {% block metablock %}   <meta name='og:image' content='{{ file_url(element['#object'].field_image.0.entity.uri.value) }}'>   <meta name="twitter:card" content="photo" />   <meta name="twitter:site" content="@nestle" />   <meta name="twitter:title" content="Article Picture" />   <meta name="twitter:description" content="A description" />   <meta name="twitter:image" content="{{ file_url(element['#object'].field_image.0.entity.uri.value) }}" />   <meta name="twitter:url" content="{{ base_path }}" /> {% endblock %} 

then calling this block from the html.html file like this:

  <head>     <head-placeholder token="{{ placeholder_token|raw }}">     <title>{{ head_title|safe_join(' | ') }}</title>     <css-placeholder token="{{ placeholder_token|raw }}">     <js-placeholder token="{{ placeholder_token|raw }}">      {# RIGHT HERE #}     {{ block('metablock') }}    </head> 

But this gives an error

The website encountered an unexpected error. Please try again later.Twig_Error_Syntax: A template that extends another one cannot include contents outside Twig blocks.

I tried putting the rest of code in node--article inside a block, this does work but the metablock block gets placed in the start of every article viewport (Not what I intended) I need it to be placed only in the head tag.

Hope I was clear enough, to summarize, How can I place meta tags in the head from the node--article.html file, not the html.html file.

        

回答列表

1
 
vote
vote
最佳答案
 

你要错误的方式,你不能影响其他枝模板文件,需要在达到树枝之前完成方式。您想要的一切都可以使用 Metatag模块:

支持大量常用的元标签,包括页面标题,规范URL,描述等,以及Facebook的开放式图形,推特卡和Dublin Core通过包含的子模块(查看完整列表)

 

You're going about it the wrong way, you cannot affect other Twig template files, it needs to be done way before you get to Twig. Everything you want to can be done using the Metatag module:

Supports a large number of commonly used meta tags, including the page title, canonical URL, description, etc, and for Facebook's Open Graph, Twitter Cards and Dublin Core via included submodules (see full list)

 
 
 
 

相关问题

1  在首页上显示一个块,但仅在第一页上  ( Show a block on the front page but only on the first page ) 
我有一个块,我想在首页上显示,但不是每个分页页面(即,不要在/ front-page?page = 1上显示它)。 如何实现这一目标? ...

1  用户传递表单提交后重定向  ( Redirect after user pass form submit ) 
我正在尝试在击中Drupal 8重置密码表单中击中提交按钮后进行重定向。 我使用 theme_form_alter 钩子和函数作为新的提交操作。问题是,重定向工作但没有发送电子邮件。 如果我取消注释新提交挂钩的行,则邮件被发送,而是当然没有重定向。 function theme_form_alter(&$form...

0  汇总CSS的问题  ( Problems with aggregated css ) 
我在本地开发和远程测试环境上激活了聚合CSS,没有任何问题。现在正在暂存CSS文件的聚合导致麻烦:在某些页面上的样式看起来正确,但随机页面它完全破碎。 HTML有时会显示: <link rel="stylesheet" href="/?p0upgh" media="all" /> <link rel="style...

0  查询条件串联  ( Query condition concatenation ) 
我可以直接在mysql ... GEOID + '-' + NAME IN ('01005-Barbour', '01007-Bibb') 但是当我尝试使用数据库API执行此操作时... $query->condition("s.STUSPS + '-' + c.NAME", $counties, ...

1  WebForm Subsumform Hook  ( Webform submitform hook ) 
我正在使用drupal 8和webform ::errorElement()5 。我有一个使用ajax的多步表单,启用了5页。 我需要改变确认消息,但我还无法弄清楚。我想要实现的是根据最后一个问题所选的某些表单值来更改消息。我创建了一个自定义模块并扩展了 ::errorElement()6 ,并创建了 ::erro...

0  如何调用CSV资源  ( How to call a csv resource ) 
我有一个解耦的Drupal网站,我想使用CSV序列化模块调用REST资源输出CSV。我还在该特定资源中配置了REST UI以接受CSV。 我尝试用 Content-Type: application/csv ,或 Content-Type: text/csv ,我发送 _format=csv 作为get参数,但唯一的...

1  “将此字段作为自定义链接输出”设置此处链接到内容[已关闭]  ( Output this field as a custom link set here link to the content ) 
关闭。这个问题需要详细信息或清晰度。它目前不接受答案。 想要改进这个问题?添加详细信息并澄清编辑此帖的问题。 关闭 3年前。 ...

0  将重复字段的所有实例输出在一起  ( Output all instances of a repeating field together ) 
我有段落安装,正在创建具有嵌套段落的内容类型 - 因此有一个标题字段的段落,一个主体字段 - 然后在另一个段落中嵌套,这样我就可以嵌套了多个框这页纸。到目前为止这么好 - 我想学习的是输出字段,所以我可以将它们放在jQuery UI标签中。 在我的模板中我现在有: {{ content.field_tab_tit...

2  Drupal 8规则和媒体  ( Drupal 8 rules and media ) 
我想在内容发布时发布与内容相关联的媒体。 是有可能的规则吗? 如果是这样,我需要设置的条件是什么? 我所设置的条件是: 节点已发布 - 数据选择器:节点 实体有字段 - 数据选择器:节点,值:field_my_media_field ...

0  如何添加块模板建议?  ( How to add block template suggestions ) 
我希望能够将块或将块放入区域,并根据面板的选定视图模式将其主题为主题。我已经注意到自定义块和实体块之间的差异,其中一个表单为您提供了视图模式,以显示块,而另一个表单没有(自定义块)。 我希望模板建议沿着 block--provider/module--block-bundle--view-mode.html.twig...

4  搜索API eferpt在结果中是空的  ( Search api excerpt are empty in the result ) 
我在Drupal 8中安装了搜索API模块,并在搜索结果中包含摘录。 但摘录在搜索结果中始终为空。 (HTML DIV元素在内但内部没有内容) 我在论坛中搜索,并启用了从建议的设置中的"亮点" 。 但结果没有变化(我清除了缓存) 我错过了什么? ...

11  如何防止块被缓存?  ( How to prevent a block from being cached ) 
登录后。我正在添加一个侧栏块。一旦我清除缓存,那么只有更新变量或它的值。 namespace Drupal est_demoPluginBlock; use DrupalCoreBlockBlockBase; /** * Provides 'Sidebar' Block * * @Block( * ...

2  如何使用Datadefinition :: Create('list')?  ( How to use datadefinitioncreatelist ) 
答案链接到a 所有可能使用的所有类型的列表 DataDefinition::create() 。 可以使用的一个插件是 itemlist 。 但我找不到有关如何定义列表中的项目的任何文档。 我会期待这样的东西: $status_definition = DataDefinition::create('list...

1  如何更改“发布状态”复选框的标签和帮助文本?  ( How do i change the label and help text of the publishing status checkbox ) 
我们最近将我们的网站更新为Drupal 8.4,并且发布节点的小部件已从下拉列表中更改为复选框。现在,如何更改标签和复选框的文本?它无法在字段UI中更改。 ...

3  贡献D8版本的现有D7 Controm项目?  ( Contribute d8 version of an existing d7 contrib project ) 
有人可以介绍如何贡献现有D7 Controm项目的D8版本?我维护D7项目,并进一步想要添加它的D8版本。 我正在努力创建8.x.1.x开发分支。 请分享以下任何引用或步骤。 我的项目链接:检查dns 。 所以当我创建 C:UsersMyusernameAppDataRoamingComposervendordrus...

4  用CKEDITOR包装锚标记的包装内容  ( Wrapping content in anchor tags with ckeditor ) 
我正在尝试在drupal 8安装中的标记中包装html内容块: <a href="/link"><h2>Link 1</h2><h3>Subheader link 1</h3></a> ckeditor将其更改为至: <h2><a href="/link">Link 1</a></h2><h3><a...

0  如何防止在节点上显示特定段落类型(捆绑包)  ( How to prevent display of specific paragraph types bundles on nodes ) 
我有一个包含段落字段的内容类型,该段落具有可用许多段落类型。对于其中一个段落类型,我不希望它在节点中显示它,因为我在使用不同区域中的视图显示它。视图工作很大,但我无法弄清楚如何防止特定段落类型在节点上显示。我尝试使用各种钩子从渲染阵列中删除.Theme,但这也从视图中删除它。我还尝试从节点模板中的段落字段中删除段落类...

0  如何从页面标题中删除“drupal”?  ( How to remove drupal from title of page ) 
现在我有这个: 在这里,我发现了如何将此文本更改为其他文本: https: //www.drupal.org/forum/support/post-installation/2016-09-20/change-site-title-in-drupal-8 我试过: 但它没有帮助。 drupal是8...

3  从段落中引用块插件或表单?  ( Reference a block plugin or form from a paragraph ) 
是否有一种方法来引用自定义表单(用Form API构建)或一个块插件,该插件呈现相同的形式?我只看到了一种方法来引用自定义块(内容)或配置块,而不是两者。如何解决这一场景? ...

0  以节点上的以编程方式重新排列实体引用列表的顺序  ( Programmatically rearrange order of entity reference list on node ) 
我的内容类型有一个节点参考字段,允许用户输入无限量的节点。我需要以编程方式更改此列表中第一个问题。 使用下面的代码,我能够从字段中获取数据。 $node = Drupal::entityTypeManager()->getStorage('node')->load($function); $focus = $no...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.