Como adicionar um link de Login / Logout no menu de navegação principal?

8

Como posso adicionar um link de login ao menu "Navegação principal"?

Quando um usuário clica no link, ele deve ser levado à página / user / login. Após o login, o link deve mudar para "Logout" em vez de "Login".

Existe alguma maneira de adicionar esse link?

GTS Joe
fonte
Não sei qual tema você está usando, mas o tema do Bootstrap 3 para o drupal 8 fornece esse recurso por padrão. Você pode desativar o item Minha conta no bloco. Portanto, a barra de navegação principal terá o Login / Logout no lado direito e o Login aparecerá apenas quando ninguém estiver logado e desaparecerá quando alguém estiver logado.
CodeNext
Estou usando o tema do Bootstrap 3 para o Drupal 8. Fiz exatamente o que você fez, desative o bloco Minha conta (menu Conta do usuário), mas não há nenhum link Login / Logout no canto direito. Tem algo que estou perdendo?
GTS Joe
Acabei de postar na seção de respostas a imagem, para que possamos discutir mais sobre isso.
CodeNext
Você não precisa desativar o bloco inteiro? siga as etapas mencionadas na resposta.
CodeNext

Respostas:

10

Não precisamos depender do tema do Bootstrap ou de nossas habilidades de programação para mover o link " Logout " do sistema em qualquer outro menu. Drupal nos permite torná-lo facilmente.

editar link Sair

mudar para outro menu

Além disso, podemos apenas criar dois links personalizados " Faça login aqui por favor " e " Tire-me de lá " com os caminhos / user / login e / user / logout relativamente. Isso é melhor porque, diferentemente do link "Logoff" do sistema, criamos quantos links de logoff / logout desejamos com atributos personalizados. Quando o usuário fez login, eles verão apenas " o link Sair " e vice-versa. A única ressalva é que você provavelmente verá os dois links juntos porque está logado no momento do teste dos links. E isso é normal, pois você tem a permissão " Vincular a qualquer página " como administrador. Desative essa permissão e tente novamente.

drugan
fonte
4

Para encurtar a história, você cria duas versões diferentes do menu, uma com login e outra com logout, e atribui a cada versão funções de visibilidade diferentes.

1) menu Editar e adicione o link de logout.

2) Agora tudo o que você precisa fazer é configurar o bloco de links do menu principal insira a descrição da imagem aqui

Em Funções, marque ☑ Usuários autenticados e também ☑ Administrador

insira a descrição da imagem aqui

3) Agora crie outro Menu ( /admin/structure/menu) que possui o link "login" e todos os outros links de menu necessários.

4) Em seguida, vá para os blocos ( /admin/structure/block) no menu principal (supondo que você esteja usando Bartik, pode ter um nome diferente se estiver usando um tema personalizado), clique em adicionar e adicione o menu que você acabou de criar e configure-o. Desta vez, para Funções, apenas a marca de seleção ☑ Anônimo

Sem suor
fonte
Fiz sua sugestão, mas o bloco de menu personalizado que eu cria quebra os estilos de link (estou usando o tema Bootstrap). Embora funcione em termos de funcionalidade, não posso usar esse método porque ele quebra os estilos no novo bloco de menu.
GTS Joe
Bem, não desista. Se a pessoa que criou o tema boostrap foi capaz de adicionar os divs boostrap a ele, você também pode:)
Sem Sssweat
3

Existe uma maneira melhor de fazer isso. O que você deseja fazer é criar seu próprio plug-in e estender a classe MenuLinkDefault. O melhor lugar para procurar é o módulo Drupal / User, que fornece a implementação LoginLogoutMenuLink.

Você pode definir seu próprio plugin se quiser, por exemplo, alterar o texto ou a lógica. Como alternativa, você pode simplesmente apontar para o plug-in existente para economizar tempo e simplesmente colocar o implemento existente. Aqui está um exemplo de código:

