web-dev-qa-db-ja.com

メニューリンク出力のカスタマイズ

Drupal 7では、template.phpでメニューレンダリングをインターセプトし、メニューリンクの後にパイプを追加する方法を教えてください。

Template_preprocess_menu_treeを使用してみましたが、それが私が探しているものではないと思います。いくつかのメニューのHTML構造を変更したい。

7
Kevin

theme_menu_link() トリックを行いました。 #original_linkの要素の下に、メニュー名が含まれる配列が含まれています。それを使用して、特定のメニューにパイプ区切りのリンクを追加できます。

http://api.drupal.org/api/drupal/includes--menu.inc/function/theme_menu_link/7

7
Kevin

これは役に立ちます。前処理関数を使用して、メニューリンクを変更または追加できます。

function THEME_preprocess_menu_link(&$variables) {
  $variables['element']['#below']['#markup'] = ' <span>→</span>';
}

このコードでは、すべてのナビゲーションリンクアイテムにスパンが追加されています。

5
kalabro

個人的には、CSSを使用してパイプを追加するだけです-パイプは純粋にプレゼンテーションであるため、マークアップにパイプを必要としません。

.breadcrumb li:after {
  content: "|";
  margin: 0 5px; // optional styling nicety
}

.breadcrumb li:last-child::after {
  content: "";
}
5
danbohea

メニューは、theme_links関数でテーマ化されています。 [themes folder] /MYTHEME/template.phpにコピーを作成し、MYTHEME_linksに名前を変更します。 drupal 7のデフォルト関数は次の場所にあります。 http://api.drupal.org/api/drupal/includes--theme.inc/function/theme_links/ 7

これで、テンプレートの外観をtemplate.phpファイルからカスタマイズできるようになります。

1
Gelus

これにはプラグインを使用することをお勧めします。ここで完全なチュートリアル: HTMLマークアップを含むメニューリンクをdrupal 8 に作成します

namespace Drupal\MYMODULE\Plugin\Menu;

use Drupal\Core\Menu\MenuLinkDefault;

/**
 * A menu link that displays number of points.
 */
class MyMessagesMenuLink extends MenuLinkDefault {

  /**
   * {@inheritdoc}
   */
  public function getTitle() {
    $count = 0;
    if(\Drupal::currentUser()->isAuthenticated()) {
      // Load in your count here
      ...
    }
    return $this->t('My messages <span class="badge badge-dark">@count</span>', ['@count' => $count]);
  }

  /**
   * {@inheritdoc}
   */
  public function getCacheMaxAge() {
    return 0;
  }

}
0

メニューオプションでHTMLを使用すると、モジュールからも非常に便利です。つまり、メニューオプションとして画像を挿入できます。 function MODULE_preprocess_menu_link(&$variables)のようなものを使用する方法はありますか?.

PS:これも別の質問として尋ねます。

0
Gabriel R.