メインナビゲーションメニューにログイン/ログアウトリンクを追加する方法


8

「メインナビゲーション」メニューにログインリンクを追加するにはどうすればよいですか?

ユーザーがリンクをクリックすると、/ user / loginページに移動します。ログインすると、リンクが「ログイン」ではなく「ログアウト」に変わるはずです。

そのようなリンクを追加する方法はありますか?


どのテーマを使用しているかはわかりませんが、drupal 8のBootstrap 3テーマは、デフォルトでこの機能を提供しています。ブロックからマイアカウントアイテムを無効にすることができます。メインナビゲーションバーは右側にログイン/ログアウトを持つことになりますし、誰もログインしていないと誰がログインしているとき、それが消えたときにのみログインが表示されますので。
CodeNext

私はDrupal 8のBootstrap 3テーマを使用しています。私はあなたがしたことと同じように、マイアカウント(ユーザーアカウントメニュー)ブロックを無効にしましたが、右隅にログイン/ログアウトリンクがありません。行方不明のものはありますか?
GTS Joe

画像付きの回答セクションに投稿したので、それについてさらに議論できます。
CodeNext

ブロック全体を無効にする必要はありませんか?回答で述べた手順に従ってください。
CodeNext 2016

回答:


10

他のメニューでシステムの「ログアウト」リンクを移動するために、Bootstrapテーマやプログラミングスキルに依存する必要はありません。Drupalを使用すると、簡単に作成できます。

ログアウトリンクを編集

別のメニューに移動

さらに私たちは、「2つのカスタム作成することができますここで私にログインをしてください」と「そこを私に出て行けとのリンク」/ユーザー/ログインおよび/ユーザー/ログアウト・パス比較的。システムの「ログアウト」リンクとは異なり、カスタム属性を使用して必要な数のログイン/ログアウトリンクを作成できるため、これはより良い方法です。ユーザーがログインすると、「ログアウト」リンクのみが表示され、その逆も同様です。唯一の注意点は、リンクのテスト時にログインしているため、おそらく両方のリンクが一緒に表示されることです。また、管理者として「任意のページへのリンク」権限があるため、これは正常です。この権限を無効にして、再試行してください。


4

簡単に言えば、2つの異なるメニューバージョンを作成し、1つはログイン、もう1つはログアウトし、各バージョンに異なる可視性の役割を与えます。

1)[ 編集]メニュー、および[ログアウトリンク]を追加します

2)今しなければならないことは、メインメニューのリンクブロックを設定する ことだけですここに画像の説明を入力してください

次に、[役割]で、チェックマークを付けます☑認証済みユーザーとalso管理者

ここに画像の説明を入力してください

3)次に/admin/structure/menu、「ログイン」リンクと必要な他のすべてのメニューリンクを含む別のメニュー()を作成します。

4)次に/admin/structure/blockプライマリメニューのブロック()に移動します(Bartikを使用している場合、カスタムテーマを使用している場合は別の名前になる可能性があります)[追加]をクリックし、作成したメニューを追加して構成します。今回はロール、チェックマークのみ☑匿名


私はあなたの提案をしましたが、私が作成するカスタムメニューブロックはリンクスタイルを壊します(私はBootstrapテーマを使用しています)。機能的には機能しますが、この方法は新しいメニューブロックのスタイルを壊すため、使用できません。
GTS Joe

まああきらめないでください。:)
ブー

3

これを行うには、より良い方法があります。やりたいことは、独自のプラグインを作成し、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/フォルダーにコピーします
  • LoginLogoutMenuLinkからMyLoginLogoutMenuLinkに名前を変更します。
  • 名前空間を更新して、場所を反映させます。 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

これが誰かの役に立つことを願っています。


2

Bootstrap 3 Drupal 8テーマでは、デフォルトでこの機能が提供されているため、これを行うことができます。私のdrupal 8トライアルサイトの画像を投稿しています。1つはログインページ、もう1つはログアウトページです。

ここに画像の説明を入力してください

ここに画像の説明を入力してください

そんなもの探してるの?

以下の手順に従ってください。

1.構造>ブロックに移動します。ナビゲーションセクションで次の設定を確認してください。

ここに画像の説明を入力してください

2.次の画像に示すように、構造>メニュー>ユーザーアカウントメニューに移動して、マイアカウントを無効にします。

ここに画像の説明を入力してください

したがって、最初の画像のペアで投稿したように、メインナビゲーションメニューにはログインとログアウトのみが表示されます。


これを探していましたか?うまくいった?
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を参照)、リンクはログイン状態に応じて表示されます。


機能しませんが、両方のリンクが引き続き表示されます
Sssweatなし2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.