1

ユーザーに特定の状態があるかどうかに応じて、タイトルとリンクを変更するメニュー項目を作成する必要があります。Drupal はすべてのメニューをキャッシュするので、それを行う方法が思いつきません。

たとえば、ユーザーのプロファイルにノードが接続されていて、メニュー項目が「Create blabla」である (link node/add/blabla) ユーザーがノードを持っていない場合、メニュー項目が「Create notblablabla」である (link node/add/notblabla)

4

6 に答える 6

2

最も簡単な方法はhook_menu、 paramを使用することtitle_callbackです。

thedrupalblog.comおよびdrupal.orgを参照してください。

于 2011-05-24T19:31:57.220 に答える
1

Drupal does not allow for dynamic menu items, but it can hide certain menu items if the user is not allowed to go there. Referring to your example, if you create both the links and use the permission system to restrict the creation of those node types to certain roles, Drupal will only show the menu items if the user has the required role. Maybe that helps in your situation.

Other options are:

  • write a simple module that shows a single link for all users and redirects to the appropriate page when clicked
  • create a custom block which displays the correct link based on the current user (make sure the block is not cached)
  • use javascript like googletorp suggest (although I wouldn't recommend it for the reasons he mentions)
于 2010-02-01T08:56:52.237 に答える
0

おそらく2つのメニュー項目を作成し、テーマシステムを使用して条件に基づいてどちらか一方を非表示にします。

しばらく経ちましたが、私は次のことを確認します。

于 2010-02-02T01:08:23.037 に答える
0
  • これを行う簡単な方法は、JavaScriptを使用することです。jQueryを使用すると、手間をかけずにHTMLを変更できます。これには、ユーザーがJSを有効にしている必要があるため、完全なソリューションではありません。

  • もう1つのオプションは、モジュールで作成したURLにリンクされた単一のメニュー項目を用意することです。条件チェックを行うと、リダイレクト先のURLにユーザーをリダイレクトできます。この方法の唯一の問題は、メニュー項目のタイトルを変更することです。ただし、どちらの場合にも適切な説明を付けることができる場合があります。JSを使用してリンクの名前を変更することもできます。そうすれば、JSがなくても機能はそのまま維持されますが、JSが有効になっているユーザーのUIは改善されます。

于 2010-02-01T08:11:00.360 に答える
0

これを試しましたか(もちろん、他の条件を「if」ステートメントにも挿入します):


function hook_translated_menu_link_alter(&$item, $map) {
  if ($item['href'] == 'node/add/blabla') {
    $item['href'] = 'node/add/notblabla';
  }
}

リンクを変更可能としてマークするには、おそらくこれも行う必要があります。


function hook_menu_link_alter(&$item, $menu) {
  if ($item['link_path'] == 'node/add/blabla') {
    $item['options']['alter'] = TRUE;
  }
}
于 2010-03-16T05:23:40.853 に答える
0

このメニュー項目はユーザー プロファイル情報に基づいているように思われるためhook_menu_alter()、条件に基づいてメニューを変更するために実装する簡単なモジュールを作成することをお勧めします。menu_cache_clear()その後、内部を呼び出してhook_user()、ユーザー プロファイルが変更されたときにメニュー キャッシュを更新できます。

于 2010-02-02T10:04:30.370 に答える