Drupal 7では、template.phpでメニューレンダリングをインターセプトし、メニューリンクの後にパイプを追加するにはどうすればよいですか?
template_preprocess_menu_treeを使用してみましたが、それが私が探しているものではないと思います。いくつかのメニューのHTML構造を変更したいと思います。
function MODULE_preprocess_menu_link(&$variables)
。PS:これも別の質問として尋ねます。
Drupal 7では、template.phpでメニューレンダリングをインターセプトし、メニューリンクの後にパイプを追加するにはどうすればよいですか?
template_preprocess_menu_treeを使用してみましたが、それが私が探しているものではないと思います。いくつかのメニューのHTML構造を変更したいと思います。
function MODULE_preprocess_menu_link(&$variables)
。PS:これも別の質問として尋ねます。
回答:
theme_menu_link()がトリックを行いました。要素の下に配列が含まれ、#original_link
その中にメニュー名が含まれています。それを使用して、特定のメニューにパイプ区切りのリンクを追加できます。
http://api.drupal.org/api/drupal/includes--menu.inc/function/theme_menu_link/7
メニューは、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ファイルからメニューの外観をカスタマイズできるようになります。
これにはプラグインを使用することをお勧めします。ここで完全なチュートリアル:drupal 8でHTMLマークアップを使用してメニューリンクを作成する
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;
}
}