Drupal 8 - 向链接添加类

时间:2016-09-14 21:53:09

标签: drupal-8

我是Drupal的新手,我非常喜欢它。我正在自己学习,但现在我遇到了问题。

我创建了一个显示标题和链接列表的自定义块。因此,该块中的唯一字段是类型链接。它是我的页脚区域的一个块。因此,当用户点击时,它会在新标签页中打开一个新网站。

我想改变这个块类型的html输出,所以我拿出了这个主题建议: 场 - 嵌段 - 含量 - 场链接 - 页脚-links.html.twig

我的问题是如何为每个>>> l1[2::3], l2[2::3] = l2[2::3], l1[2::3] >>> l1, l2 ([1, 2, 'c', 4, 5, 'f'], ['a', 'b', 3, 'd', 'e', 6]) 标记添加一个类?

我尝试使用模块'链接类'。它有效。它只在安装模块之前读取css中已存在的类。它不会读取安装模块后创建的新类。我尝试了不同的东西,多次清理缓存但很奇怪。必须有一种更好的方法来添加没有模块的类。

有人可以帮助我并向我展示向我的<a>代码添加课程的最佳方法吗?

谢谢:)

这是

的默认模板
<a>

4 个答案:

答案 0 :(得分:5)

将{{item.content}}替换为硬编码链接:

<a href="{{ item.content['#url']|render }}" {% if item.content['#options']['external'] %} target="_blank" {% endif %} class="some class here">{{ item.content['#title'] }}</a>

或者如果您愿意,可以合并课程选项:

{{ item.content|merge({'#options': {'attributes': {'class': ['some', 'class', 'here']}}}) }}

答案 1 :(得分:2)

对于那些喜欢使用php构建html渲染元素的人。 一个非常典型的链接:

  $elements[$delta] = [
    '#type'      => 'link',
    '#title'     => $value,
    '#url'       => Url::fromUri('mailto:' . $value),
    '#attributes' => [
      'class' => ['myClass']
    ]
  ];

答案 2 :(得分:0)

这取决于您如何构建该自定义块。但是就像你说的那样,为了添加一些类而创建一个新模板有点过分。

所以这里有一些关于如何创建链接的好答案,以及如何向类添加类等属性: https://drupal.stackexchange.com/questions/144992/how-do-i-create-a-link

对于不同的情况,答案略有不同,所以请自行寻找最适合您情况的答案。

答案 3 :(得分:0)

我也无法在Drupal 8中扩展Links。 菜单链接,评论表单链接,实时Drupal想要呈现系统链接值。

我的尝试通常是这样的:  1.尝试在使用字段时使用字段覆盖在视图中添加类。

  1. 如果不可能,请检查主题挂钩,通过属性添加类。 (Chrome Drupal模板助手扩展程序有帮助。)我能够将一个类添加到父UL,但不是A的。

  2. 检查树枝模板中的键并使用{{var.name [#url]}}显式呈现。 (Bootstrap Drupal主题在他们的menu.html.twig中执行此操作!)示例:

     a href="{{ item.url }}" class="dropdown-toggle" data-target="#" data-toggle="dropdown">{{ item.title }} 
  3. 如果这3次尝试失败......我通过Javascript添加属性。

    的jQuery( '注释的禁止的。 ')的父()addClass(' 一览无样式');

  4. 我尝试在node.html.twig中向节点链接(登录或注册以发布评论)添加类,并且出现错误提示:

    $variables['content']['links']['#attributes']['class'][] = 'list-unstyled';
    

    指定#lazy_builder回调时,不存在任何属性;所有属性必须由#lazy_builder回调生成。您指定了以下属性:#attributes。在Drupal \ Core \ Render \ Renderer-&gt; doRender()