web-dev-qa-db-ja.com

メニューリンク内にスパンタグを追加するにはどうすればよいですか?

私のtwigファイルには以下が含まれます:

_<li{{ item.attributes.addClass(classes) }}>
   {{ link(item.title, item.url) }}
</li>
_

どの出力:

_<li class="menu-item item--search">
    <a href="#search" title="Expand Search" data-drupal-link-system-path="&lt;front&gt;">Search</a>
</li>
_

しかし、実際に_<span>_タグをテキストSearchの周りに追加したいと思います(スタイルを設定し、テキストをアイコンイメージに置き換えるためです)。

{{ link(item.title, item.url) }}を_<a href="{{item.url}}"><span>{{item.title}}</span></a>_で置き換えてみましたが、link関数(およびmenu_link_attributesモジュール)によって提供される貴重な属性が失われます。 twig=でこれを行うことができるかどうか、または_.theme_ファイルにある種の関数を記述する必要があります。ご協力ありがとうございます。ありがとうございます。

2
Kris Robinson

あなたはこのコードを試すことができます:

{% set tmp = '<span>'~item.title~'</span>' %}
{% set link_text %}{{ tmp|raw }}{% endset %}
{{ link(link_text, item.url) }}
4
Quan Lee

すべてのリンクにマークアップを追加するには、カスタムモジュールに hook_link_alter() を実装します(次の例では、mymoduleという名前です)。

use Drupal\Component\Render\FormattableMarkup;

/**
 * Implements hook_link_alter().
 */
function mymodule_link_alter(&$variables) {
  if (!empty($variables['options']['span_added'])) {
    return;
  }

  $variables['text'] = new FormattableMarkup('<span>@title</span>', [
    '@title' => $variables['text'],
  ]);

  $variables['options']['span_added'] = TRUE;
}
2
Mario Steinitz