Руководители структурных подразделений
Материал опубликован:
Обновлён:
Во время обработки запрошенного шаблона произошла ошибка...
Java method "com.sun.proxy.$Proxy100.getFileEntryByUuidAndGroupId(String, long)" threw an exception when invoked on com.sun.proxy.$Proxy100 object "com.liferay.document.library.opener.google.drive.web.internal.service.DLOpenerGoogleDriveDLAppServiceWrapper@1cea7cbb"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign bigPreviewFileEntry = dlAppSe... [in template "35723#35751#31508512" at line 39, column 9] ----
1<#assign adaptiveMediaId = 'Thumbnail-300x300'>
2
3<#assign dlAppService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLAppService")>
4<#assign dlURLHelper = serviceLocator.findService("com.liferay.document.library.util.DLURLHelper")>
5<#assign DocumentConversionUtil = staticUtil["com.liferay.document.library.kernel.document.conversion.DocumentConversionUtil"]>
6<#assign JsonFactoryUtil = staticUtil["com.liferay.portal.kernel.json.JSONFactoryUtil"]>
7
8<div class="card-doctor">
9 <div class="card-doctor__row">
10 <div class="card-doctor__left">
11 <#if bigPreview.getData()?? && bigPreview.getData() != "">
12 <img alt="${bigPreview.getAttribute("alt")}" data-fileentryid="${bigPreview.getAttribute("fileEntryId")}" src="${bigPreview.getData()}" />
13 <#else>
14 <img src="https://i1.wampi.ru/2024/01/12/logo.jpg" />
15 </#if>
16 </div>
17 <div class="card-doctor__right">
18 <p class="card-doctor__line"><b>ФИО: </b>${fio.getData()}</p>
19 <p class="card-doctor__line"><b>Должность: </b> ${position.getData()}</p>
20 <#if specialization.getData()?? && specialization.getData() != "">
21 <p class="card-doctor__line"><b>Специальность: </b>${specialization.getData()}</p>
22 </#if>
23 <p class="card-doctor__line"><b>Телефон: </b>${phone.getData()}</p>
24 <#if workingHours.getData()?? && workingHours.getData() != "">
25 <p class="card-doctor__line"><b>Время приема: </b>${workingHours.getData()}</p>
26 </#if>
27 <div class="card-doctor__about">
28 <h5>О себе:</h5>
29 ${about.getData()}
30 </div>
31 </div>
32
33 </div>
34
35 <#if bigPreview.getData()?? && bigPreview.getData() != "">
36 <#assign bigPreviewUrl = bigPreview.getData()>
37 <#assign bigPreviewUuid = bigPreviewUrl?keep_after_last("/")?keep_before_last("?")>
38 <#assign bigPreviewGroupId = bigPreviewUrl?keep_after("/")?keep_after("/")?keep_before("/")?number>
39 <#assign bigPreviewFileEntry = dlAppService.getFileEntryByUuidAndGroupId(bigPreviewUuid, bigPreviewGroupId)>
40 <#assign personalFolder = bigPreviewFileEntry.getFolder()>
41 </#if>
42
43 <#if personalFolder?has_content >
44 <#assign contentFolders = dlAppService.getFolders(personalFolder.getGroupId(), personalFolder.getFolderId())>
45 <div class="card-doctor__bottom">
46
47 <#if youtubeUrl??>
48 <#if youtubeUrl.getSiblings()?has_content>
49 <div class="card-doctor__videos">
50 <#list youtubeUrl.getSiblings() as cur_youtubeUrl>
51 <#if youtubeUrl.getData()?? && youtubeUrl.getData() != "">
52 <div class="card-doctor__video">
53 <iframe width="100%" height="100%" src="${cur_youtubeUrl.getData()}" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen>
54 </iframe>
55 </div>
56 </#if>
57 </#list>
58 </div>
59 </#if>
60 </#if>
61
62
63 <#list contentFolders?filter(folder -> folder.getName()?starts_with('[D'))?sort_by('name') as documentsFolder >
64 <#attempt>
65 <#assign documentFolders = dlAppService.getFolders(documentsFolder.getGroupId(), documentsFolder.getFolderId()) >
66 <#recover>
67 <#assign documentFolders = [] >
68 </#attempt>
69 <#if documentFolders?size gt 0>
70 <div class="card-doctor__bottom-t">
71 <h3 class="card-doctor-title">${documentsFolder.getName()?keep_after(']')?trim}</h3>
72 <#list documentFolders as documentFolder>
73 <#assign documentEntries = dlAppService.getFileEntries(documentFolder.getGroupId(), documentFolder.getFolderId())>
74
75 <#if documentEntries?size gt 0>
76 <div class="card-doctor__documents accordion">
77 <div class="item">
78 <header class="portlet-header">
79 <h5>${documentFolder.getName()}</h5>
80 </header>
81 <ul class="text">
82 <#list documentEntries as documentEntry>
83 <#assign documentExtension = documentEntry.getExtension()>
84 <#assign downloadUrl = dlURLHelper.getDownloadURL(documentEntry, documentEntry.getFileVersion(), themeDisplay, '')>
85 <#assign isDocumentConvertible = DocumentConversionUtil.isEnabled() && (DocumentConversionUtil .getConversions(documentExtension)?seq_contains ('pdf' ))/>
86
87 <#assign target = ''/>
88 <#if isDocumentConvertible>
89 <#assign downloadUrl = downloadUrl?replace('&download=true', '')/>
90 <#assign downloadUrl = downloadUrl + '&targetExtension=pdf'/>
91 <#assign target = 'target="_blank"'/>
92 </#if>
93 <#if documentExtension == 'pdf'>
94 <#assign downloadUrl = downloadUrl?replace('&download=true', '')/>
95 <#assign target = 'target="_blank"'/>
96 </#if>
97
98 <#if documentEntry.getDescription()?has_content>
99 <#assign entityTitle = documentEntry.getDescription()/>
100 <#else>
101 <#assign entityTitle = documentEntry.getTitle()/>
102 </#if>
103
104 <li><a href="${downloadUrl}" ${target}>${entityTitle}</a></li>
105 </#list>
106 </ul>
107 </div>
108 </div>
109 </#if>
110 </#list>
111 </div>
112 </#if>
113 </#list>
114
115 <#list contentFolders?filter(folder -> folder.getName()?starts_with('[G'))?sort_by('name') as galleriesFolder >
116 <#attempt>
117 <#assign galleryFolders = dlAppService.getFolders(galleriesFolder.getGroupId(), galleriesFolder.getFolderId()) >
118 <#recover>
119 <#assign galleryFolders = [] >
120 </#attempt>
121 <#if galleryFolders?size gt 0>
122 <div class="card-doctor__bottom-b">
123 <h3 class="card-doctor-title">${galleriesFolder.getName()?keep_after(']')?trim}</h3>
124
125 <#list galleryFolders as galleryFolder>
126 <#assign albumEntries = dlAppService.getFileEntries(galleryFolder.getGroupId(), galleryFolder.getFolderId())>
127
128 <#if albumEntries?size gt 0>
129 <#assign imagesGalleryId = 'card-doctor_gallery' + randomNamespace + galleryFolder.getFolderId()>
130 <div class="card-doctor__gallery accordion">
131 <div class="item">
132 <header class="portlet-header">
133 <h5 class="card-doctor__gallery-title">${galleryFolder.getName()}</h5>
134 </header>
135 <div class="text" id="${imagesGalleryId}">
136 <div class="card-doctor__images">
137 <#list albumEntries as albumEntry>
138 <#assign alt = albumEntry.getDescription()>
139 <#assign fileEntryId = albumEntry.getFileEntryId()>
140 <#assign previewUrl = dlURLHelper.getThumbnailSrc(albumEntry, themeDisplay)>
141 <#assign downloadUrl = dlURLHelper.getPreviewURL(albumEntry, albumEntry.getFileVersion(), themeDisplay, "")>
142 <a href="${downloadUrl}" class="card-doctor__image">
143 <img src="${previewUrl}" alt="..." />
144 </a>
145 </#list>
146 </div>
147 </div>
148 </div>
149 <#assign imageViewerSelector = '#' + imagesGalleryId + ' .card-doctor__image'>
150 <@imageViewer imageViewerSelector />
151 </div>
152 </#if>
153 </#list>
154 </div>
155 </#if>
156 </#list>
157 </div>
158 </#if>
159</div>
160
161
162
163<style>
164 .card-doctor__row {
165 display: flex;
166 gap: 30px;
167 }
168 .card-doctor__row:first-child {
169 margin-bottom: 30px;
170 }
171 .card-doctor__left {
172 flex: 0 0 auto;
173 }
174 .card-doctor__line {
175 margin-bottom: 10px;
176
177 }
178 .card-doctor__left img{
179 overflow: hidden;
180 max-width: 300px !important;
181 }
182 .card-doctor__bottom-t {
183 margin-bottom: 50px;
184 }
185 .card-doctor__bottom .card-doctor__bottom-b:not(:last-child) {
186 margin-bottom: 50px;
187 }
188 .card-doctor__gallery:not(:last-child) {
189 margin-bottom: 15px;
190 }
191 .card-doctor__gallery-title {
192 margin-bottom: 10px;
193 }
194 .card-doctor__images {
195 display: grid;
196 grid-template-columns: repeat(4, 1fr);
197 grid-gap: 20px;
198 align-items: center;
199 }
200 .card-doctor__image img{
201 object-fit: contain;
202 max-height: 300px;
203 }
204 .card-doctor__image {
205 justify-self: center;
206 }
207 .card-doctor__documents.accordion {
208 margin-bottom: 15px;
209 }
210 .card-doctor-title {
211 padding: 0 0 10px 0;
212 }
213
214 .carousel-control.image-viewer-base-control {
215 top: 0;
216 bottom: 0;
217 width: 15%;
218 opacity: 0.5;
219 }
220 .carousel-control.image-viewer-base-control-left {
221 left: 0;
222 }
223 .carousel-control.image-viewer-base-control-right {
224 right: 0;
225 }
226 .carousel-control.image-viewer-base-control .glyphicon {
227 width: 20px;
228 height: 20px;
229 display: block;
230 position: absolute;
231 top: 50%;
232 transform: translate(0, -50%);
233 }
234 .carousel-control.image-viewer-base-control .lexicon-icon {
235 position: absolute;
236 top: 50%;
237 transform: translate(0, -50%);
238 }
239 .carousel-control.image-viewer-base-control .glyphicon-chevron-left {
240 left: 30px;
241 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='white' viewBox='0 0 512 512'%3E%3Cpath class='lexicon-icon-outline' d='M114.106 254.607c0.22 6.936 2.972 13.811 8.272 19.11l227.222 227.221c11.026 11.058 28.94 11.058 39.999 0 11.058-11.026 11.058-28.94 0-39.999l-206.333-206.333c0 0 206.333-206.333 206.333-206.333 11.058-11.059 11.058-28.973 0-39.999-11.058-11.059-28.973-11.059-39.999 0l-227.221 227.221c-5.3 5.3-8.052 12.174-8.273 19.111z'%3E%3C/path%3E%3C/svg%3E");
242 }
243 .carousel-control.image-viewer-base-control .glyphicon-chevron-right {
244 right: 30px;
245 background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' fill='white'%3E%3Cpath class='lexicon-icon-outline' d='M396.394 255.607c-0.22-6.936-2.973-13.81-8.272-19.111l-227.221-227.221c-11.026-11.059-28.94-11.059-39.999 0-11.058 11.026-11.058 28.941 0 39.999l206.333 206.333c0 0-206.333 206.333-206.333 206.333-11.058 11.058-11.058 28.973 0 39.999 11.059 11.059 28.972 11.059 39.999 0l227.221-227.221c5.3-5.3 8.053-12.175 8.272-19.111z'%3E%3C/path%3E%3C/svg%3E");
246 }
247 .carousel-control.image-viewer-base-control:hover {
248 opacity: 1;
249 }
250
251 .card-doctor__videos {
252 display: grid;
253 grid-template-columns: repeat(3, 1fr);
254 grid-gap: 15px;
255 margin-bottom: 30px;
256 }
257 .card-doctor__video {
258 height: 260px;
259 }
260
261 @media (max-width: 1199px){
262 .card-doctor__videos {
263 grid-template-columns: repeat(2, 1fr);
264 }
265 }
266 @media (max-width: 991px){
267 .card-doctor__images {
268 grid-template-columns: repeat(3, 1fr);
269 }
270 }
271 @media (max-width: 768px){
272 .card-doctor__row {
273 display: block;
274
275 }
276 .card-doctor__images {
277 grid-template-columns: repeat(2, 1fr);
278 }
279 .card-doctor__videos {
280 grid-template-columns: 1fr;
281 }
282 }
283
284
285</style>
286
287<#macro imageViewer selector>
288 <script>
289 YUI().use(
290 'aui-image-viewer',
291 function(Y) {
292 let imageViewer = new Y.ImageViewer(
293 {
294 caption: 'Фотогалерея',
295 captionFromTitle: true,
296 centered: true,
297 imageAnim: {
298 duration: 1,
299 easing: 'easeIn'
300 },
301 intervalTime: 2,
302 links: '${selector}',
303 playing: false,
304 // controlNext: '<span>1212</span>',
305 // controlPrevious: ,
306 preloadAllImages: false,
307 preloadNeighborImages: false,
308 showInfo: true,
309 showPlayer: true,
310 zIndex: 223
311 }
312 )
313
314
315 imageViewer.render();
316 }
317 );
318 </script>
319</#macro>