我的代码覆盖块模板有什么问题? -- 8 领域 和 blocks 领域 drupal 相关 的问题

What's wrong with my code to overwrite a block template?


2
vote

问题

中文

我想从自定义块中呈现模板。

当我启用枝条调试时检查源,我看到以下输出。

  admin/config/regional/translate/translate0  

我的模块结构是以下内容。

  admin/config/regional/translate/translate1  

我用来构建块的代码是以下。

  admin/config/regional/translate/translate2  

我的代码中有什么问题?

英文原文

I want to render a template from a custom block.

When I check the source with Twig debug enabled, I see the following output.

<!-- THEME DEBUG --> <!-- THEME HOOK: 'block' --> <!-- FILE NAME SUGGESTIONS:    * block--mozgraph.html.twig    * block--moz-graph.html.twig    * block--wk-elastic.html.twig    x block.html.twig --> <!-- BEGIN OUTPUT from 'themes/custom/wundertheme/templates/block/block.html.twig' --> <div id="block-mozgraph" class="contextual-region block-wk-elastic block-moz-graph">        <h2>Moz: Graph</h2>     <div data-contextual-id="block:block=mozgraph:langcode=en"></div> 

My module structure is the following.

wk_elastic   Plugin     Block       MozGraphBlock.php   templates     block--wk-elastic.html.twig   wk_elastic.info.yml   wk_elastic.services.yml 

The code I use to build the block is the following.

/**  * @file  * Contains \Drupal\wk_elastic\Plugin\Block\MozGraphBlock.  */  /**  * Provides a 'MOZ: Graph' block.  *  * @Block(  *   id = "moz_graph",  *   admin_label = @Translation("Moz: Graph")  * )  */ namespace Drupal\wk_elastic\Plugin\Block;  use Drupal\Core\Block\BlockBase; use Elasticsearch;  class MozGraphBlock extends BlockBase {   /**    * {@inheritdoc}    */   public function build() {     $hosts = array(       '192.168.10.10',     );      $client_builder = Elasticsearch\ClientBuilder::create();     $client_builder->setHosts($hosts);     $client = $client_builder->build();      $query = array(       'query' => array(         'match_all' => array(),       ),     );      $params = array(       'index' => 'moz',       'size' => 10000,       'body' => $query,     );       $response = $client->search($params);      return array(       '#markup' => $this->t('Hello, World!'),       '#theme' => 'block--wk-elastic',     );   } } 

What is wrong in my code?

     

回答列表

3
 
vote
vote
最佳答案
 

