我正在寻找一种在特定条件下隐藏匿名用户特定菜单项的方法。特别是,我为多个子域名的关联公司提供网站,对于某些子域名(关联公司),我想隐藏链接到我的“关于我们”页面,该页面出现在几个菜单中。
我并没有过分担心完全拒绝访问“关于我们”节点,但是要明白这可能是一个可以探索的途径。
到目前为止,我看过: * 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 Familymangreg。
答案 0 :(得分: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;
}
}
希望这有效......穆罕默德。