Может ли кто-нибудь сказать мне, как получить изображение автора веб-контента в шаблоне веб-контента? Когда я пытался использовать пользовательский объект, он возвращает текущего вошедшего в систему пользователя, а не фактического.
Я могу получить имя автора и идентификатор с помощью ключа
<#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« автор »(объявленный тип: логическое значение, тип фактического значения: строка). См. Исключение причины для более конкретной причины...
Спасибо
Привет, вот что я пытаюсь. Я могу получить имя автора с помощью ключа зарезервированного имени автора статьи. Я использовал приведенный ниже код для получения изображения автора контента, но он возвращает текущего пользователя, вошедшего в систему. <#assign author-img = user.getPortraitURL(themeDisplay)> <img src = "${author-img}" /> <#assign author-name = .vars['reserved-article-author-name'].data > ${имя автора}
Я также пытался использовать <@liferay_ui["user-display"] userId = "userId" />, но сбой с сообщением "Не удалось установить параметр тега JSP "автор" (объявленный тип: логический, тип фактического значения: String ). См. исключение причины для более конкретной причины..."
пожалуйста, отредактируйте эти комментарии в своем вопросе - так их будет намного легче читать: в этом редакторе есть правильное форматирование, в отличие от комментариев.
Я не могу рассказать вам о решении из головы, но вот что происходит:
<#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"/>
и получаю эту ошибку: не найдено совместимого перегруженного варианта; не может преобразовать (развернуть) 1-й аргумент в желаемый тип Java. Тип FTL значений аргумента: строка (оболочка: f.t.SimpleScalar). Соответствующая перегрузка была найдена среди этих членов:
Зависит от линии, на которой срабатывает это сообщение. Возможно, authoruserId — это String, и он используется как Long в getUserById
— вам может понадобиться диалог от String к Long, прежде чем вы сможете его использовать. Или это может быть в другой строке - внесите эти правки построчно, чтобы найти нужное место.
Большое спасибо. Я преобразовал строку в число, и это работает :)
Это работает.
<#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}"/>
Было бы намного проще объяснить, что вы сделали, если бы включили свой нерабочий код. И ответ был бы намного полезнее и для других.