ATTENTION! Due to the restrictions imposed on the work of organizations, changes are possible. Before buying tickets and visiting, check the current information on the official websites of organizations and events!
An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy139.getCategory(long)" threw an exception when invoked on com.sun.proxy.$Proxy139 object "com.liferay.asset.categories.interna[email protected]42b06774"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: category = AssetCategoryLocalService...  [in template "20099#20135#47150" at line 10, column 17]
	- Reached through: #assign-container  [in template "20099#20135#47150" at line 7, column 17]
----
1<#if entries?has_content> 
2    <#assign baseURL = "/projects"/> 
3    <div class="container"> 
4        <div class="z-mt-16 z-mt-md-76 z-mb-29 h2 z-breadcrumb"> 
5 
6            <#if renderRequest.getParameter("categoryId")??> 
7                <#assign 
8                AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") 
9                categoryId = renderRequest.getParameter("categoryId")?number 
10                category = AssetCategoryLocalService.getCategory(categoryId).getTitle(locale) 
11                /> 
12                <a class="z-c-dark" href="${baseURL}"> 
13                    ${portletDisplay.getTitle()} 
14                </a> 
15                ${" | "+category} 
16            <#else> 
17                ${portletDisplay.getTitle()} 
18            </#if> 
19        </div> 
20        <div class="row"> 
21            <#list entries as entry> 
22 
23                <#assign 
24                entry = entry 
25 
26                assetRenderer = entry.getAssetRenderer() 
27 
28                categories = entry.getCategories() 
29 
30                entryTitle = htmlUtil.escape(assetRenderer.getTitle(locale)) 
31 
32                viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, entry, !stringUtil.equals(assetLinkBehavior, "showFullContent")) 
33 
34                dateFormat = "dd MMMM" 
35 
36                date = dateUtil.getDate(entry.getPublishDate(), dateFormat, locale) 
37 
38                MAX_LENGTH_TEXT = 155 
39 
40                MAX_LENGTH_TEXT_WITHOUT_IMAGE = 355 
41 
42                articleContent = saxReaderUtil.read(assetRenderer.getArticle().getContentByLocale(locale)) 
43 
44                content = articleContent.valueOf("//dynamic-element[@name='text']/dynamic-content/text()") 
45 
46                text = htmlUtil.stripHtml(content) 
47 
48                text = stringUtil.replace(text, "&nbsp;", " ") 
49                text = stringUtil.trim(text) 
50 
51                imageJson = articleContent.valueOf("//dynamic-element[@name='img']/dynamic-content/text()") 
52                imageSrc = "" 
53 
54                category = categories[0].getTitle(locale) 
55                category = htmlUtil.stripHtml(category) 
56                /> 
57                <#if imageJson!=""> 
58                    <#assign imageJson = imageJson?eval 
59                    imageSrc = "/documents/" + imageJson.groupId + "/" + imageJson.uuid + "?imagePreview=1" 
60                    text = stringUtil.shorten(text, MAX_LENGTH_TEXT) 
61                    /> 
62                <#else> 
63                    <#assign  text = stringUtil.shorten(text, MAX_LENGTH_TEXT_WITHOUT_IMAGE) /> 
64                </#if> 
65 
66 
67                <div class="col-lg-4 col-sm-6 col-12 z-mb-24 z-mb-md-64"> 
68                    <a class="card card-article h-100 z-t-decoration-none z-h-min-200 z-shadow" href="${viewURL}"> 
69                        <div class="h-100 z-d-flex-column"> 
70                            <#if imageSrc!=""> 
71                                <div class="z-h-240" style="background-image: url(${imageSrc}); 
72                                        background-size: cover; background-position: center; background-repeat: no-repeat;"> 
73                                </div> 
74                            </#if> 
75                            <div class="z-px-20 z-pt-24 z-pb-32 z-d-flex-column" 
76                                 style="flex-grow: 1"> 
77                                <div class="z-c-medium-gray z-ff-secondary z-fs-12 z-line-h-14 z-fw-bold z-d-flex z-f-ls-010"> 
78                                    ${date} 
79                                </div> 
80                                <div class="card-hover-text z-f-title z-c-dark z-my-4 z-clip-text-2 z-c-red--is-hover"> 
81                                    ${entryTitle} 
82                                </div> 
83                                <hr align="left" class="z-w-72 z-bb-c-red z-bb-s-solid z-bb-w-4 z-mt-4 z-mb-20" /> 
84                                <div class="z-f-body z-c-black z-mb-8 text-array-2"> 
85                                    ${text} 
86                                </div> 
87                                <div class="d-flex  z-mt-auto"> 
88                                    <div class="card-hover-text z-c-light-red z-bb-s-solid z-bb-w-2 z-w-min-content 
89                                        z-ff-primary-bold z-fs-10 z-line-h-12 z-t-upper" style="align-self: flex-end;"> 
90                                        <#if locale=="ru_RU">Читать<#else>Read</#if> 
91                                    </div> 
92                                    <div class="z-ff-primary z-fs-8 z-line-h-10 z-t-upper z-c-blue z-b-s-solid z-b-w-1 
93                                        z-b-c-blue z-h-20 d-flex z-ai-center z-ml-auto z-px-8" 
94                                         style="font-weight: 600; border-radius: 16px"> 
95                                        ${category} 
96                                    </div> 
97                                </div> 
98                            </div> 
99                        </div> 
100                    </a> 
101                </div> 
102            </#list> 
103        </div> 
104    </div> 
105</#if> 
Проект «Русские сезоны» https://russianseasons.org/ru/live представляет программы ведущих российских творческих коллективов и учреждений культуры
Проект «Открытый город» https://открытыйгород.рф проводит общедоступные экскурсии по особнякам и памятникам архитектуры города и пригородов, обычно недоступным для свободного посещения, а также экскурсии по улицам Санкт-Петербурга в офлайн и онлайн форматах
Портал Культура.РФ https://www.culture.ru/live представляет онлайн-трансляции и записи событий со всей страны
Бесплатная система аудиогидов https://izi.travel (раздел «Санкт-Петербург»)