2016-02-11 83 views
3

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

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

所以,现在的概述与URL site.com/world访问。但是我们想要的是将其展示在网站的首页或者在网站上的其他任何地方展示。为此,它需要是一个块。为此,我在OrganizationOverview/src/Plugin/Block/OrganizationOverviewBlock.php中创建了OrganizationOverviewBlock类,这是根据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/为“组织概述块”(刷新缓存,这是我做的一贯之后),我应该启用它,根据很多来源(Create custom BlockBlock API Drupal 8)。但它并没有出现在那里。我尝试过使用其中一些方法实现ContainerFactoryPluginInterface,但这并没有改变。它没有出现。我试着用一个代码相同但名称更简单的块创建一个新的测试模块,但它不显示。我已将代码复制到另一个平台(生产站点),但它也不会显示在那里。我究竟做错了什么?有人能帮我吗?我知道Drupal 8是新的,但这个模块确实需要很快发布。

+0

我投票支持了这个问题要在StackOverflow的关闭,转移到[Drupal的答案](http://drupal.stackexchange.com)。我想你会有更好的机会在那里获得有用的答案。 – marcvangend

+0

检查此http://stackoverflow.com/a/37856161/1153703 –

回答

4

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

就这样,你应该得到可用的块你自己的模块中

你也可以利用解释here的内容,其中一个php文件完成所有工作。也检查文件和文件夹路径。