如何在Drupal 8中覆盖field_slider_images的模板文件item-list.html.twig?

时间:2016-12-23 07:19:25

标签: twig drupal-8 drupal-preprocess

我想覆盖项目列表模板文件 core / themes / classy / templates / dataset / item-list.html.twig ,以便列出字段 field_slider_images 以及分别为 field_blog_tags 其字段的多个值。

我选择了"无序列表"在视图中。

请检查附件。

Display Type : Unordered List for field_slider_images

我创建了以下文件:

  1. 项列表 - 现场博客-tags.html.twig
  2. 项列表 - 场 - 滑块 - images.html.twig
  3. 但是,这不会为字段列表呈现。

    当我创建 item-list.html.twig 时,只有它才能访问。

    但是,这两个字段都有不同的样式数据,我无法获取当前字段名称,该名称正在 item-list.html.twig 中加载它的数据。

1 个答案:

答案 0 :(得分:0)

简单地看一下这个并没有“项目列表”来提出建议,这是非常不幸的。

在这种情况下,有两种选择:

  1. 创建您自己的建议,这将完全满足您的需求。 你必须做这样的事情:
  2. /

    /*add new variable to theme with suggestion name*/
    function hook_theme_registry_alter(&$theme_registry) {
      $theme_registry['item_list']['variables']['suggestion'] = '';
    }
    
    //send a value to newly added variable to use it build the suggestion
    function hook_ENTITY_TYPE_view(array &$build, $entity, $display, $view_mode) {
        //add condition here if field exists or whatever, do the same for other field
        $build['field_slider_images']['#suggestion'] = 'field_slider_images';
    
    }
    
    //use newly added variable to build suggestion
    function hook_theme_suggestions_THEME_HOOK(array $variables) {//THEME_HOOK=item_list
    
      $suggestions = array();
      if(isset($variables['suggestion'])){
        $suggestions[] = 'item_list__' . $variables['suggestion'];
      }
    
      return $suggestions;
    }
    

    现在你应该能够使用item-list - field-slider-images.html.twig

    1. 第二个选项是做核心其他人做的事情:使用新主题

      function hook_ENTITY_TYPE_view(array &$build, $entity, $display, $view_mode) { //add condition here if field exists or whatever, do the same for other field $build['field_slider_images']['#theme'] = array( 'item_list', 'item_list__field_slider_images', );

    2. }