Jun_22
August 10, 2023, 7:05am
1
[ログイン][ログアウト]リンクを[会員ログイン][会員ログアウト]など任意のテキストへ変更する方法についてお伺いします。
以下の場合[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
サーバー
エックスサーバー
katz515
September 7, 2023, 2:47am
3
@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>
これを試してみてください。
Jun_22
September 8, 2023, 2:28am
4
ご回答ありがとうございます。
ご教示いただきました内容に 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
katz515
September 8, 2023, 4:53am
5
@Jun_22 すみませんでした・・・
よくよく見てみたら、jun さんが最初の提示されていたコードと結果、同じでした💦
<a href="<?php echo URL::to('/login', 'do_logout', Core::make(\Concrete\Core\Validation\CSRF\Token::class)->generate('do_logout'));?>">任意のテキスト</a>
僕の元のコメントも、将来、間違いがないように、修正いたします。
Jun_22
September 11, 2023, 3:40am
6
ご教示いただきました内容は当方環境ではエラーになってしまいましたが
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>
ご回答いただきありがとうございました。
katz515
September 12, 2023, 4:10am
7
@Jun_22 すいません!
取り急ぎ、返信していたので、手元がミスって、古いコードの部分を削除し忘れちゃいました。
以下のように変更すると動作しました。
はい。こちらです。
調査中 Core::make(‘token’)-> のような記述も見かけました。
はい。
こちらも、調べたら、v8.0 から使えるようです。
何度もお手間をかけてしまいすいませんでした。