ログイン / ログアウトリンクのテキストを変更したい

[ログイン][ログアウト]リンクを[会員ログイン][会員ログアウト]など任意のテキストへ変更する方法についてお伺いします。

以下の場合[Log in][Log out](日本語環境では[ログイン][ログアウト])と表示されます。
任意のテキストを設定することは可能でしょうか。

<?php echo Core::make('helper/navigation')->getLogInOutLink(); ?>

以下の「ログイン・ログアウトURL (ログイン後に元いたページに戻ります)」では、通常のアンカータグの要領でテキストを設定できましたが

出力されるログアウトリンクが以前の形式のようでした。

<a href="<?php echo URL::to('/login', 'logout', id(new Concrete\Core\Validation\CSRF\Token())->generate('logout'));?>">任意のテキスト</a>

上記の logout を do_logout に変更したところ動作はしているようです。
この方法で問題ないでしょうか。

<a href="<?php echo URL::to('/login', 'do_logout', id(new Concrete\Core\Validation\CSRF\Token())->generate('do_logout'));?>">任意のテキスト</a>

以下のような記述も見受けられましたが、これは上記と同じでしょうか。

<a href="<?php echo URL::to('/login', 'do_logout', \Core::make('helper/validation/token')->generate('do_logout')); ?>">任意のテキスト</a>

Concrete CMS バージョン
9.2.1

PHP バージョン
8.0.x

サーバー
エックスサーバー

@Jun_22 さん、返信が遅れてしまってすいませんでした

取り急ぎ、
日本語の翻訳を書き換える方法と、コードを書き換える方法の二つがあります。

翻訳だけ変更する

翻訳の場合は管理画面の「翻訳インターフェース」から、ログイン・ログアウトの文言を編集できたと思います。

簡単に変更できますが、 Concrete サイトのインターフェース上で、英語の原文が " Log in” “Log out” となっている文字列すべてが、その変更した文字列に変わってしまうので、任意の場所だけ変更したい場合は、コードを直接変更する方法になります。

コードの中身を変更する。

<?php echo Core::make('helper/navigation')->getLogInOutLink(); ?>

これは、v9 から新しく追加されたコードのスニペットみたいなもので、
実際のコードは concrete/src/Html/Service/Navigation.php ファイルの70行目あたりにあります。

    public function getLogInOutLink()
    {
        $app = Application::getFacadeApplication();
        $u = $app->make(User::class);
        if (!$u->isRegistered()) {
            $url = URL::to('/login');
            $label = t('Log in');
        } else {
            $url = URL::to('/login', 'do_logout', $app->make(Token::class)->generate('do_logout'));
            $label = t('Log out');
        }

        return sprintf('<a href="%s">%s</a>', $url, $label);
    }

コードの内容は v8 の時とほぼ変わってないので、
昔のコードを引っ張ってきてもOKです。

ログアウトのコードは、v9 でも使えると思いますが、古いコードです。
ここ数年は使い続けてもいいと思いますが、いずれかのタイミングで使えなくなるかも・・・。

v9 だと表記がちょっと変わってます。

後日訂正: V9 でも Jun さんの最初のコードと同じでした (すいません🙇)

<a href="<?php echo URL::to('/login', 'do_logout', Core::make$app->make(\Concrete\Core\Validation\CSRF\Token::class)->generate('do_logout'));?>">任意のテキスト</a>

これを試してみてください。

ご回答ありがとうございます。

ご教示いただきました内容に echo を補い試してみました。

<a href="<?php echo URL::to('/login', 'do_logout', Core::make(Token::class)->generate('do_logout'));?>">任意のテキスト</a>

テーマの elements/header.php で使用しているのですが、当方環境ではエラーを生じるようです。

Illuminate \ Contracts \ Container \ BindingResolutionException
Target class [Token] does not exist.
Previous exceptions

Class "Token" does not exist (-1)
1 Like

@Jun_22 すみませんでした・・・

よくよく見てみたら、jun さんが最初の提示されていたコードと結果、同じでした💦

<a href="<?php echo URL::to('/login', 'do_logout', Core::make(\Concrete\Core\Validation\CSRF\Token::class)->generate('do_logout'));?>">任意のテキスト</a>

僕の元のコメントも、将来、間違いがないように、修正いたします。

ご教示いただきました内容は当方環境ではエラーになってしまいましたが

ParseError
syntax error, unexpected variable "$app", expecting ")"

以下のように変更すると動作しました。

<a href="<?php echo URL::to('/login', 'do_logout', Core::make(\Concrete\Core\Validation\CSRF\Token::class)->generate('do_logout'));?>">任意のテキスト</a>

調査中 Core::make(‘token’)-> のような記述も見かけました。
試してみると手元の環境では動作しているようです。

<a href="<?php echo URL::to('/login', 'do_logout', \Core::make('token')->generate('do_logout'));?>">任意のテキスト</a>

ご回答いただきありがとうございました。

@Jun_22 すいません!
取り急ぎ、返信していたので、手元がミスって、古いコードの部分を削除し忘れちゃいました。

以下のように変更すると動作しました。

はい。こちらです。

調査中 Core::make(‘token’)-> のような記述も見かけました。

はい。
こちらも、調べたら、v8.0 から使えるようです。

何度もお手間をかけてしまいすいませんでした。