覆盖item-list.html.twig& time.html.twig在视图中

时间:2018-03-16 13:07:46

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

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

所以我做了两件事:

  1. 已复制item-list.html.twig并将<ul>更改为<select>
  2. 已复制time.html.twig并将<time>更改为<option>
  3. 虽然这有效,但我需要将这两个模板作为范围命名为我的视图:'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

1 个答案:

答案 0 :(得分:0)

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

您最好在自定义块中提供自定义表单或自定义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注释,请遵循以下文章:https://www.drupal.org/docs/8/theming/twig/debugging-twig-templates