「メインナビゲーション」メニューにログインリンクを追加するにはどうすればよいですか?
ユーザーがリンクをクリックすると、/ user/loginページに移動します。ログインすると、リンクが「ログイン」ではなく「ログアウト」に変わるはずです。
そのようなリンクを追加する方法はありますか?
他のメニューのシステム「ログアウト」リンクを移動するために、Bootstrapテーマやプログラミングスキルに依存する必要はありません。 Drupalを使用すると、簡単に作成できます。
さらに、2つのカスタム "Log me me here here"および "Get me out from there"リンク(/ user/loginおよび/ user/logoutパスは比較的です。システムの「ログアウト」リンクとは異なり、カスタム属性を使用して必要な数のログイン/ログアウトリンクを作成できるため、これはより良い方法です。ユーザーがログインすると、「Log out」リンクのみが表示され、逆も同様です。唯一の注意点は、リンクのテスト時にログインしているため、おそらく両方のリンクが一緒に表示されることです。また、管理者として「任意のページへのリンク」権限があるため、これは正常です。この権限を無効にして、もう一度お試しください。
簡単に言うと、ログインとログアウトの2つの異なるメニューバージョンを作成し、各バージョンに異なる可視性の役割を与えます。
1)編集メニュー、およびログアウトリンクを追加します。
2)今しなければならないことは、configureメインメニューのリンクブロック
次に、ロールでチェックマークを付け、☑認証されたユーザーと☑管理者にチェックマークを付けます
3)次に、別のメニュー(/admin/structure/menu
)「ログイン」リンクとその他の必要なすべてのメニューリンクがあります。
4)次に、ブロック(/admin/structure/block
)inPrimary Menu(Bartikを使用している場合、カスタムテーマを使用している場合は別の名前になる可能性があります)追加をクリックし、作成したメニューを追加して構成します。今回はロール、チェックマークのみonly匿名
これを行うには、より良い方法があります。やりたいことは、独自のプラグインを作成し、MenuLinkDefaultクラスを拡張することです。調べるのに最適な場所は、LoginLogoutMenuLink実装を提供するDrupal/Userモジュールです。
たとえばテキストやロジックを変更したい場合は、独自のプラグインを定義できます。または、既存のプラグインをポイントするだけで時間を節約し、既存の実装を単純に配置することもできます。ここにいくつかのサンプルコードがあります:
シンプルバージョン:
作成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 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
これが誰かの役に立つことを願っています。
これは Bootstrap Drupal 8テーマで行うことができます。そのテーマはデフォルトでこの機能を提供するためです。私は画像を投稿していますdrupal 8つの試用サイト。1つはログインページ、もう1つはログアウトページです。
そんなもの探してるの?
以下の手順に従ってください。
1。構造>ブロックに移動します。ナビゲーションセクションで次の設定を確認してください。
2。次の画像に示すように、構造>メニュー>ユーザーアカウントメニューに移動し、マイアカウントを無効にします。
したがって、メインナビゲーションメニューには、ログインとログアウトのみが表示されているはずです。
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 )、リンクはログイン状態に応じて表示されます。