如何在 WebContent 模板上获取作者头像?

How to fetch the author profile picture on WebContent template?

谁能告诉我如何在网页内容模板中获取网页内容作者图像?当我尝试使用用户对象时,它返回当前登录的用户而不是实际用户。

我可以使用键

获取作者姓名和 ID

<#assign authorId = .vars[[=​​45=]].data>

<#assign authorName = .vars[[=​​46=]].data>

我已使用以下代码获取内容作者图像,但它 returns 当前登录用户。

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

但是它返回的是当前登录的用户图像

我也尝试过使用 taglib

<@liferay_ui["user-display"] userId="userId" />,但失败并显示消息 "Failed to set JSP tag parameter " author”(声明类型:布尔值,实际值的类型:字符串)。请参阅原因异常以了解更具体的原因...

谢谢

我无法从头脑中告诉你解决方案,但事情是这样的:

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

使用预定义变量 user,例如当前登录的用户。正是你得到的,但不是你想要的。 themeDisplay 用于提供当前 Web 上下文(例如正在使用的主机名),以便与当前显示的页面匹配的正确 URL 生成。

而不是使用 reserved-article-author-name,您想使用 reserved-article-author-id 来获取具有此 ID 的用户对象。为此你需要 UserLocalService(原谅我的记忆——我很少使用 freemarker 并且可能会搞砸如何真正做到这一点,但你可以搜索该信息。你可能需要访问 serviceLocator - 这是一个很好的额外搜索词)。

有了那个用户对象(命名方式不同于user,例如author),你可以使用与上面相同的策略得到作者的肖像图像URL:

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

这是有效的。

<#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}"/>