翻译者:长风Drupal开发
原文地址:https://www.drupal.org/docs/8/creating-custom-modules/create-a-custom-block
在Drupal8开发中创建一个自定义区块。
Drupal8中的区块是区块插件的实例。Drupal会扫描的你的模块里面所有包含@Block的类;
下面的例子将使用包含“id”和“admin_label”的@Block来定义自定义区块。
在Drupal8模块中(Drupal8模块开发请参照前面的章节)创建文件:src/Plugin/Block/HelloBlock.php,并且添加下面的代码,然后你必须情况缓存;
<?php namespace Drupal\hello_world\Plugin\Block; use Drupal\Core\Block\BlockBase; /** * Provides a 'Hello' Block. * * @Block( * id = "hello_block", * admin_label = @Translation("Hello block"), * ) */ class HelloBlock extends BlockBase { /** * {@inheritdoc} */ public function build() { return array( '#markup' => $this->t('Hello, World!'), ); } }
如果你想添加“Hello Block”,你可以去admin/structure/block,点击“place block
”按钮。
点击“palce block”按钮将弹出一个对话框,列出所有可用的区块,想快速找到你想要的区块,你可以使用“filter by block name”选项,或者使用鼠标滚动定位到这个“hello block”,这就是为什么你可以添加任何数量的实例到任何地方。
注意:类的名字和文件的名字必须相同, (class HelloBlock 和 /src/Plugin/Block/HelloBlock.php)
确保所有的路径和文件名的正确性,.php必须位于/src/Plugin/Block/目录下面,不然它将不能被Drupal8找到。
在自定义区块中使用twig模板
1、在你的Drupal8模块的.module文件中添加一个_theme hook,
2、在渲染数组时使用“#theme”,并且在同一级别传变量如 '#theme' - '#varname'。