3

特定の条件下で匿名ユーザーの特定のメニュー項目を非表示にする方法を探しています。特に、いくつかのサブドメインでアフィリエイト向けのサイトを提供していますが、特定のサブドメイン (アフィリエイト) について、いくつかのメニューに表示される「会社概要」ページへのリンクを非表示にしたいと考えています。

「私たちについて」ノードへのアクセスを完全に拒否することについて、あまり気にしているわけではありませんが、これが探索する 1 つの手段になる可能性があることを理解しています。

* hook_menu_alter ですが、これはメニュー ツリーが再構築されたときにのみ呼び出され、特定の匿名セッションのみのアイテムを削除する方法もわかりません。* template_preprocess_menu_link : 可能ですが、アイテムをレンダリングしないように指示する方法。それを非表示にするクラスをメニュー項目に追加することもできますが、特に素晴らしいことではありませんが、うまくいくでしょう。* hook_node_access : このセッションのみのアクセスを防止する方法がわかりません。

どんな考えや指針も歓迎します。

[編集] これをフォローアップするために、解決策が機能していますが、それを誇りに思っているわけではありません。もっと良い方法があるはずです。「hidden」クラスを使用して、css「display:none」属性をリスト項目に追加しています。

function sil_affiliate_preprocess_menu_link(&$variables) {
  $affiliate = get_affiliate_from_session();

  if ($affiliate && !$affiliate->show_aboutus) {
    $real_path = drupal_lookup_path('source','customerservice/aboutus');    
    if ($variables['element']['#original_link']['link_path'] == $real_path) {
      $variables['element']['#attributes']['class'][] = 'hidden';
    }
  }
}

:wq ファミリーマングレッグ。

4

1 に答える 1

1

カスタム モジュールで次のコード サンプルを使用できます。hook_node_accessを実装しています(未テスト)

function [YOUR_MODULE]_node_access($node, $op, $account)
{
    if($account->uid == 0 && $op == "view" && $node->nid == 15)
    {
        return NODE_ACCESS_DENY;
    }
}

これがうまくいくことを願っています...ムハンマド。

于 2012-10-18T13:40:03.817 に答える