1

我创建了一个视图,该视图输出 a中<ul><time>每个元素<li>。我需要将 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在我的视图中?

4

1 回答 1

0

该视图的目的是否仅提供该<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 注释,请遵循本文:https ://www.drupal.org/docs/8/theming/twig/debugging-twig-templates

于 2018-03-18T21:57:58.273 回答