-
Notifications
You must be signed in to change notification settings - Fork 134
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fixed title for page show chapter, exercise, solution #1619
Conversation
@Kolalexx Добрый день, задеплойте демку на render |
app/Models/Chapter.php
Outdated
public function getFullTitle(): string | ||
{ | ||
return ChapterHelper::fullChapterName($this->path); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
хелпер не стоит использовать внутри модели. Хелпер это что-то, что находится вне модели/предметной области. Обычно это хелперы для UI/HTML, чтобы не писать несколько раз одно и то же. Более правильно модель передавать в хелпер
@@ -7,7 +7,7 @@ | |||
*/ | |||
@endphp | |||
@section('title') | |||
{{ getTitleContent($exercise->getTitle()) }} | |||
{{ __('exercise.exercise') }} {{ getTitleContent($exercise->getFullTitle()) }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
суть getTitleContent
в том, что он занимается оформлением окончательного тайтла. Посмотрите в код, увидите, что там в хедер добавляется строка с назвнаием проекта. Поэтому равильный путь будет передать все нужные строки в функцию getTitleContent.
По идее можно создать новую метку для переводов и туда передавать нужную переменную. https://laravel.com/docs/11.x/localization#replacing-parameters-in-translation-strings
@fey Добрый день. Ссылка на демку на render - https://hexlet-sicp-k2jq.onrender.com |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Использование презентера - ок, можно это дальше использовать, но только для формирования полного имени сущности, например "упражнение 1.3 lalala", но в getTitle должна передаваться строка, а не модель. Ну и стоит убрать взаимосвязанный вызов презентер -> модель -> презнтер
app/Helpers/TemplateHelper.php
Outdated
@@ -4,10 +4,12 @@ | |||
|
|||
class TemplateHelper | |||
{ | |||
public static function getTitleContent(string $header): string | |||
public static function getTitleContent(object $model): string |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Kolalexx тут на самом деле не нужно изменять метод. Во первых неверно передавтаь object - ведь тогда вообще любой обьект может быть передан, но у него может не быть метода.
Во вторых - мы же не модель сюда передаем. Мы передаем уникальную строку, это может быть как название главы, название упражнения, имя пользователя, просто название страницы.
Суть getTitleContent только в том, чтобы взять этот уникальный хедер, который должен быть на странице и добавить к нему суффикс.
Т.е. метод то не нужно изменять. Мы его используем как есть и передаем внутрь строку.
app/Models/Solution.php
Outdated
public function getFullTitle(): string | ||
{ | ||
return $this->exercise->getFullTitle(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
вообще какая-то наркомания получается. Смотри, в exercise сейчас этот метод делает вызов презентера return $this->present()->fullTitle;
, а тут мы наоборот вызываем метод в модели, чтобы она внутри вызвалась внутри презентера.
app/Models/Solution.php
Outdated
public function getNameModel(): string | ||
{ | ||
return __('solution.solution_for_title'); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
метод называется "получить имя модели", а возвращается Решение для упражнения
по сути тайтл, который относится к слою view
@fey вроде учел все замечания, прошу посмотреть |
app/Helpers/TemplateHelper.php
Outdated
@@ -4,10 +4,10 @@ | |||
|
|||
class TemplateHelper | |||
{ | |||
public static function getTitleContent(string $header): string | |||
public static function getTitleContent(string $header, string $title): string |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Смотри, здесь ты добавил $title
- но по сути это дубль $header
. Внутрь функции getTitleContent попадает одна строк - хедер, который должен вывестись. Просто к этому хедеру сборку прикручивается название проекта. Т.е. строку хедера надо снаружи передать в функцию, без изменения сигнатуры getTitleContent
.
@@ -1,7 +1,9 @@ | |||
@extends('layouts.app') | |||
|
|||
@section('meta-robots', 'nofollow, noindex') | |||
@section('title'){{ __('solution.exercise') }} {{ getTitleContent($currentExercise->getFullTitle()) }}@endsection | |||
@section('title') | |||
{{ getTitleContent($currentExercise->getFullTitle(), __('solution.solution_for_title')) }} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Это делается по-другому. в строку локали можно передать парамтер (для этого надо обновить строку локали), чтобы передать внутрь название упражнения
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
{{ getTitleContent($currentExercise->getFullTitle(), __('solution.solution_for_title')) }} | |
{{ getTitleContent(__('solution.solution_for_title', ['exercise' => $currentExercise->getFullTitle()])) }} |
resources/lang/ru/solution.php
Outdated
@@ -10,4 +10,5 @@ | |||
'exercise' => 'Упражнение', | |||
'code_review' => 'Код Ревью', | |||
'sub_title' => 'Сравни свои решения', | |||
'solution_for_title' => 'Решение для упражнения', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
'solution_for_title' => 'Решение для упражнения', | |
'solution_for_title' => 'Решение для упражнения :exercise', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Плюсом, когда добавляешь тексты для локали, нужно добавить для других локалей тоже (для англ)
@fey спасибо за помощь и терпение, надеюсь это финальная версия |
@Kolalexx сейчас в двух файлах локалей конфликты, скорее всего в основной ветке дбавился код, поэтому конфликт. Попробуй сделать ребейз и стащить изменения из мейна. получится сделать самостоятельно? |
@fey да завтра с утра сделаю |
Pull request details
Issues fixed
Link to demo