Versão simples:

  • Crio my_module/my_module.links.menu.yml

    my_module.logout:
      weight: 10
      menu_name: my-custom-menu
      class: Drupal\user\Plugin\Menu\LoginLogoutMenuLink

Versão avançada:

  • Copie o plug-in para sua my_module/src/Plugin/Menu/pasta
  • Renomeie-o de LoginLogoutMenuLink para MyLoginLogoutMenuLink
  • Atualize o espaço para nome para refletir sua localização, por exemplo namespace Drupal\my_module\Plugin\Menu;
  • No arquivo, mude class LoginLogoutMenuLink extends MenuLinkDefaultparaclass MyLoginLogoutMenuLink extends MenuLinkDefault
  • Crie um my_module.links.menu.ymlcomo acima, mas certifique-se de nomear a classe como a nomeou agora e aponte-a para o seu módulo. Veja o exemplo abaixo.

Você my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.phpdeve ter a seguinte aparência:

namespace Drupal\my_module\Plugin\Menu;

use Drupal\Core\Menu\MenuLinkDefault;
use Drupal\Core\Menu\StaticMenuLinkOverridesInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * A menu link that shows "Log in" or "Log out" as appropriate.
 */
class MyLoginLogoutMenuLink extends MenuLinkDefault {
...

Você my_module/my_module.links.menu.ymldeve ter a seguinte aparência:

my_module.logout:
  weight: 10
  menu_name: my-custom-menu
  class: Drupal\my_module\Plugin\Menu\MyLoginLogoutMenuLink

Espero que isso ajude alguém.

JNP Web Developer
fonte
2

Você pode fazer isso com o tema Bootstrap 3 Drupal 8, pois esse tema fornece esse recurso por padrão. Estou postando a imagem do meu site de teste do drupal 8. Um com a página de login e o outro com a página de logout.

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Você está parecendo esse tipo de coisa?

Siga os seguintes passos.

1. Vá para Estruturas> Blocos. E certifique-se da seguinte configuração na seção Navegação.

insira a descrição da imagem aqui

2. Vá para Estruturas> Menus> Menu Conta do usuário e desative Minha conta, como mostrado na imagem a seguir.

insira a descrição da imagem aqui

Portanto, seu menu de navegação principal deve mostrar apenas o login e o logout, como eu publiquei no primeiro par de imagens.

CodeNext
fonte
Você estava procurando por isso? funcionou?
CodeNext
1

Se você usar o subtema Bootstrap, poderá modificar este código para atender às suas necessidades:

<?php global $user; if ($user->uid): ?>   
    <a href="/user/logout" type="button" class="navbar-brand" role="button">Logout</a>
<?php endif; ?>    

<?php global $user; if (!$user->uid): ?>   
    <a href="/user" type="button" class="navbar-brand" role="button">Login</a>
<?php endif; ?>    

Coloque esse código em page.tpl.php no subtema / templates / dentro do bloco, onde você precisa:

< div class="navbar-header"> ... < /div>

Coloquei depois da linha 90, caso em que não entra em colapso em um dispositivo móvel, se for necessário que seja dobrado depois:

<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
makbuk
fonte
1

Programaticamente, você pode fazer isso através do .links.menu.ymlarquivo do seu próprio módulo . A seguir, esses links são colocados no menu "Principal":

mymodule.sign_in:
  title: 'Sign in'
  parent: system.menu.main
  description: 'Sign in'
  route_name: user.login
  weight: 100
  menu_name: main

mymodule.sign_out:
  title: 'Sign out'
  parent: system.menu.main
  description: 'Sign out'
  route_name: user.logout
  weight: 101
  menu_name: main

Como o "route_name" que cada um deles está chamando já especifica o requisito de logoff / logout (consulte https://api.drupal.org/api/drupal/core%21modules%21user%21user.routing.yml/8.4.x ), os links serão exibidos dependendo do status de logon.

markfullmer
fonte
Não funcionar, ainda mostra as duas ligações
Não Sssweat