如何在主导航菜单中添加登录/注销链接?


8

如何将登录链接添加到“主导航”菜单?

用户单击链接时,应将其带到/ user / login页面。他们登录后,链接应改为“注销”,而不是“登录”。

有什么办法可以添加这样的链接?


我不知道您使用的是哪个主题,但是drupal 8的Bootstrap 3主题默认提供此功能。您可以从块中禁用“我的帐户”项目。所以主导航栏将有登录/注销在右侧,当没有人登录,当有人在登录会消失登录才会出现。
CodeNext

我正在为Drupal 8使用Bootstrap 3主题。我所做的只是您所做的,禁用了“我的帐户”(“用户帐户”菜单)块,但是在右上角没有“登录/注销”链接。有什么我想念的吗?
GTS乔

我刚刚在答案部分发布了图片,因此我们可以对此进行进一步讨论。
CodeNext

您不必禁用整个块吗?按照我在答案中提到的步骤进行操作。
CodeNext

Answers:


10

我们不需要依靠Bootstrap主题或我们的编程技能来移动任何其他菜单上的系统“ 注销 ”链接。Drupal允许我们轻松实现它。

编辑注销链接

在另一个菜单上移动

另外,我们可以只创建两个自定义的“ 请在这里登录 ”和“ / 让我离开那里 ”链接,并使用/ user / login/ user / logout路径。这样做更好,因为与系统“注销”链接不同,它使我们可以使用自定义属性创建任意数量的登录/注销链接。用户登录后,他们只会看到“ 注销 ”链接,反之亦然。唯一的警告是您可能会看到两个链接在一起,因为您在测试链接时已登录。这是正常的,因为您以管理员身份具有“ 链接到任何页面 ”的权限。禁用此权限,然后重试。


4

简而言之,您将创建2个不同的Menu版本,一个带有登录名,另一个带有注销名,并为每个版本赋予不同的可见性角色。

1)编辑菜单,然后添加注销链接。

2)现在您要做的就是配置主菜单链接块 在此处输入图片说明

然后在“角色”中,选中☑身份验证的用户以及☑管理员

在此处输入图片说明

3)现在创建另一个菜单(/admin/structure/menu),其中包含“登录”链接和您需要的所有其他菜单链接。

4)然后转到主菜单中的块(/admin/structure/block)(假设您使用的是Bartik,如果您使用的是自定义主题,则名称可能不同),请单击添加,然后添加刚创建的菜单并对其进行配置。这次是角色,仅选中复选标记☑匿名


我提出了您的建议,但是我创建的自定义菜单块破坏了链接样式(我使用的是Bootstrap主题)。尽管它在功能上有效,但是我不能使用此方法,因为它破坏了新菜单块中的样式。
GTS乔

好吧,不要放弃。如果创建了boostrap主题的人能够向其中添加boostrap div,那么您也可以吗:)
No Sssweat

3

有一种更好的方法。您要做的是创建自己的插件并扩展MenuLinkDefault类。最好看的地方是Drupal / User模块,它提供LoginLogoutMenuLink实现。

如果要例如更改文本或逻辑,则可以定义自己的插件。或者,您可以简单地将其指向现有插件以节省时间,并只需放入现有的implmee。这是一些示例代码:

简单版本:

  • 创建 my_module/my_module.links.menu.yml

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

进阶版本:

  • 将插件复制到您的my_module/src/Plugin/Menu/文件夹中
  • 将其从LoginLogoutMenuLink重命名为MyLoginLogoutMenuLink
  • 更新名称空间以反映您的位置,例如 namespace Drupal\my_module\Plugin\Menu;
  • 在文件中更改class LoginLogoutMenuLink extends MenuLinkDefaultclass MyLoginLogoutMenuLink extends MenuLinkDefault
  • my_module.links.menu.yml按照上面的步骤创建一个,但是确保您像现在命名的那样命名该类,并将其指向您的模块。请参见下面的示例。

您的my_module/src/Plugin/Menu/MyLoginLogoutMenuLink.php外观如下:

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 {
...

您的my_module/my_module.links.menu.yml外观如下:

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

我希望这可以帮助别人。


2

您可以使用Bootstrap 3 Drupal 8主题执行此操作,因为该主题默认提供此功能。我正在发布我的drupal 8试用站点的图像。一个带有登录页面,另一个带有退出页面。

在此处输入图片说明

在此处输入图片说明

你在找这种东西吗?

请遵循以下步骤。

1.转到结构>块。并确保在“导航”部分中进行以下配置。

在此处输入图片说明

2.转到结构>菜单>用户帐户菜单,然后禁用我的帐户,如下图所示。

在此处输入图片说明

因此,正如我在第一对图像中所发布的那样,您的Main Navigation菜单应仅显示Login和Logout。


您在找这个吗?奏效了吗?
CodeNext

1

如果使用Bootstrap子主题,则可以修改此代码以满足您的需求:

<?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; ?>    

将此代码放在块内subtheme / templates / 中的page.tpl.php中,您需要:

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

我将其放在90行之后,在这种情况下,如果有必要在以下位置将其折叠,则它不会在移动设备上折叠:

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

1

通过编程,您可以通过自己的模块.links.menu.yml文件来完成此操作。以下将这些链接放在“主”菜单中:

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

由于每个调用的“ route_name”已经指定了登录/注销要求(请参阅https://api.drupal.org/api/drupal/core%21modules%21user%21user.routing.yml/8.4.x),将根据登录状态显示链接。


不起作用,仍然显示两个链接
No Sssweat
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.