您可以在模块根中创建一个名为 Drupal.behaviors.loginAjax = { attach: function (context ,settings) { // Cache the form object var $form = $("form#user-login-form", context); var $submitButton = $('input[type="submit"]', $form); // Use once so we dont attach submit multiple times // Use off to remove any existing submit handler $form .once('loginAjax') .off('submit') .on('submit', function(e){ e.preventDefault(); var $form = $(this); // Run validation on $form object. // If success, trigger event on button if(valid) { $submitButton.trigger('submitmyform'); } }); } } 3 的目录。将模板放在这里。

现在让Drupal知道您将模板存储在模块中。在 Drupal.behaviors.loginAjax = { attach: function (context ,settings) { // Cache the form object var $form = $("form#user-login-form", context); var $submitButton = $('input[type="submit"]', $form); // Use once so we dont attach submit multiple times // Use off to remove any existing submit handler $form .once('loginAjax') .off('submit') .on('submit', function(e){ e.preventDefault(); var $form = $(this); // Run validation on $form object. // If success, trigger event on button if(valid) { $submitButton.trigger('submitmyform'); } }); } } 4中添加此功能:

  Drupal.behaviors.loginAjax = {    attach: function (context ,settings) {      // Cache the form object     var $form = $("form#user-login-form", context);     var $submitButton = $('input[type="submit"]', $form);      // Use once so we dont attach submit multiple times     // Use off to remove any existing submit handler     $form       .once('loginAjax')       .off('submit')       .on('submit', function(e){       e.preventDefault();       var $form = $(this);        // Run validation on $form object.        // If success, trigger event on button       if(valid) {         $submitButton.trigger('submitmyform');       }     });   } } 5  

终于小心地放置了你的枝条文件以及你命名的东西。在模块目录中创建一个模板目录,并用 Drupal.behaviors.loginAjax = { attach: function (context ,settings) { // Cache the form object var $form = $("form#user-login-form", context); var $submitButton = $('input[type="submit"]', $form); // Use once so we dont attach submit multiple times // Use off to remove any existing submit handler $form .once('loginAjax') .off('submit') .on('submit', function(e){ e.preventDefault(); var $form = $(this); // Run validation on $form object. // If success, trigger event on button if(valid) { $submitButton.trigger('submitmyform'); } }); } } 7
Drupal.behaviors.loginAjax = { attach: function (context ,settings) { // Cache the form object var $form = $("form#user-login-form", context); var $submitButton = $('input[type="submit"]', $form); // Use once so we dont attach submit multiple times // Use off to remove any existing submit handler $form .once('loginAjax') .off('submit') .on('submit', function(e){ e.preventDefault(); var $form = $(this); // Run validation on $form object. // If success, trigger event on button if(valid) { $submitButton.trigger('submitmyform'); } }); } } 8 Drupal.behaviors.loginAjax = { attach: function (context ,settings) { // Cache the form object var $form = $("form#user-login-form", context); var $submitButton = $('input[type="submit"]', $form); // Use once so we dont attach submit multiple times // Use off to remove any existing submit handler $form .once('loginAjax') .off('submit') .on('submit', function(e){ e.preventDefault(); var $form = $(this); // Run validation on $form object. // If success, trigger event on button if(valid) { $submitButton.trigger('submitmyform'); } }); } } 6 >

不要忘记清除缓存。


根据 Drupal.behaviors.loginAjax = { attach: function (context ,settings) { // Cache the form object var $form = $("form#user-login-form", context); var $submitButton = $('input[type="submit"]', $form); // Use once so we dont attach submit multiple times // Use off to remove any existing submit handler $form .once('loginAjax') .off('submit') .on('submit', function(e){ e.preventDefault(); var $form = $(this); // Run validation on $form object. // If success, trigger event on button if(valid) { $submitButton.trigger('submitmyform'); } }); } } 9所写的答案在此帖子中:
drupal 8自定义块(模块)创建Twig模板文件

 

You can create a directory called templates/ in your modules root. Place your template here.

Now let Drupal know you store the template in your module. in your_module.module add this function:

function YOUR_MODULE_theme($existing, $type, $theme, $path) {   return array(     'block__my_module' => array(       'render element' => 'elements',       'template' => 'block--my-module',       'base hook' => 'block'     )   ); } 

Finally be careful about where you place your twig file and what you name it. Create a templates directory in your module directory, and replace the _ in the theme function name with -:
mymodule-block.html.twig

Donxc2xb4t forget to clear the cache.


According to answer written by Nicensin in this post:
Drupal 8 custom block (module) create twig template file

 
 
1
 
vote

如果要覆盖块模板,则必须在主题中放入 'event=>'onsubmit'0 。这在模块中不起作用。

覆盖块模板通常会完成以在块周围添加额外的容器。不是主题在块内部。

您想要做的是主题您自己的输出。以下是以下文档:

从自定义模块中创建自定义枝模板

 

If you want to override the block template you have to put block--wk-elastic.html.twig in your theme. This doesn't work in the module.

Overriding a block template is usually done to add additional containers around the block. Not to theme what is inside the block.

What you are trying to do is to theme your own output. Here is the documentation for this:

Create custom twig templates from custom module

 
 
0
 
vote

块 - WK-Elastic是#theme的错误值。您可以使用的是一个可接受的值作为函数名称。
PHP函数名称不能包含连字符,但它们可以包含下划线。所以,你可以使用 '#theme' => 'block__wk_elastic' 。它是模板文件名,需要用连字符替换下划线。模板文件名是块 - Wk-elastic.html.twig是正确的。

 

block--wk-elastic is the wrong value for #theme. What you can use is a value that is acceptable as function name.
PHP function names cannot contain hyphens, but they can contain underscores. So, you can use '#theme' => 'block__wk_elastic'. It's the template filename that needs to replace the underscores with hyphens. It's correct for the template filename to be block--wk-elastic.html.twig.

 
 

相关问题

1  我想覆盖联系页面的模板  ( I want to override the template of the contact page ) 
我在drupal 8中使用bootstrap作为主题,我创建了一个子主题。我想用自定义模板覆盖联系人页面。 我在services.yml中添加了 debug: true ,但我没有找到正确的模板来在子主题中重新创建它。 ...

1  问题上传文件和包含文件名中的空格的文件  ( Problem uploading files and images containing spaces in the filename ) 
在Drupal 8中,我有字段 File 和 Image ,内容类型和表单。这些字段存储"公共" 文件夹中的文件。 当我用名字包含空格时上传文件时,例如名为 "example with spaces.pdf" 的文件,该文件被正确上传,但一旦上传,它就没有更多可用。 下面的图像是在上传包含文件名中包含空格的图像之后。...

1  联系表单:来自节点电子邮件字段的收件人  ( Contact form recipient from nodes email field ) 
用例:企业目录。 描述:我需要创建一个动态联系人表单,将每个节点的(业务列表内容类型)单个电子邮件字段作为联系表单的主收件人,或者至少作为碳副本('cc') 。 我花了2天寻找模块以及网络周围的各种编码建议,没有成功。 示例: Drupal 8中的每个节点的联系人8? 这很容易在D7中完成 视图联系表格 模块...

0  如何从数据库显示SQL查询?  ( How can i display sql query from database ) 
我正在尝试在Drupal 8.2中的页面上显示SQL查询,但我收到错误: 控制器必须返回响应(给定对象(Drupal Core Render Markup))。 如何更改以下代码? if ($result = $mysqli->query("SELECT id, discipline, teacher ...

1  电子邮件地址已被拍摄  ( The email address is already taken ) 
我正在尝试编辑用户,但我继续收到以下错误: 电子邮件地址[他们的电子邮件]已被拍摄。 我没有编辑他们的电子邮件。实际上,我可以打开编辑页面,刚刚点击保存而不改变任何东西,我仍然会收到错误。 为什么我收到此错误消息? ...

1  如何从相同内容类型中获取所有节点ID [已关闭]  ( How to get all node ids from same content type ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅拍摄了一个问题,只有编辑此帖。 关闭 1年前。 ...

2  如何使用Entity_Reference字段允许呈现我的自定义实体?  ( How do i allow my custom entity to be rendered using an entity reference field ) 
使用drupal 8,我创建了一个自定义实体,为它配置了几种视图模式,然后从另一个实体添加了一个Entity_Reference字段到我的自定义实体。 在我的Entity_Reference字段的显示配置中,我选择了"渲染实体" 并为我的实体选择了有效的视图模式,但是当我查看主机实体时,我没有得到任何内容。 我还在我...

3  8 - 如何从entityReferenceItem加载术语实体?  ( 8 how do i load a term entity from an entityreferenceitem ) 
我有一个具有分类学期的内容类型。我可以使用加载第一个 EntityReferenceItem $node->country->get(0) 然后我可以 tid 做 ->target_id (然后手动通过 Term::load 手动加载术语对象。 但是有一个entityReferenceItem的功能,我可以...

2  如何将表单作为桌子呈现?  ( How do i render a form as a table ) 
默认表单布局具有在单个div标签中包装的每个表单元素,带有标签和内部输入。我想整齐地展示一些东西,并为现场标签创建一个列,以及输入区域的另一列。 我可以看到这一点以两种方式之一完成: - 我可以使用表元素或div创建一个表,并将标签与输入分开。我会用枝条吗? - 或者,也许有一个创造性的方法可以使用CSS与默认结...

0  创建自定义块[已关闭]  ( Creating custom blocks ) 
此问题似乎在帮助中心中定义的范围内涉及Drupal。。 想要改进这个问题?更新问题,所以它是关于drupal答案的主题。 ...

1  我应该如何将字段的内容从内容类型放置到块中?  ( How should i go about placing the content of a field from a content type into a ) 
我的案子是: 我的内容类型称为"测试类型" ,具有2个字段:Body(文本区域),幻灯片(无限图像列表) 当我创建一个测试类型和它渲染的实例时,我的目标是将幻灯片字段的内容转到不同的区域,让我们说标题。首先想到是创建一个自定义块,该块将持有对字段内容的引用,但这似乎不是一个选项。这是否可以通过UI与某些设置执行,或者...

4  如何在自定义菜单项中将默认的“显示为adjoard”设置为true  ( How to set the default show as expanded to true in a custom menu item ) 
我正在自定义模块中创建一系列菜单。该网站还有自定义主题。有没有办法在主题或模块中,将菜单"显示为扩展" 到真实。这样,如果我移动我的网站,卸载,或者,它会回到框中的方式。 ...

1  仅显示匿名用户的菜单链接  ( Show menu links for anonymous users only ) 
我需要将用户注册链接显示为 998887665 菜单中的菜单项。我能够通过 links.menu.yml 添加菜单中的链接。 菜单链接显示匿名用户以及身份验证的用户,但不适用于管理员用户角色。 如何隐藏菜单项,以便与用户角色无关? ...

3  配置/安装目录的目的是什么?  ( What is the purpose of the config install directory ) 
我试图在omega / config /安装下使用omega主题并在很多文件下找到了很多文件。例如。 block.block.omega_account_menu.yml,block.block.omega_branding.yml,omega.layout.omega_default.yml。我想知道这些文件的功能...

2  如何找到正确的插件?  ( How do i find the correct plugin ) 
作为Drupal 7开发人员,我目前正在尝试进入Drupal 8。 我发现了一个问题找到了正确的插件。 例如,我很简单想要将节点链接的文本更改为"读取更多" 进入"阅读更多&gt; " 。 离开模板,我会谷歌为drupal 7像"drupal hook-what-all-all-all" 一样,发现了正确的钩子。如何...

12  如何修剪身体文本(Field_Body)?  ( How to trim body text field body ) 
我为一个节点创建了一个节点的视图,该节点显示了呈现实体的内容。其中,我在枝花模板中输出身体字段: {{ content.field_body }} 现在,我想将文本限制为200个字符并放三个点。我测试了三种不同的方式来做到这一点,但没有任何工作。问题是,每种方式都计算并修剪HTML字符。 1:我添加了"管...

5  将CSS / JS添加到特定视图?  ( Add css js to particular view ) 
我遇到了解如何将库视为查看。我希望我的资产包含在/ foo中但不包括在/酒吧。我在这个不止一次且从我的理解中读过文档,这是通过使用预处理来实现的,例如: function my_theme_preprocess_page(&$variables) { if($variables['is_front']){ ...

0  如何在同一实体表单上的另一个字段中引用字段值?  ( How can i reference field values in another field on the same entity form ) 
具有两个字段的示例内容类型: 文本字段 field_value 允许多个值。 自定义字段 field_error (使用字段类型插件定义),包含少量文本"属性" (类似于 alt 和 title 属性图像字段)。属性是: reference 和 message 。这也是多价值场。 我想通过音译其他字段值来实现与 ...

1  配置导出不适用于名称下划线的子主题  ( Configuration export not working for sub theme that has underscore in name ) 
今天有一个奇怪的问题,我有一个名为'rrre_theme'的子主题(bootstrap)。我可以在命名方面确认我在我的子主题中没有任何错误。我的位置块,一般都谈论笨拙的业务。当它发生导出我的配置时,我运行 drush cex vcs 其中,其中VCS是我 99887661 中定义的默认配置目录。到目前为止所以标准。但...

4  使用缓存标记对于特定节点列表  ( Using cache tags for a particular node list ) 
在drupal 8中缓存很大,但文件在Drupal 8中的渲染阵列中的渲染阵列上的缓存标签很薄(此时)。 我有一些代码基本上生成节点预告片列表,例如内容类型"书籍" 和"杂志" 。我正在缓存列表以加快速度。我每次添加/删除/编辑"书" 或"杂志" 时都会刷新列表。所以我有一个渲染数组,如下所示: $build =...




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


Licensed under cc by-sa 3.0 with attribution required.