ユーザーが必要な権限を持っていない場合、ユーザーにローカル タスクを表示する方法はありますか? 現在、Drupal はそれらをページ コードから除外しているようです。それらを表示したいのですが、CSS クラスが異なります。
Drupal のバージョンは 5.20 です
Drupal 5 と 6 の間でローカル タスクの構築に関していくつかの違いがありますが、現在のユーザーがアクセスできないエントリを無視するロジックが menu.inc 関数にかなり深く組み込まれているという Mac の意見は正しいです。自分で探したい場合theme_menu_local_tasks()
は、そこから関数呼び出しを開始して追跡します。
あなたが探している機能を私が実装しなければならないとしたら、メニュー アクセス設定を直接いじるという Mac の提案は避けたいと思います。代わりに、カスタム バージョンで上書きtheme_menu_local_tasks()
し、そこにエントリ取得ロジックを複製します。最初の実行では、以前と同様にプライマリ リンクとセカンダリ リンクをフェッチし、2 回目では別のユーザー(この場合はおそらくユーザー 1) になりすまして同じことを行います。そうすれば、ローカル タスク マークアップの 2 つのバージョンを取得し、現在のユーザーに許可されていないものを見つけるために何らかの方法で比較する必要があったため、追加の CSS クラスが必要になりました。
menu_primary_local_tasks()
と がすでにテーマ化されたリストを返すので、これを行うのはまだいくぶん醜いことに注意してください。そのmenu_secondary_local_tasks()
ため、比較はマークアップで動作する必要があり、おそらく何らかの方法で li タグを解析する必要があります。そのため、同じこと (2 人の異なるユーザーとしてローカル タスクをフェッチする) を試みるのに時間を費やす価値があるかもしれませんが、テーマを設定する前に、低レベルの関数を使用してエントリを取得します。
注:ユーザーの偽装ロジックを使用することになった場合は、偽装中のセッション保存を無効にする安全な 2 番目のバージョンを使用してください。
私は hook_menu の D6 バージョンを D5 バージョンよりもはるかによく知っています。AFAIK - ただし、menu.incでハードコーディングされているため、その動作をオーバーライドすることはできません。
上記のことが正しければ、回避策は次のようになります (かなり洗練されていないことは認めざるを得ません)。
前に述べたように、私は D5 をあまり知りません。そのため、よりクリーンな方法で実際に目的を達成できることも判明するかもしれません。