【问题标题】:Include html text inside a Drupal 8 generated link在 Drupal 8 生成的链接中包含 html 文本
【发布时间】:2016-06-06 19:18:24
【问题描述】:

我很难通过 Drupal 8 渲染结构设置链接样式。 此链接需要显示在我的自定义模块中:

$add_link = \Drupal::l('<i class="fa fa-cog"></i>' . t('Add new project'), $url);

因此,在 de 标签之间,我希望在文本前面有一个 Font Awesome 图标。 但是 Drupal 将所有 html 打印为可读文本。

我还注意到 l() 函数在 Drupal 8 中已被弃用。 那么在 Drupal 8 渲染结构中执行此操作的最佳方法是什么?

【问题讨论】:

    标签: font-awesome drupal-8


    【解决方案1】:

    花了我一段时间,但这应该可以。您的代码有一个 $url 变量,它可能工作正常,但下面的代码也显示了我是如何得到我的 $url 的。

    $url = new Url(
      'entity.eab_contact_entity.edit_form', array(
        'eab_contact_entity' => $entity->id(),
      )
    );
    $icon_text = $this->t('<i class="fa fa-pencil"></i>');
    $edit_link = \Drupal::service('link_generator')->generate($icon_text, $url);
    

    事实证明,进入链接的任何文本都必须是“安全的”,这样就不能注入恶意代码等。如果你好奇,这里已经详细讨论过:https://www.drupal.org/node/2273923

    不过,上面的代码对我有用并回答了你的问题,主要的一点是 $this-&gt;t() 包围了 font-awesome 字符串 @987654327 @。这使它变得“安全”,并且生成的链接具有我们想要的 HTML,而不仅仅是打印出 HTML 的文本。

    最后,如果您正在寻找生成 URL 的帮助,this tutorial 有很多提示。

    【讨论】:

      【解决方案2】:

      如果您像我一样想使用 #type =&gt; 'link' 的渲染数组并在其中包含一个图标,那么您可以执行以下操作:

      <?php
      use Drupal\Core\Render\Markup;
      use Drupal\Core\Url;
      
      $form['actions']['reset_password'] = [
        '#type' => 'link',
        '#title' => Markup::create('<span class="glyphicon glyphicon-cog"></span> Forgot / Reset Password'),
        '#url' => Url::fromRoute('user.pass'),
      ];
      

      【讨论】:

        【解决方案3】:

        或者,如果您需要在链接标题中传递特殊字符,例如 &amp;shy; 或任何 HTML 标记,您也可以使用以下内容:

        $link_text = Markup::create('<div>' . $node->getTitle() . '</div>');
        $link = Link::fromTextAndUrl($link_text, $node->toUrl());
        

        【讨论】:

          猜你喜欢
          • 2019-09-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-30
          • 2017-04-16
          • 1970-01-01
          • 2020-03-14
          相关资源
          最近更新 更多