自定义块在Drupal 8中不起作用

时间:2015-04-07 11:43:13

标签: drupal drupal-7 drupal-8

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

}

7 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

我有同样的问题。我在互联网上发现的非接收不会为我在drupal 8中创建一个块。我最终解决了这个问题。

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

答案 2 :(得分:0)

第4行

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

你应该改变&#34; TestBlock&#34; to&#34; YourBlockName&#34;因为它是你班级的名字

答案 3 :(得分:0)

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

  1. 检查目录结构
    • 您的模块将位于模块内
    • 此文件夹应包含youtmodule.info.yml,yourmodule.module和src文件夹
    • Yor Block类应该在src \ Plugin \ Block \&lt;里面somename&gt; Block.php(在你的情况下是TestBlock.php)
  2. 检查info.yml文件并检查空间插入
  3. 检查.module文件,如果你没有想要写的东西,他只是添加这样的内容但是这个文件是必需的
  4.   

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

    1. 安装插件
    2. 清除缓存
    3. 检查此示例: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下载错误日志:

(如果您匆忙,只需阅读粗体文字

  1. 转到: localhost / phpmyadmin
  2. 找到您的Drupal数据库
  3. 在数据库的底部,您应找到一个名为:watchdog
  4. 点击表格上的以查看看门狗,以便了解
  5. 内的内容
  6. 在顶部您在导航中会看到一个名为 SQL 的标签,点击该
  7. 现在您已经拥有了所需的部分查询,因此更容易,它应该如下所示:

    SELECT * FROM `watchdog` WHERE 1  
    

    但您仍需要更改

  8. 我使用了这个查询:

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

  10. 下载最高版开始,如果您无法下载(我无法),请选择在记事本中打开它们而不是下载。
  11. 我建议您使用:Sublime Text 3 打开文件,该程序几乎可以读取任何内容,您可以在此处获取:https://www.sublimetext.com/3

答案 6 :(得分:0)

class TestBlock extends BlockBase {

/*
** {@inheritdoc}
*/

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

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