【问题标题】:How to override template file item-list.html.twig for field_slider_images in Drupal 8?如何在 Drupal 8 中覆盖 field_slider_images 的模板文件 item-list.html.twig?
【发布时间】:2016-12-23 07:19:24
【问题描述】:

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

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

请检查附件。

我创建了以下文件:

  1. item-list--field-blog-tags.html.twig
  2. item-list--field-slider-images.html.twig

但是,这不是为字段列表呈现的。

当我创建了 item-list.html.twig 之后,只有它可以访问。

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

【问题讨论】:

    标签: twig drupal-8 drupal-preprocess


    【解决方案1】:

    简要地看了一下,“项目列表”似乎没有建议,这很不幸。

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

    1. 创建您自己的建议,这将完全满足您的需要。 您必须执行以下操作:

    /

    /*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', );

    }

    【讨论】:

    • 非常感谢。但是,它适用于节点页面的所有字段。在这个页面中,我使用了 field_slider_images 和 field_blog_tags。如果我应用 function hook_node_view(array &$build, $entity, $display, $view_mode) { //如果字段存在或其他情况,则在此处添加条件,对其他字段执行相同操作 $build['field_slider_images'][' #suggestion'] = 'field_slider_images'; } then 也适用于这两个字段。对于这两个字段,它都有 item-list--field_slider_images.tpl.php。请帮忙
    • 我创建了两个块。一个块渲染 field_slider_images,另一个块渲染 field_blog_tags。之后,我将其附加在节点视图的块区域中。请帮助如何针对两个不同的块为这两个字段创建 item_list。
    • 我不明白 $build['field_slider_images']['#suggestion'] = 'field_slider_images';适用于两个字段,您只需在下一个字段添加其他字段的建议,例如 $build['field_blog_tags']['#suggestion'] = 'field_blog_tags';清除注册表和项目列表--field-slider-images.html.twig 应该可用
    • 我无法获取 hook_ENTITY_TYPE_view 的 $build 中的字段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多