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

最后发布: 2015-04-07 11:43:13


问题

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

}
drupal drupal-7 drupal-8
回答

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


回答

我遇到过同样的问题。 我在Internet上找到的所有收据都无法为我在drupal 8中创建一个区块。 最后,我解决了。

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


回答

第4行

  • 包含\\ Drupal \\您的模块\\插件\\块\\测试块。

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


回答

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

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

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

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

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


回答

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

示例: 错误的文件名和类名:
* / 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');
  }

}


回答

我有一个类似的问题,我从前一个块复制了工作代码,仅更改了相关名称,当我启用了这个新模块时……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. 导航的顶部 ,您应该看到一个标签: 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


回答

class TestBlock extends BlockBase {

/*
** {@inheritdoc}
*/

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

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