我在 Drupal 8 中的自定义块没有显示在块布局中

Jac*_*ues 5 module block drupal-8 drupal-blocks

我正在 Drupal 8 中开发一个自定义模块。它显示有关使用我们服务的一些组织的数据。为此,我创建了一个控制器,用于显示数据库中的数据,该数据由另一个模块放在那里。从 Drupal 8 开发中可用的稀缺信息和教程中,我已经能够创建以下内容。在 .routing.yml 文件中,我像这样创建了一个到这个概览表的路径(它在这里没有正确复制,但缩进没问题):

   OrganizationOverview.world:
     path: '/world'
     defaults:
       _controller:      'Drupal\OrganizationOverview\Controller\OrganizationOverviewController::overview'
    _title: 'World'
  requirements:
    _role: 'administrator'
    _permission: 'access content'
Run Code Online (Sandbox Code Playgroud)

所以现在可以通过 URL 访问概览site.com/world。但我们想要的是将其显示在首页或网站上的其他任何位置。为此,它需要是一个块。为此,我创建了一个OrganizationOverviewBlock类,OrganizationOverview/src/Plugin/Block/OrganizationOverviewBlock.php其中根据 PSR-4 标准是正确的方法。这个类看起来像这样:

<?php

namespace Drupal\OrganizationOverview\Plugin\Block;

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Session\AccountInterface;

/**
 * Provides a 'OrganizationOverviewBlock' block.
 *
 * @Block(
 *  id = "organization_overview_block",
 *  admin_label = @Translation("OrganizationOverviewBlock"),
 *  category = @Translation("Custom")
 * )
 */
class OrganizationOverviewBlock extends BlockBase 
{


    public function build()
    {
        return array(
            '#markup' => 'Hello World',
        );
    }

    public function blockAccess(AccountInterface $account)
    {
        return $account->hasPermission('access content');
    }

}
Run Code Online (Sandbox Code Playgroud)

所以现在它应该显示在块布局页面中(在刷新缓存之后,我一直这样做)site.com/admin/structure/block/作为“组织概述块”,根据大量来源(创建自定义块块 API Drupal 8),我应该在其中启用它。但它没有出现在那里。我已经尝试使用其中一些方法实现 ContainerFactoryPluginInterface ,但这没有任何改变。它没有出现。我尝试使用具有相同代码但名称更简单的块制作一个新的测试模块,但它没有显示出来。我已将代码复制到另一个平台(生产站点),但它也没有显示在那里。我究竟做错了什么?有人能帮我吗?我知道 Drupal 8 是新的,但这个模块真的需要尽快发布。

aug*_*sto 5

您将在 Drupal 示例项目中找到构建自定义块的工作示例。所以:

  • 获取Drupal 8 示例 项目
  • 启用块示例模块
  • 仔细检查工作代码

有了这个,你应该让你的块在你自己的模块中可用

您还可以利用这里解释的内容,其中一个 php 文件可以完成所有工作。还要检查文件和文件夹路径。