Como faço para ligações 'reexibir' menu para conteúdo não autorizado em Drupal 6?

StackOverflow https://stackoverflow.com/questions/1218879

  •  10-07-2019
  •  | 
  •  

Pergunta

Os couros menu Módulo Drupal 6 links para conteúdos que o usuário atual não tem permissão para acessar. Isso faz sentido, mas há momentos em que você pode querer links para ser mostrado e ir para uma página 'você não está autorizado a visualizar este conteúdo' (por exemplo, para fins de marketing).

Existe uma maneira fácil de obter estas informações show? Eu entendo que as versões anteriores do Drupal realmente necessário que você baixe um módulo para desativar os links de páginas não autorizadas!

Foi útil?

Solução 7

Eu encontrei um módulo que realmente parece fornecer a funcionalidade que eu quero:

http: // blogue .davereid.net / content / restrição de conteúdo ainda sem outro-diferente-drupal-nó de acesso do módulo

É muito simples, apenas acrescenta um seletor dentro de cada página de criação de nó onde você pode escolher quais os papéis que terão acesso a ele. Qualquer que não o fazem ainda vai ver o link do menu, e isso vai levar a um costume 'você deve se registrar para ver esta' página. Eu instalei-o em um site Drupal teste e parece funcionar bem; pena que eu não encontrá-lo um par de semanas atrás!

Outras dicas

Tem sido sempre assim (pelo menos desde 4.7).

Você não pode reexibir itens do menu não autorizadas fora da caixa. Pode haver um módulo especial embora ...

O que você poderia fazer, é deixar o ponto página do menu para uma função que redireciona para a página que você deseja que o seu menu para apontar. Este não é o ideal, em muitos aspectos, mas uma vez que todos podem acessar a função que faz o redirecionamento isso deve funcionar. Você canjust colocar esse código em um módulo personalizado que você faz.

Não há nenhuma maneira de fazer isso no padrão Drupal, e eu não estou ciente de quaisquer módulos contribuíram que fornece essa funcionalidade.

Duas soluções vêm vêm à mente para fazer isso facilmente .

  1. Com o mínimo de codificação é para esconder o item de menu real e torná-lo invisível, em seguida, fazer uma página com algum código PHP que redireciona para o item de menu adequado, se o usuário tem acesso, e mostrando algum outro texto para as pessoas que não. Em seguida, basta fazer um item de menu que aponta para o seu nó.

  2. envolve mais de codificação, mas provavelmente será mais robusto. Basta fazer o seu próprio módulo básico com um hook_menu que tem a verificação de acesso oposta ao real item de menu juntamente com uma pequena função de menu callback com o texto que deseja mostrar aos usuários não-privilegiados.

Se você quiser fazer isso para um monte de itens de menu alguma solução mais flexível deve ser encontrada para controlá-lo corretamente.

assumindo que todo o conteúdo é um nó você pode manter menus sem regras de acesso e, em seguida, usar

hook_view($node, $teaser = FALSE, $page = FALSE)

Você pode recusar o acesso a determinados nós ..

esperança de que é útil.

Finalmente eu fiz isso uma forma ligeiramente diferente, através da criação de uma taxonomia para "aberto" ou "restrito" de conteúdo, e colocar isso no cabeçalho do meu tema:

<?php

global $user;

//if the user is not logged in, and the node is in taxonomy term "restricted"
//redirect them to the login page
foreach ($node->taxonomy as $tax){
  if ($tax->name == "Restricted" && !$user->uid){
    $query = 'destination=node/'.$node->nid;
    drupal_goto('please-login-continue',$query);  
  }
}
?>

/ por favor,-login é uma página que eu criei que contém todos os formulários de login / inscrição habituais. Parece funcionar bem para mim até agora!

Nota: Se as pessoas deliberadamente desativar o redirecionamento em seu navegador não serão redirecionadas, no entanto, quando eu tentei no Opera com o redirecionamento desligou a página carregada até o ponto onde o redirecionamento estava tentando acontecer, e então nada depois disso -. de modo que o conteúdo ainda estava restrito neste caso

Kind of tarde, mas isto é como eu trabalhei isso:

/**
 * Implementation of hook_menu()
 */
function mr_gm_menu() {

    $items = array();

    $items['x'] = array(
        'title' => 'X',        
        'page callback' => 'x_view',
        'access arguments' => array('access content'), 
        'type' => MENU_NORMAL_ITEM,
        'menu_name' => 'main-menu',
        'weight' => 10,
    );  

    return $items;
}

function x_view(){

  global $user;

  if ($user->uid):
    drupal_goto('node/add/X');
  else:
    drupal_goto('user');    
  endif;

  return;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top