Drupal8模块开发-创建一个自定义区块

翻译者:长风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'。