Блог

Blogs (Блог)

An error occurred while processing the template.
Java method "com.liferay.blogs.model.impl.BlogsEntryImpl.getCoverImageURL(com.liferay.portal.kernel.theme.ThemeDisplay)" threw an exception when invoked on com.liferay.blogs.model.impl.BlogsEntryImpl object "{mvccVersion=2, uuid=6af126f7-a40b-adb1-bdea-b1ff4bec5822, entryId=8822631, groupId=8822615, companyId=20098, userId=642675, userName=Ляшов Сергей, createDate=2025-09-16 14:35:40.022, modifiedDate=2025-09-16 14:35:53.06, lastModifiedUserId=642675, lastModifiedUserName=Ляшов Сергей, title=5 признаков, что ваш бизнес-портал — тайный психолог (и он вас жалеет), subtitle=, urlTitle=5-signs, description=, content=<p>1. Он предлагает «отдохнуть» после каждого действия. 👀 &nbsp;<br />\n&nbsp; &nbsp;Сохранили документ? «Вы молодец! Может, чаю?» Отправили отчет? «Не спешите, вот вам гороскоп на неделю». &nbsp;</p>\n\n<p>2. Он знает про ваши дела, но делает вид, что нет. &nbsp;<br />\n&nbsp; &nbsp;Напоминает о задаче за минуту до дедлайна: «Ой, а у вас тут отчет… Ну ладно, я никому не скажу». &nbsp;</p>\n\n<p>3. Он прячет кнопку «Отправить». &nbsp;<br />\n&nbsp; &nbsp;Трижды переспрашивает: «Точно? Может, еще раз проверим?» &nbsp;</p>\n\n<p>4. Он подсовывает мемы вместо инструкций. &nbsp;<br />\n&nbsp; &nbsp;Вместо «Ошибка 404» картинка с котиком: «Расслабься, это просто жизнь». &nbsp;</p>\n\n<p>5. Он автоматически ставит «отпуск» в календаре. &nbsp;<br />\n&nbsp; &nbsp;«Я вижу, вы не спали три дня. Вот вам две недели на Бали. Шучу… Или нет?» &nbsp;</p>\n\n<p>Если ваш портал ведет себя так он не просто софт, он ваш личный digital-терапевт. 😌 &nbsp;</p>\n\n<p>Нужен портал без лишней опеки? Мы поможем: &nbsp;https://incomand.ru/</p>, displayDate=2025-09-16 14:35:00.0, allowPingbacks=true, allowTrackbacks=false, trackbacks=, coverImageCaption=, coverImageFileEntryId=8822636, coverImageURL=, smallImage=false, smallImageFileEntryId=0, smallImageId=0, smallImageURL=, lastPublishDate=null, status=0, statusByUserId=642675, statusByUserName=Ляшов Сергей, statusDate=2025-09-16 14:35:53.06}"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #if curBlogEntry.getCoverImageURL(the...  [in template "20098#35420#5964958" at line 4, column 25]
----
1<div class="row widget-mode-card"> 
2	<#if entries?has_content> 
3		<#list entries as curBlogEntry> 
4			<#if curBlogEntry.getCoverImageURL(themeDisplay)??> 
5				<#assign cardImage = true /> 
6			<#else> 
7				<#assign cardImage = false /> 
8			</#if> 
9 
10			<div class="col-lg-4"> 
11				<div class="card"> 
12					<div class="card-header"> 
13						<div class="aspect-ratio aspect-ratio-8-to-3"> 
14							<img alt="thumbnail" class="aspect-ratio-item-center-middle aspect-ratio-item-fluid" src="${cardImage?then(curBlogEntry.getCoverImageURL(themeDisplay), portalUtil.getPathContext(renderRequest) + "/images/cover_image_placeholder.jpg")}"> 
15						</div> 
16					</div> 
17 
18					<div class="card-body widget-topbar"> 
19						<div class="autofit-row card-title"> 
20								<div class="autofit-col autofit-col-expand"> 
21									<#assign viewEntryPortletURL = renderResponse.createRenderURL() /> 
22 
23									${viewEntryPortletURL.setParameter("mvcRenderCommandName", "/blogs/view_entry")} 
24									${viewEntryPortletURL.setParameter("redirect", currentURL)} 
25 
26									<#if validator.isNotNull(curBlogEntry.getUrlTitle())> 
27										${viewEntryPortletURL.setParameter("urlTitle", curBlogEntry.getUrlTitle())} 
28									<#else> 
29										${viewEntryPortletURL.setParameter("entryId", curBlogEntry.getEntryId()?string)} 
30									</#if> 
31 
32									<h3 class="title"> 
33										<a class="title-link" href="${viewEntryPortletURL.toString()}"> 
34										${htmlUtil.escape(blogsEntryUtil.getDisplayTitle(resourceBundle, curBlogEntry))}</a> 
35									</h3> 
36								</div> 
37 
38								<div class="autofit-col visible-interaction"> 
39									<div class="dropdown dropdown-action"> 
40										<@liferay_ui["icon-menu"] 
41											direction="left-side" 
42											icon="" 
43											markupView="lexicon" 
44											message="actions" 
45											showWhenSingleIcon=true 
46
47											<#if blogsEntryPermission.contains(permissionChecker, curBlogEntry, "UPDATE")> 
48												<#assign editEntryPortletURL = renderResponse.createRenderURL() /> 
49 
50												${editEntryPortletURL.setWindowState(windowStateFactory.getWindowState("MAXIMIZED"))} 
51												${editEntryPortletURL.setParameter("mvcRenderCommandName", "/blogs/edit_entry")} 
52												${editEntryPortletURL.setParameter("redirect", currentURL)} 
53												${editEntryPortletURL.setParameter("entryId", curBlogEntry.getEntryId()?string)} 
54 
55												<@liferay_ui["icon"] 
56													label=true 
57													message="edit" 
58													url=editEntryPortletURL.toString() 
59												/> 
60											</#if> 
61											<#if blogsEntryPermission.contains(permissionChecker, curBlogEntry, "PERMISSIONS")> 
62												<#assign permissionsEntryURL = permissionsURLTag.doTag(null, "com.liferay.blogs.model.BlogsEntry", blogsEntryUtil.getDisplayTitle(resourceBundle, curBlogEntry), curBlogEntry.getGroupId()?string, curBlogEntry.getEntryId()?string, windowStateFactory.getWindowState("POP_UP").toString(), null, request) /> 
63 
64												<@liferay_ui["icon"] 
65													label=true 
66													message="permissions" 
67													method="get" 
68													url=permissionsEntryURL 
69													useDialog=true 
70												/> 
71											</#if> 
72											<#if blogsEntryPermission.contains(permissionChecker, curBlogEntry, "DELETE")> 
73												<#assign deleteEntryPortletURL = renderResponse.createActionURL() /> 
74 
75												${deleteEntryPortletURL.setParameter("javax.portlet.action", "/blogs/edit_entry")} 
76												${deleteEntryPortletURL.setParameter("cmd", trashHelper.isTrashEnabled(themeDisplay.getScopeGroupId())?then("move_to_trash", "delete"))} 
77												${deleteEntryPortletURL.setParameter("redirect", currentURL)} 
78												${deleteEntryPortletURL.setParameter("entryId", curBlogEntry.getEntryId()?string)} 
79 
80												<@liferay_ui["icon-delete"] 
81													label=true 
82													trash=trashHelper.isTrashEnabled(themeDisplay.getScopeGroupId()) 
83													url=deleteEntryPortletURL.toString() 
84												/> 
85											</#if> 
86										</@> 
87									</div> 
88								</div> 
89						</div> 
90 
91						<div class="autofit-row widget-metadata"> 
92							<div class="autofit-col inline-item-before"> 
93								<@liferay_ui["user-portrait"] 
94									size="lg" 
95									userId=curBlogEntry.userId 
96									userName=curBlogEntry.userName 
97								/> 
98							</div> 
99 
100							<div class="autofit-col autofit-col-expand"> 
101								<div class="autofit-row"> 
102									<div class="autofit-col autofit-col-expand"> 
103										<#if serviceLocator??> 
104											<#assign 
105												userLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.UserLocalService") 
106 
107												entryUser = userLocalService.fetchUser(curBlogEntry.getUserId()) 
108											/> 
109 
110											<#if entryUser?? && !entryUser.isDefaultUser()> 
111												<#assign entryUserURL = entryUser.getDisplayURL(themeDisplay) /> 
112											</#if> 
113										</#if> 
114 
115										<div class="text-truncate-inline"> 
116											<a href="${(entryUserURL?? && validator.isNotNull(entryUserURL))?then(entryUserURL, "")}" class="text-truncate username">${curBlogEntry.getUserName()}</a> 
117										</div> 
118 
119										<div class="card-bottom"> 
120										    <span class="card-date"> 
121    											${dateUtil.getDate(curBlogEntry.getStatusDate(), "dd MMM yyyy", locale)} 
122     
123    											<#if blogsPortletInstanceConfiguration.enableReadingTime()> 
124    												- <@liferay_reading_time["reading-time"] displayStyle="simple" model=curBlogEntry /> 
125    											</#if> 
126											</span> 
127 
128											<#if serviceLocator??> 
129												<#assign 
130													assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") 
131 
132													assetEntry = assetEntryLocalService.getEntry("com.liferay.blogs.model.BlogsEntry", curBlogEntry.getEntryId()) 
133												/> 
134 
135												<#if blogsPortletInstanceConfiguration.enableViewCount()> 
136												    <span class="card-view"> 
137    												    <@liferay_ui["icon"] 
138                        									icon="view" 
139                        									markupView="lexicon" 
140                        								/> 
141                        								${assetEntry.getViewCount()} 
142                    								</span> 
143												</#if> 
144											</#if> 
145										</div> 
146									</div> 
147								</div> 
148							</div> 
149						</div> 
150 
151						<#if validator.isNotNull(curBlogEntry.getDescription())> 
152							<#assign content = curBlogEntry.getDescription() /> 
153						<#else> 
154							<#assign content = curBlogEntry.getContent() /> 
155						</#if> 
156 
157						<#if cardImage> 
158							<p class="widget-resume">${stringUtil.shorten(htmlUtil.stripHtml(content), 150)}</p> 
159						<#else> 
160							<p class="widget-resume">${stringUtil.shorten(htmlUtil.stripHtml(content), 400)}</p> 
161						</#if> 
162					</div> 
163 
164					<div class="card-footer"> 
165						<div class="autofit-float autofit-row autofit-row-center widget-toolbar"> 
166							<#if blogsPortletInstanceConfiguration.enableComments()> 
167								<div class="autofit-col"> 
168									<#assign viewCommentsPortletURL = renderResponse.createRenderURL() /> 
169 
170									${viewCommentsPortletURL.setParameter("mvcRenderCommandName", "/blogs/view_entry")} 
171									${viewCommentsPortletURL.setParameter("scroll", renderResponse.getNamespace() + "discussionContainer")} 
172 
173									<#if validator.isNotNull(curBlogEntry.getUrlTitle())> 
174										${viewCommentsPortletURL.setParameter("urlTitle", curBlogEntry.getUrlTitle())} 
175									<#else> 
176										${viewCommentsPortletURL.setParameter("entryId", curBlogEntry.getEntryId()?string)} 
177									</#if> 
178 
179									<a class="btn btn-outline-borderless btn-outline-secondary btn-sm" href="${viewCommentsPortletURL.toString()}" title="${language.get(locale, "comments")}"> 
180										<span class="inline-item inline-item-before"> 
181											<@clay["icon"] symbol="comments" /> 
182										</span> ${commentManager.getCommentsCount("com.liferay.blogs.model.BlogsEntry", curBlogEntry.getEntryId())} 
183									</a> 
184								</div> 
185							</#if> 
186 
187							<#if blogsPortletInstanceConfiguration.enableRatings()> 
188								<div class="autofit-col"> 
189									<@liferay_ui["ratings"] 
190										className="com.liferay.blogs.model.BlogsEntry" 
191										classPK=curBlogEntry.getEntryId() 
192									/> 
193								</div> 
194							</#if> 
195 
196							<div class="autofit-col autofit-col-end"> 
197								<#assign bookmarkURL = renderResponse.createRenderURL() /> 
198 
199								${bookmarkURL.setWindowState(windowStateFactory.getWindowState("NORMAL"))} 
200								${bookmarkURL.setParameter("mvcRenderCommandName", "/blogs/view_entry")} 
201 
202								<#if validator.isNotNull(curBlogEntry.getUrlTitle())> 
203									${bookmarkURL.setParameter("urlTitle", curBlogEntry.getUrlTitle())} 
204								<#else> 
205									${bookmarkURL.setParameter("entryId", curBlogEntry.getEntryId()?string)} 
206								</#if> 
207 
208								<@liferay_social_bookmarks["bookmarks"] 
209									className="com.liferay.blogs.model.BlogsEntry" 
210									classPK=curBlogEntry.getEntryId() 
211									maxInlineItems=0 
212									target="_blank" 
213									title=blogsEntryUtil.getDisplayTitle(resourceBundle, curBlogEntry) 
214									types=blogsPortletInstanceConfiguration.socialBookmarksTypes() 
215									url=portalUtil.getCanonicalURL(bookmarkURL.toString(), themeDisplay, themeDisplay.getLayout()) 
216								/> 
217							</div> 
218						</div> 
219					</div> 
220				</div> 
221			</div> 
222		</#list> 
223	</#if> 
224</div> 
225 
226<style> 
227    .card-bottom { 
228        display: flex; 
229        justify-content: space-between; 
230        width: 42%; 
231
232</style>