Как получить изображение профиля автора в шаблоне WebContent?

Может ли кто-нибудь сказать мне, как получить изображение автора веб-контента в шаблоне веб-контента? Когда я пытался использовать пользовательский объект, он возвращает текущего вошедшего в систему пользователя, а не фактического.

Я могу получить имя автора и идентификатор с помощью ключа

<#assign authorId = .vars['reserved-article-author-id'].data>

<#assign authorName = .vars['reserved-article-author-name'].data>

Я использовал приведенный ниже код для получения изображения автора контента, но он возвращает текущего пользователя, вошедшего в систему.

<#assign author-img = user.getPortraitURL(themeDisplay)>

Но он возвращает текущий вошедший в систему образ пользователя

Я также пробовал с taglib

<@liferay_ui["user-display"] userId="userId" />, но сбой с сообщением «Не удалось установить параметр тега JSP« автор »(объявленный тип: логическое значение, тип фактического значения: строка). См. Исключение причины для более конкретной причины...

Спасибо

Было бы намного проще объяснить, что вы сделали, если бы включили свой нерабочий код. И ответ был бы намного полезнее и для других.

Olaf Kock 10.04.2019 12:20

Привет, вот что я пытаюсь. Я могу получить имя автора с помощью ключа зарезервированного имени автора статьи. Я использовал приведенный ниже код для получения изображения автора контента, но он возвращает текущего пользователя, вошедшего в систему. <#assign author-img = user.getPortraitURL(themeDisplay)> <img src = "${author-img}" /> <#assign author-name = .vars['reserved-article-author-name'].data > ${имя автора}

Geek 10.04.2019 15:50

Я также пытался использовать <@liferay_ui["user-display"] userId = "userId" />, но сбой с сообщением "Не удалось установить параметр тега JSP "автор" (объявленный тип: логический, тип фактического значения: String ). См. исключение причины для более конкретной причины..."

Geek 10.04.2019 22:48

пожалуйста, отредактируйте эти комментарии в своем вопросе - так их будет намного легче читать: в этом редакторе есть правильное форматирование, в отличие от комментариев.

Olaf Kock 11.04.2019 13:43
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
512
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я не могу рассказать вам о решении из головы, но вот что происходит:

<#assign author-img = user.getPortraitURL(themeDisplay)>

использует предопределенную переменную user, например. текущий авторизованный пользователь. Именно то, что вы получаете, но не то, что вы хотите. themeDisplay используется для предоставления текущего веб-контекста (например, используемого имени хоста) для правильного создания URL-адреса, соответствующего текущей отображаемой странице.

Вместо использования reserved-article-author-name вы хотите использовать reserved-article-author-id, чтобы получить объект пользователя с этим идентификатором. Для этого вам понадобится UserLocalService (извините за память — я редко использую freemarker и, вероятно, запутался бы, как это сделать на самом деле, но вы можете найти эту информацию. Вам может понадобиться доступ к serviceLocator — что делает хороший дополнительный искать термин).

Имея этот пользовательский объект (назовите его иначе, чем user, например, author), вы можете получить URL портретного изображения автора с той же стратегией, что и выше:

<#assign author-img = author.getPortraitURL(themeDisplay)>

Привет Олаф, Спасибо за указатели. Я попробовал следующее: /> <#assign author_user = userLocalService.getUserById(authoruserId)/> <#assign authimg = author_user.getPortraitURL(themeDisplay)/> <img src = "${authimg}" alt = "Profile"/>

Geek 11.04.2019 15:59

и получаю эту ошибку: не найдено совместимого перегруженного варианта; не может преобразовать (развернуть) 1-й аргумент в желаемый тип Java. Тип FTL значений аргумента: строка (оболочка: f.t.SimpleScalar). Соответствующая перегрузка была найдена среди этих членов:

Geek 11.04.2019 16:01

Зависит от линии, на которой срабатывает это сообщение. Возможно, authoruserId — это String, и он используется как Long в getUserById — вам может понадобиться диалог от String к Long, прежде чем вы сможете его использовать. Или это может быть в другой строке - внесите эти правки построчно, чтобы найти нужное место.

Olaf Kock 11.04.2019 16:19

Большое спасибо. Я преобразовал строку в число, и это работает :)

Geek 11.04.2019 16:51

Это работает.

<#assign userLocalService = serviceLocator.findService('com.liferay.portal.kernel.service.UserLocalService') />
<#assign author_id = .vars['reserved-article-author-id'].data?number>
<#assign author_user = userLocalService.getUserById(author_id)/>
<#assign author_image = author_user.getPortraitURL(themeDisplay)/>
<img src = "${author_image}"/>

Другие вопросы по теме