如何将登录链接添加到“主导航”菜单?
用户单击链接时,应将其带到/ user / login页面。他们登录后,链接应改为“注销”,而不是“登录”。
有什么办法可以添加这样的链接?
如何将登录链接添加到“主导航”菜单?
用户单击链接时,应将其带到/ user / login页面。他们登录后,链接应改为“注销”,而不是“登录”。
有什么办法可以添加这样的链接?
Answers:
我们不需要依靠Bootstrap主题或我们的编程技能来移动任何其他菜单上的系统“ 注销 ”链接。Drupal允许我们轻松实现它。
另外,我们可以只创建两个自定义的“ 请在这里登录 ”和“ / 让我离开那里 ”链接,并使用/ user / login和/ user / logout路径。这样做更好,因为与系统“注销”链接不同,它使我们可以使用自定义属性创建任意数量的登录/注销链接。用户登录后,他们只会看到“ 注销 ”链接,反之亦然。唯一的警告是您可能会看到两个链接在一起,因为您在测试链接时已登录。这是正常的,因为您以管理员身份具有“ 链接到任何页面 ”的权限。禁用此权限,然后重试。
简而言之,您将创建2个不同的Menu版本,一个带有登录名,另一个带有注销名,并为每个版本赋予不同的可见性角色。
1)编辑菜单,然后添加注销链接。
然后在“角色”中,选中☑身份验证的用户以及☑管理员
3)现在创建另一个菜单(/admin/structure/menu),其中包含“登录”链接和您需要的所有其他菜单链接。
4)然后转到主菜单中的块(/admin/structure/block)(假设您使用的是Bartik,如果您使用的是自定义主题,则名称可能不同),请单击添加,然后添加刚创建的菜单并对其进行配置。这次是角色,仅选中复选标记☑匿名
:)
有一种更好的方法。您要做的是创建自己的插件并扩展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/文件夹中namespace Drupal\my_module\Plugin\Menu;class LoginLogoutMenuLink extends MenuLinkDefault为class MyLoginLogoutMenuLink extends MenuLinkDefaultmy_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
我希望这可以帮助别人。
您可以使用Bootstrap 3 Drupal 8主题执行此操作,因为该主题默认提供此功能。我正在发布我的drupal 8试用站点的图像。一个带有登录页面,另一个带有退出页面。
你在找这种东西吗?
请遵循以下步骤。
1.转到结构>块。并确保在“导航”部分中进行以下配置。
2.转到结构>菜单>用户帐户菜单,然后禁用我的帐户,如下图所示。
因此,正如我在第一对图像中所发布的那样,您的Main Navigation菜单应仅显示Login和Logout。
如果使用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">
通过编程,您可以通过自己的模块.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),将根据登录状态显示链接。