我在 Drupal 8 中的自定义块未显示在块布局中
My Custom Block in Drupal 8 does not show up in Block Layout
我正在 Drupal 8 中开发自定义模块。它显示有关使用我们服务的一些组织的数据。为此,我创建了一个控制器来显示数据库中的数据,这些数据由另一个模块放在那里。从有关 Drupal 8 开发的稀缺信息和教程中,我已经能够创建以下内容。在 .routing.yml 文件中,我创建了一个指向此概述 table 的路径(它没有正确复制到此处,但缩进没问题):
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
class,这是根据 PSR-4 标准的正确方法。 class 看起来像这样:
<?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/
的块布局页面中(刷新缓存后,我一直这样做)作为 "Organization Overview Block" 我应该启用它的地方,根据大量消息来源(Create custom Block, Block API Drupal 8).但它没有出现在那里。我已经尝试使用其中一些方法实现 ContainerFactoryPluginInterface,但这没有任何改变。它没有出现。我已经尝试使用具有相同代码但名称更简单的块制作一个新的测试模块,但它没有显示出来。我已将代码复制到另一个平台(生产站点),但它也没有显示在那里。我究竟做错了什么?有人能帮我吗?我知道 Drupal 8 是新的,但这个模块确实需要尽快发布。
您将在 Drupal 示例项目中找到构建自定义块的工作示例。所以:
- 获取Drupal 8 examples项目
- 启用块示例模块
- 仔细检查工作代码
这样,您应该可以在自己的模块中使用您的块
您还可以利用 here 的解释,其中单个 php 文件完成所有工作。还要检查文件和文件夹路径。
自定义块不需要路由文件。
<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
您应该遵守 Drupal 编码标准建议:
模块名称中没有驼峰命名约定。
OrganizationOverview 实际上是一个错误,你应该使用organization_overview (lowercase/underscore) 命名规则。
我正在 Drupal 8 中开发自定义模块。它显示有关使用我们服务的一些组织的数据。为此,我创建了一个控制器来显示数据库中的数据,这些数据由另一个模块放在那里。从有关 Drupal 8 开发的稀缺信息和教程中,我已经能够创建以下内容。在 .routing.yml 文件中,我创建了一个指向此概述 table 的路径(它没有正确复制到此处,但缩进没问题):
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
class,这是根据 PSR-4 标准的正确方法。 class 看起来像这样:
<?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/
的块布局页面中(刷新缓存后,我一直这样做)作为 "Organization Overview Block" 我应该启用它的地方,根据大量消息来源(Create custom Block, Block API Drupal 8).但它没有出现在那里。我已经尝试使用其中一些方法实现 ContainerFactoryPluginInterface,但这没有任何改变。它没有出现。我已经尝试使用具有相同代码但名称更简单的块制作一个新的测试模块,但它没有显示出来。我已将代码复制到另一个平台(生产站点),但它也没有显示在那里。我究竟做错了什么?有人能帮我吗?我知道 Drupal 8 是新的,但这个模块确实需要尽快发布。
您将在 Drupal 示例项目中找到构建自定义块的工作示例。所以:
- 获取Drupal 8 examples项目
- 启用块示例模块
- 仔细检查工作代码
这样,您应该可以在自己的模块中使用您的块
您还可以利用 here 的解释,其中单个 php 文件完成所有工作。还要检查文件和文件夹路径。
自定义块不需要路由文件。
<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
您应该遵守 Drupal 编码标准建议: 模块名称中没有驼峰命名约定。
OrganizationOverview 实际上是一个错误,你应该使用organization_overview (lowercase/underscore) 命名规则。