2

我正在 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');
  }

}
4

7 回答 7

9

在 D8 中,禁用的块不再自动出现在 admin/structure/block 的已禁用下。首先,您必须单击禁用区域的“放置块”按钮。然后,您可以从自定义模块中选择块。

于 2015-09-19T00:16:26.203 回答
2

我遇到过同样的问题。我在 Internet 上找到的所有接收器都不能为我在 drupal 8 中创建一个块。最后我解决了。

我为我的模块名称使用了一些大写字母,例如 myBlockModule。这就是问题(在我的 Windows 系统上)。将模块名称更改为 myblockmodule 并且引用此名称的所有文件都为我解决了这个问题。

于 2016-06-23T10:16:39.980 回答
1

我有一个类似的问题,我从前一个块中复制了工作代码,只更改了相关名称,当我启用这个新模块时...... 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 下载错误日志:

(如果您赶时间,请阅读粗体字

  1. 转到:本地主机/phpmyadmin
  2. 查找您的 Drupal 数据库
  3. 在数据库的底部,您应该找到一个名为:watchdog 的表
  4. 点击看门狗的桌子,这样你就可以看到里面有什么
  5. 在导航的顶部,您应该会看到一个名为:SQL的选项卡,单击该选项卡
  6. 现在您已经有了所需的查询的一部分,这样就更容易了,它应该如下所示:

    SELECT * FROM `watchdog` WHERE 1  
    

    但你仍然需要改变它

  7. 我使用了这个查询:

    SELECT variables FROM `watchdog` ORDER BY wid DESC LIMIT 5
    
  8. 这将生成 5 个链接,名称如下:
    [BLOB - 8,8 kB]

  9. 从下载顶部开始,如果你不能下载它们(我不能)然后选择在记事本中打开它们而不是下载。
  10. 我建议您使用:Sublime Text 3打开文件,该程序几乎可以读取任何内容,您可以在此处获取:https ://www.sublimetext.com/3
于 2017-05-05T10:39:16.350 回答
0

第 4 行

  • 包含 \Drupal\yourmodule\Plugin\Block\TestBlock。

您应该将“TestBlock”更改为“YourBlockName”,因为它是您班级的名称

于 2015-04-08T08:55:28.433 回答
0

你的代码看起来不错我会建议一些检查点

  1. 检查目录结构
    • 您的模块将在模块内
    • 此文件夹应包含 youtmodule.info.yml、yourmodule.module 和一个 src 文件夹
    • 你的 Block 类应该在 src\Plugin\Block\< somename >Block.php 内(在你的情况下是 TestBlock.php )
  2. 检查 info.yml 文件并检查空间 intation
  3. 如果您没有 nythink 可以编写,请检查 .module 文件,他只需添加这样的内容,但此文件是必需的

<?php /**
* @file
*/ ?>

  1. 安装插件
  2. 清除缓存

检查此示例:http ://wiki.workassis.com/drupal-8-creating-custom-block-from-scratch/

于 2016-06-16T10:10:34.607 回答
0
class TestBlock extends BlockBase {

/*
** {@inheritdoc}
*/

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

使用以下链接以编程方式创建新的自定义块。

于 2017-07-06T15:15:15.287 回答
0

对于未来的访问者:
对我来说,当我将类名更改为与文件名完全相同时,问题就解决了(只要文件名只有小写字母或下划线,否则先重命名文件,然后将类名与文件名匹配.)

示例: 错误的文件和类名: */ TestBlock.php

<?php
// import & dependancy code
class TestBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    return array('#markup' => 'hello world');
  }

}

正确的文件名和类名:
*/ test_block.php

<?php
// code
class test_block extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {
    return array('#markup' => 'hello world');
  }

}
于 2017-04-19T14:36:52.457 回答