Drupal表单模板建议

时间:2018-06-05 19:56:53

标签: drupal drupal-8

我试图使用以下方法创建一个drupal表单建议:

function pfe_theme_suggestions_form_alter(array &$suggestions, array $variables) {
    $suggestions[] = 'form__'. $variables['element']['#id'];
}

但是在创建表单 - user-login-form.html.twig 之后,drupal并未考虑此模板,但始终使用 form.html.twig

这是html评论:

<!-- THEME DEBUG -->
<!-- THEME HOOK: 'form' -->
<!-- FILE NAME SUGGESTIONS:
   * form--user-login-form.html.twig
   x form.html.twig
-->
<!-- BEGIN OUTPUT from 'core/themes/stable/templates/form/form.html.twig' -->

添加HOOK_theme()之后:

function pfe_theme_suggestions_form_alter(array &$suggestions, array $variables) {
   $suggestions[] = 'form__'.$variables['element']['#id']; //form--user-login-form.html.twig
}

function pfe_theme($existing, $type, $theme, $path) {

  return [
    'form__user-login-form' => [
      '#theme' => 'form--user-login-form',
      'render element' => 'form',
    ],
  ];

}

我收到此错误:

Twig_Error_Loader:Template&#34; themes / pfe / templates / form - user-login-form.html.twig&#34;未定义(Drupal \ Core \ Template \ Loader \ ThemeRegistryLoader:无法在Drupal主题注册表中找到模板&#34; themes / pfe / templates / form - user-login-form.html.twig&#34;) 。在Twig_Loader_Chain-&gt; getCacheKey()(/home/marwen/workspace/pfe/themes/pfe/templates/block/block--userlogin.html.twig第43行)。

2 个答案:

答案 0 :(得分:0)

感谢您添加调试输出!

以所有可能的方式刷新所有缓存。

在发生这种情况时,您始终必须尝试的第一件事是以所有可能的方式刷新所有缓存。从Drupal缓存到浏览器缓存,再到服务器缓存(Varnish,Akamai等,如果您使用类似的那样)。

向此主题添加自定义代码或文件(模板)是不行的。

接下来,重要的是您始终创建自定义(子)主题以添加模板。您目前正在使用Drupal的核心主题“Stable”。这意味着Drupal现在会调查__DEV__ === true, development-level warning are ON, performance optimizations are OFF core/themes/stable/templates。但是为这个主题添加自定义代码或文件(模板)是不行的。

为什么?因为下次更新Drupal时它会立即重置。或者,如果您使用其中一个可用的Composer templates,它甚至都不会被提交,因为代码版本控制中会忽略所有核心文件和文件夹。

答案 1 :(得分:0)

使用“ str_replace”将“-”替换为“ _”,例如:

$suggestions[] = 'form__' . str_replace('-','_', $variables['element']['#id']);