我在Drupal 8 beta 9中构建了一个带有自定义块的模块。当我在模块中创建一个块时,我将它放在src \ Plugin \ Block目录中。该块显示在“块结构”中。列表,但是当我按链接添加它时,没有任何反应。 我查看了我的代码10次,试图把我的文件放到核心模块的目录中(显然只用于测试),试图将一些核心块文件放到我的目录中,复制粘贴代码。这些都不起作用。这是我的块文件的代码:
<?php
/**
* @file
* Contains \Drupal\internetdevels\Plugin\Block\TestBlock.
*/
namespace Drupal\internetdevels\Plugin\Block;
use Drupal\Core\Block\BlockBase;
/**
* Provides 'my custom' block.
*
* @Block(
* id = "my_custom_block",
* admin_label = @Translation("My Custom Block"),
* category = @Translation("System"),
* )
*/
class TestBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
return array('#markup' => 'hello world');
}
}
答案 0 :(得分:8)
在D8中,禁用的块不再自动出现在admin / structure / block下的Disabled下。首先,您必须单击“禁用”区域的“放置块”按钮。然后,您可以从自定义模块中选择块。
答案 1 :(得分:2)
我有同样的问题。我在互联网上发现的非接收不会为我在drupal 8中创建一个块。我最终解决了这个问题。
我为模块名称使用了一些大写字母,例如myBlockModule。这是问题(在我的Windows系统上)。将模块名称更改为myblockmodule以及引用此名称的所有文件都解决了我的问题。
答案 2 :(得分:0)
第4行
你应该改变&#34; TestBlock&#34; to&#34; YourBlockName&#34;因为它是你班级的名字
答案 3 :(得分:0)
你的代码看起来很好我会建议一些检查点
<?php /**
* @file
*/ ?>
检查此示例:http://wiki.workassis.com/drupal-8-creating-custom-block-from-scratch/
答案 4 :(得分:0)
对于未来的访客:
对我来说,当我将类名更改为与文件名完全相同时,问题就解决了(假设文件名只是小写字母或下划线,否则首先重命名文件,然后将类名与文件名匹配。)
实施例:
错误 FILENAME&amp;班级名称:
* / <强> TestBlock.php 强>
<?php
// import & dependancy code
class TestBlock extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
return array('#markup' => 'hello world');
}
}
正确 FILENAME&amp;班级名称:
* / <强> test_block.php 强>
<?php
// code
class test_block extends BlockBase {
/**
* {@inheritdoc}
*/
public function build() {
return array('#markup' => 'hello world');
}
}
答案 5 :(得分:0)
我有一个类似的问题,我从前一个块复制了工作代码,只更改了相关名称,当我启用这个新模块时...... BOOOOM !!!在整个Drupal的任何页面上,一切都崩溃了。
从localhost / phpmyadmin下载错误日志后,我可以看到:
"[Semantical Error] Couldn't find constant references_block, class Drupal\references\Plugin\Block\referencesBlock."
其中:references_block是我的块的元数据名称。 事实证明其中一个引号丢失了。
以下是代码的一部分:
错误代码:
<?php
/**
* @file
*/
namespace Drupal\references\Plugin\Block;
use Drupal\Core\Block\BlockBase;
/**
* Provides a 'references' Block.
* @Block(
* id = references_block", <--------ERROR HERE! missing this: "
* admin_label = @Translation("References Block"),
* )
*/
class referencesBlock extends BlockBase {
}
固定代码:
<?php
/**
* @file
*/
namespace Drupal\references\Plugin\Block;
use Drupal\Core\Block\BlockBase;
/**
* Provides a 'references' Block.
* @Block(
* id = "references_block", <-------- ERROR FIXED!
* admin_label = @Translation("References Block"),
* )
*/
class referencesBlock extends BlockBase {
// lots of code
}
如何从localhost / phpmyadmin下载错误日志:
(如果您匆忙,只需阅读粗体文字)
现在您已经拥有了所需的部分查询,因此更容易,它应该如下所示:
SELECT * FROM `watchdog` WHERE 1
但您仍需要更改
我使用了这个查询:
SELECT variables FROM `watchdog` ORDER BY wid DESC LIMIT 5
这将生成5个名称如下的链接:
[BLOB - 8,8 kB]
答案 6 :(得分:0)
class TestBlock extends BlockBase {
/*
** {@inheritdoc}
*/
public function build() {
return array(
'#markup' => $this->t('Welcome page!'),
);
}
}
使用以下link以编程方式创建新的自定义块。