php Drupal 8/9使用自定义模块覆盖wig

3htmauhk  于 2023-05-05  发布在  PHP
关注(0)|答案(2)|浏览(158)

我已经尝试了所有我找到的方法来修改views_view_field,从official docs开始。我也尝试了多种方法和参数的挂钩HOOK_theme(有和没有参数'path','base hook')和HOOK_theme_registry_alter,但我仍然无法使我的模块中的小枝覆盖原来的。
为了使事情更简单,我在没有任何自定义主题的情况下进行测试,没有/templates下的任何文件夹,并且我试图修改的视图链接在管理页面内。树枝建议阐明了正在显示的树枝是“稳定”主题的树枝。

ego6inou

ego6inou1#

主题中的模板优先于模块中的模板,因此您需要实现HOOK_theme_registry_alter来强制Drupal从模块的文件夹中获取模板。

/**
 * Implements hook_theme_registry_alter().
 */
function mymodule_theme_registry_alter(&$theme_registry) {
  // Replace the path to the registered template so that Drupal looks for
  // it in your module's templates folder.
  $theme_registry['views_view_field']['path'] = drupal_get_path('module', 'mymodule') . '/templates';
}

请确保清除缓存以强制更新主题注册表。

368yc8dk

368yc8dk2#

**对于Drupal 9.3.0及以上版本:**Drupal_get_path()和drupal_get_filename()在Drupal 9.3.0中已被弃用,并在Drupal 10.0.0中完全删除。

下面是一个较新版本的工作示例:

/**
 * Implements hook_theme_registry_alter().
 */
function mycustommodule_theme_registry_alter(&$theme_registry) {
  // Override an existing Twig template file with the one provided by my custom module
  $theme_registry['views_view_field']['path'] = \Drupal::service('extension.list.module')->getPath('mycustommodule') . '/tpl';
}

将Twig模板文件放在自定义模块的模板文件夹中(在本例中:/mycustommodule/tpl)。

相关问题