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

时间:2016-02-11 13:48:14

标签: module block drupal-8 drupal-blocks

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

   OrganizationOverview.world:
     path: '/world'
     defaults:
       _controller:      'Drupal\OrganizationOverview\Controller\OrganizationOverviewController::overview'
    _title: 'World'
  requirements:
    _role: 'administrator'
    _permission: 'access content'

现在可以使用网址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');
    }

}

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

3 个答案:

答案 0 :(得分:4)

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

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

您还可以利用解释here的内容,其中单个php文件执行所有工作。检查文件和文件夹路径。

答案 1 :(得分:1)

您应该遵守Drupal编码标准建议: 模块名称中没有camelCase命名约定。

OrganizationOverview实际上是一个错误,您应该使用organization_overview(小写/下划线)命名约定。

答案 2 :(得分:0)

不需要自定义块的路由文件。

<pre>
class TestBlock extends BlockBase {

/*
** {@inheritdoc}
*/

public function build() {
   return array(
     '#markup' => $this->t('Welcome page!'),
   );
   }
}
</pre>

http://drupalasia.com/article/drupal-8-how-create-custom-block-programatically