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

自定义块在Drupal 8中不起作用,drupal,drupal-7,drupal-8,Drupal,Drupal 7,Drupal 8,我正在Drupal8Beta9中构建一个带有自定义块的模块。当我在模块中创建一个块时,我将它放在src\Plugin\block目录中。块显示在“块结构”列表中,但当我按链接添加它时,什么也没有发生。 我检查了我的代码10次,试着把我的文件放到核心模块的目录中(显然只是为了测试),试着把一些核心块文件放到我的目录中,复制粘贴代码。这些都不管用。以下是我的块文件的代码: <?php /** * @file * Contains \Drupal\internetdevels\Plugin\

我正在Drupal8Beta9中构建一个带有自定义块的模块。当我在模块中创建一个块时,我将它放在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\yourmodule\Plugin\Block\TestBlock
您应该将“TestBlock”更改为“YourBlockName”,因为它是类的名称

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

您应该将“TestBlock”更改为“YourBlockName”,因为它是D8中类的名称,禁用的块不再自动显示在admin/structure/block上的disabled下。首先,您必须单击禁用区域的“放置块”按钮。然后,您可以从自定义模块中选择块。

在D8中,禁用的块不再自动显示在“管理/结构/块上禁用”下。首先,您必须单击禁用区域的“放置块”按钮。然后,您可以从自定义模块中选择块。

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

  • 检查目录结构
    • 您的模块将位于模块内部
    • 此文件夹应包含youtmodule.info.yml、yourmodule.module和src文件夹
    • 你的Block类应该在src\Plugin\Block\Block.php(在你的例子中是TestBlock.php)中
  • 检查info.yml文件并检查空格位置
  • 检查.module文件如果你没有nythink来写,他只需添加这样的内容,但这个文件是必需的
  • 安装插件
  • 清除缓存

  • 检查此示例:

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

  • 检查目录结构
    • 您的模块将位于模块内部
    • 此文件夹应包含youtmodule.info.yml、yourmodule.module和src文件夹
    • 你的Block类应该在src\Plugin\Block\Block.php(在你的例子中是TestBlock.php)中
  • 检查info.yml文件并检查空格位置
  • 检查.module文件如果你没有nythink来写,他只需添加这样的内容,但这个文件是必需的
  • 安装插件
  • 清除缓存

  • 检查此示例:

    我也有同样的问题。我在互联网上找到的接收器中没有一个能在Drupal8中为我创建块。我终于解决了


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

    我也遇到了同样的问题。我在互联网上找到的接收器中没有一个能在Drupal8中为我创建块。我终于解决了

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

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

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

    <?php
    // import & dependancy code
    class TestBlock extends BlockBase {
    
      /**
       * {@inheritdoc}
       */
      public function build() {
        return array('#markup' => 'hello world');
      }
    
    }
    
    <?php
    // code
    class test_block extends BlockBase {
    
      /**
       * {@inheritdoc}
       */
      public function build() {
        return array('#markup' => 'hello world');
      }
    
    }
    
    未来访客:
    对我来说,当我将类名更改为与文件名完全相同时,问题就解决了(前提是文件名仅为小写字母或下划线,否则先重命名文件,然后将类名与文件名匹配。)

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

    <?php
    // import & dependancy code
    class TestBlock extends BlockBase {
    
      /**
       * {@inheritdoc}
       */
      public function build() {
        return array('#markup' => 'hello world');
      }
    
    }
    
    <?php
    // code
    class test_block extends BlockBase {
    
      /**
       * {@inheritdoc}
       */
      public function build() {
        return array('#markup' => 'hello world');
      }
    
    }
    

    我遇到了一个类似的问题,我从以前的块复制了工作代码,只更改了相关的名称,当我启用这个新模块时。。。嘘!!!在整个Drupal中,任何页面上的所有内容都会崩溃

    从localhost/phpmyadmin下载错误日志后,我可以看到:

    "[Semantical Error] Couldn't find constant references_block, class Drupal\references\Plugin\Block\referencesBlock."
    
    其中:references\u 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
    }
    
    但你仍然需要改变它

  • 我使用了这个查询:

    SELECT variables FROM `watchdog` ORDER BY wid DESC LIMIT 5
    
  • 这将生成5个名为以下内容的链接:
    [BLOB-8,8kb]

  • 从下载最上面的一个开始,如果你不能下载它们(我不能),那么选择在记事本中打开它们,而不是下载
  • 我建议您使用:Sublime Text 3打开文件,该程序几乎可以读取任何内容,您可以在此处获取:

  • 我有一个类似的问题,我从以前的块复制了工作代码,只更改了相关的名称,当我启用这个新模块时。。。嘘!!!在整个Drupal中,任何页面上的所有内容都会崩溃

    从localhost/phpmyadmin下载错误日志后,我可以看到:

    "[Semantical Error] Couldn't find constant references_block, class Drupal\references\Plugin\Block\referencesBlock."
    
    其中:references\u 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
    }
    
    但你仍然需要改变它

  • 我使用了这个查询:

    SELECT variables FROM `watchdog` ORDER BY wid DESC LIMIT 5
    
  • 这将生成5个名为以下内容的链接:
    [BLOB-8,8kb]

  • 从下载最上面的开始,如果你不能下载(我不能),那么选择下载