【问题标题】:Override item-list.html.twig & time.html.twig inside a view在视图中覆盖 item-list.html.twig 和 time.html.twig
【发布时间】:2018-03-16 13:07:46
【问题描述】:

我创建了一个输出<ul> 的视图,每个<li> 中都有一个<time> 元素。我需要将 HTML 列表转换为选择。

所以我做了两件事:

  1. 已复制item-list.html.twig 并将<ul> 更改为<select>
  2. 复制time.html.twig并将<time>更改为<option>

虽然这可行,但我需要将这 2 个模板限定在名为“vcon-selection-table”的视图中。我尝试了很多东西,但没有任何效果:

  • views-view-table--vcon-selection-table--item-list.html
  • views-view-table--vcon-selection-table-item-list.html
  • views-view-table--vcon-selection-table.html--dataset-item-list

所以问题是:我应该使用什么模板名称来覆盖视图中的模板item-list.html.twigtime.html.twig

【问题讨论】:

    标签: drupal drupal-views drupal-8 drupal-templates


    【解决方案1】:

    该视图的目的是仅提供<select> 元素和<option> 元素吗?那么这真的不是办法。不要使用视图构建表单或表单元素。

    您最好在自定义块中提供自定义表单或自定义 item_list。然后可以将块放置在您需要的任何地方。那里有很多教程。不妨以以下为出发点:https://valuebound.com/resources/blog/creating-a-custom-form-in-a-block-in-two-steps-in-Drupal-8


    否则,如果您真的想继续您的道路,我认为您必须简单地预处理列表和时间字段以根据您所需的条件切换到不同的模板。我强烈猜测没有选项可以通过命名模式自动考虑视图中节点的字段的自定义模板。您必须先手动添加该模板建议。

    要放置在MYMODULE.module 文件或MYTHEME.theme 文件中的片段。

    /**
     * Implements hook_theme_suggestions_HOOK_alter().
     */
    function MYMODULE/MYTHEME_theme_suggestions_item_list_alter(array &$suggestions, array $variables) {
    
      // Use \Drupal::routeMatch() to get the current view ID or some other indicator.
      // Sample: Get the current view ID.
      $view_id = \Drupal::routeMatch()->getRouteObject()->getDefault('view_id');
    
      // Install Devel, Kint module, then uncomment the following line and flush caches to inspect the outcome.
      // ksm($view_id);
    
      // Add the template suggestion.
      // Add your template now under /templates/item-list--VIEWID.html.twig
      if (!empty($view_id)) {
        $suggestions[] = 'item_list__' . $view_id;
      }
    }
    

    这种方法的缺点是这会触发所有在该确切页面/视图上的item_lists 采用此模板。您可以使用自定义模块和自定义 item_list 和/或表单更好地细化您的模板。

    另外,您还可以将逻辑移动到日期字段和自定义视图模式以及为此提供的额外模板。那么至少它会留在它所属的地方。


    要启用 Twig 调试并获取打印为 HTML cmets 的内置模板建议,请遵循这篇文章:https://www.drupal.org/docs/8/theming/twig/debugging-twig-templates

    【讨论】:

    • 一个外部工具(mautic)正在使用脚本标签在页面内生成一个表单。所以我不需要构建表单,但我确实需要使用额外的选择元素来增加生成的表单。该视图是一个节点列表(内容类型:课程),人们可以在其中注册特定日期的课程。课程的创建者可以使用在内容类型上设置的日期字段添加日期。
    • @kevinius - 再说一遍:不要用视图构建表单(或表单元素)。您的问题缺少更详细的信息,但据我所知,我会说您最好使用一些预处理钩子将自定义表单(使用 Drupal 的表单 API 构建)附加到您的视图或节点,并且该表单需要一些参数填充选项。
    • @kevinius - 不过,如果你想继续你的路,我认为你可能必须简单地预处理列表和时间字段,以根据你想要的条件切换到不同的模板。我强烈猜测没有选项可以通过命名模式自动考虑视图中节点的字段的自定义模板。您必须先手动添加该模板建议。
    • 我应该使用什么代码来添加特定的模板建议,以便我可以在我的视图中覆盖模板 item-list.html.twig 和 time.html.twig。
    • $view_id 返回 null... 我在页面中包含视图的方式是使用 twig 调整函数:{{ drupal_view('vcon_selection_tablle') }} in ds-2col-stacked-fluid- -node-academy.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多