Skip to content
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

Closed
wants to merge 0 commits into from

Conversation

Kolalexx
Copy link
Contributor

Pull request details

Issues fixed

Link to demo

@fey
Copy link
Collaborator

fey commented Mar 28, 2024

@Kolalexx Добрый день, задеплойте демку на render

public function getFullTitle(): string
{
return ChapterHelper::fullChapterName($this->path);
}
Copy link
Collaborator

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()) }}
Copy link
Collaborator

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

@Kolalexx
Copy link
Contributor Author

@fey Добрый день. Ссылка на демку на render - https://hexlet-sicp-k2jq.onrender.com

Copy link
Collaborator

@fey fey left a 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 должна передаваться строка, а не модель. Ну и стоит убрать взаимосвязанный вызов презентер -> модель -> презнтер

@@ -4,10 +4,12 @@

class TemplateHelper
{
public static function getTitleContent(string $header): string
public static function getTitleContent(object $model): string
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Kolalexx тут на самом деле не нужно изменять метод. Во первых неверно передавтаь object - ведь тогда вообще любой обьект может быть передан, но у него может не быть метода.
Во вторых - мы же не модель сюда передаем. Мы передаем уникальную строку, это может быть как название главы, название упражнения, имя пользователя, просто название страницы.
Суть getTitleContent только в том, чтобы взять этот уникальный хедер, который должен быть на странице и добавить к нему суффикс.

Т.е. метод то не нужно изменять. Мы его используем как есть и передаем внутрь строку.

public function getFullTitle(): string
{
return $this->exercise->getFullTitle();
}
Copy link
Collaborator

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;, а тут мы наоборот вызываем метод в модели, чтобы она внутри вызвалась внутри презентера.

public function getNameModel(): string
{
return __('solution.solution_for_title');
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

метод называется "получить имя модели", а возвращается Решение для упражнения по сути тайтл, который относится к слою view

@Kolalexx
Copy link
Contributor Author

Kolalexx commented Apr 2, 2024

@fey вроде учел все замечания, прошу посмотреть

@@ -4,10 +4,10 @@

class TemplateHelper
{
public static function getTitleContent(string $header): string
public static function getTitleContent(string $header, string $title): string
Copy link
Collaborator

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')) }}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это делается по-другому. в строку локали можно передать парамтер (для этого надо обновить строку локали), чтобы передать внутрь название упражнения

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
{{ getTitleContent($currentExercise->getFullTitle(), __('solution.solution_for_title')) }}
{{ getTitleContent(__('solution.solution_for_title', ['exercise' => $currentExercise->getFullTitle()])) }}

@@ -10,4 +10,5 @@
'exercise' => 'Упражнение',
'code_review' => 'Код Ревью',
'sub_title' => 'Сравни свои решения',
'solution_for_title' => 'Решение для упражнения',
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
'solution_for_title' => 'Решение для упражнения',
'solution_for_title' => 'Решение для упражнения :exercise',

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Плюсом, когда добавляешь тексты для локали, нужно добавить для других локалей тоже (для англ)

@Kolalexx
Copy link
Contributor Author

Kolalexx commented Apr 3, 2024

@fey спасибо за помощь и терпение, надеюсь это финальная версия

@fey
Copy link
Collaborator

fey commented Apr 3, 2024

@Kolalexx сейчас в двух файлах локалей конфликты, скорее всего в основной ветке дбавился код, поэтому конфликт. Попробуй сделать ребейз и стащить изменения из мейна. получится сделать самостоятельно?

@Kolalexx
Copy link
Contributor Author

Kolalexx commented Apr 3, 2024

@fey да завтра с утра сделаю

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants