Drupal 8 自定义模块“找不到主题挂钩”

Posted

技术标签:

【中文标题】Drupal 8 自定义模块“找不到主题挂钩”【英文标题】:Drupal 8 custom module "theme hook not found" 【发布时间】:2018-08-04 09:51:14 【问题描述】:

我正在为 Drupal 8.4.4 构建一个自定义模块,并且没有从块中检测到 hook_theme。我收到一条错误消息,提示“找不到主题挂钩 gardentheme”。 如果我卸载模块并重新安装它,它可以正常工作,但是一旦我清除缓存,它就不再找到theme_hook。

我注意到 die() 并退出;清除缓存后不会对我的 .module 文件执行任何操作,我觉得清除缓存后 .module 不再运行。

我的模块文件叫做 garden.module

<?php

/**
 * @file
 *
 */


/**
 * Implements hook_theme()
*/ 
function garden_theme($existing, $type, $theme, $path) 

 return array('gardentheme' =>
  array(
    'variables' => array(
      'description' => NULL
      ),
     )
   );
  

我的块放置在 src/Plugin/Block/GardenScheduleBlock.php

 <?php
 namespace Drupal\garden\Plugin\Block;

 use Drupal\Core\Block\BlockBase;

 /**
  * Provides a 'GardenSchedule' Block.
  *
  * @Block(
  *   id = "garden_schedule_block",
  *   admin_label = @Translation("Garden Schedule"),
  *   category = @Translation("Garden Schedule_Category"),
  * )
  */
  class GardenScheduleBlock extends BlockBase 

   /**
    * @inheritdoc
   */
   public function build() 
     return array(
       '#theme' => 'gardentheme',
       '#description' => "description test"
       );
   

  

提前感谢您的任何提示。

【问题讨论】:

我今天遇到了exact同样的问题——正在开发一个非常相似的功能。使用 Drupal 8.4.5 (Acquia Lightning)。似乎对我有帮助的东西(至少我还没能打破它)正在运行core/rebuild.php - 确保在你的 settings/local.settings 文件中启用它 - $settings['rebuild_access'] = TRUE; 这对你有帮助吗?我不确定这与管理员中的 drush cr / 手动缓存重建有何不同。文档状态“即使 Drupal 本身不工作,也会重建所有 Drupal 缓存。” api.drupal.org/api/drupal/core%21rebuild.php/8.1.x 嗨@user2307706,感谢您的评论,但令人惊讶的是我没有再次遇到问题,没有做任何特别的事情,但如果再次发生,我们会考虑您的解决方案。 【参考方案1】:
public function build() 
$renderable = [
  '#theme' => 'my_template',
  '#test_var' => 'test variable',
];

return $renderable;

试试这个

【讨论】:

以上是关于Drupal 8 自定义模块“找不到主题挂钩”的主要内容,如果未能解决你的问题,请参考以下文章

如何 - 构建自定义 drupal 8 模块表单

Drupal 8 更新自定义模块的 language.po 文件

Drupal 8 自定义模块未显示在块布局中

Drupal 8添加javascript并使用自定义模块在钩子中传递数据

drupal 8 ——自定义权限

有啥软件可以自定义字 也就是自己想写啥就写啥 并把写的字弄成