Публикатор

Во время обработки запрошенного шаблона произошла ошибка...
The following has evaluated to null or missing:
==> reserved_article_id  [in template "10202#10240#2514968" at line 4, column 62]

----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign ja = journalArticleLocalServi...  [in template "10202#10240#2514968" at line 4, column 1]
----
1<#assign groupId = themeDisplay.layout.groupId /> 
2 
3<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
4<#assign ja = journalArticleLocalService.getArticle(groupId, reserved_article_id.data) /> 
5<#assign resourceprimKey = ja.resourcePrimKey /> 
6 
7<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.service.AssetEntryLocalService") /> 
8<#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", resourceprimKey) /> 
9 
10<div class="nnk-article-container ip-training"> 
11  <div class="ip-article-content"> 
12    <div class="ip-metadata"> 
13      <span class="date"> 
14        ${dateTool.format("dd.MM.yyyy", dateTool.toDate("dd-MM-yyyy HH:mm:ss", assetEntry.publishDate), locale)} 
15      </span> 
16    </div> 
17    <div class="col-xs-12 col-sm-8 col-md-8 col-lg-8 no-padding left"> 
18      <div class="events"> 
19        <ul> 
20          <#list ipLocation.siblings as event> 
21            <li class="event-${event?index + 1}"> 
22              <span class="cell"> 
23                <#if event?index == 0> 
24                  <h2>Najbliższe:</h2> 
25                </#if> 
26                <#if event?index == 1> 
27                  <h3>Następne:</h3> 
28                </#if> 
29                <#assign startDate = dateTool.toDate("dd-MM-yyyy HH:mm:ss", event.ipStartDate.data) /> 
30                <#assign endDate = dateTool.toDate("dd-MM-yyyy HH:mm:ss", event.ipEndDate.data) /> 
31                <#if startDate?string("yyyy/MM/dd") == endDate?string("yyyy/MM/dd")> 
32                  <span class="start-date"> 
33                    ${dateTool.format("dd.MM.yyyy", startDate, locale)}, godz. ${dateTool.format("H:mm", startDate, locale)} - ${dateTool.format("H:mm", endDate, locale)} 
34                  </span> 
35                <#else> 
36                  <span class="start-date"> 
37                    od ${dateTool.format("dd.MM.yyyy", startDate, locale)}, godz. ${dateTool.format("H:mm", startDate, locale)} 
38                  </span> 
39                  <span class="end-date"> 
40                    do ${dateTool.format("dd.MM.yyyy", endDate, locale)}, godz. ${dateTool.format("H:mm", endDate, locale)} 
41                  </span> 
42                </#if> 
43              </span> 
44              <span class="cell"> 
45                <a href="${event.ipParticipate.data}" title="Weź udział">Weź udział</a> 
46              </span> 
47            </li> 
48          </#list> 
49        </ul> 
50      </div> 
51 
52      <#if training.data?has_content> 
53        <div class="training-section"> 
54          <h2>O szkoleniu</h2> 
55          ${training.data} 
56        </div> 
57      </#if> 
58 
59      <#if criteria.data?has_content> 
60        <div class="criteria-section"> 
61          <h2>Dla kogo?</h2> 
62          ${criteria.data} 
63        </div> 
64      </#if> 
65 
66      <#if agenda.data?has_content> 
67        <div class="agenda-section"> 
68          <h2>Program szkolenia</h2> 
69          ${agenda.data} 
70        </div> 
71      </#if> 
72    </div> 
73    <div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 no-padding right"> 
74      <div id="gmap" class="gmap" style="width: 100%; height: 200px"></div> 
75      <div class="locations"> 
76        <ul> 
77          <#list ipLocation.siblings as event> 
78            <li class="event-${event?index + 1}"> 
79              <strong> 
80                ${event.data}<#if event.ipVenue.data?has_content>, ${event.ipVenue.data}</#if> 
81              </strong> 
82              <span class="ip-date"> 
83                ${dateTool.format("dd.MM.yyyy", dateTool.toDate("dd-MM-yyyy", event.ipStartDate.data), locale)} - ${dateTool.format("dd.MM.yyyy", dateTool.toDate("dd-MM-yyyy", event.ipEndDate.data), locale)} 
84              </span> 
85            </li> 
86          </#list> 
87        </ul> 
88      </div> 
89    </div> 
90    <div class="clearfix"></div> 
91  </div> 
92</div> 
93 
94<script src="//maps.googleapis.com/maps/api/js?v=3.exp"></script> 
95<script> 
96(function(){ 
97  var locations = [ 
98    <#list ipLocation.siblings as event> 
99      ["${event.data}"], 
100    </#list> 
101  ]; 
102  var map = new google.maps.Map(document.getElementById('gmap'), { 
103    zoom: 12, 
104    mapTypeId: google.maps.MapTypeId.ROADMAP, 
105    panControl: false, 
106    zoomControl: false, 
107    mapTypeControl: false, 
108    scaleControl: false, 
109    streetViewControl: false, 
110    overviewMapControl: false 
111  }); 
112  var geocoder = new google.maps.Geocoder(); 
113  var latlngbounds = new google.maps.LatLngBounds(); 
114  locations.forEach(function(location) { 
115    geocoder.geocode({ 'address': location[0] }, function(results, status) { 
116      if (status == google.maps.GeocoderStatus.OK) { 
117        latlngbounds.extend(results[0].geometry.location); 
118        if (locations.length > 1) { 
119          map.setCenter(latlngbounds.getCenter()); 
120          map.fitBounds(latlngbounds); 
121        } else { 
122          map.setCenter(results[0].geometry.location); 
123
124        var marker = new google.maps.Marker({ 
125          position: results[0].geometry.location, 
126          map: map 
127        }); 
128        var infowindow = new google.maps.InfoWindow({ content: results[0].formatted_address }); 
129        google.maps.event.addListener(marker, 'mouseover', function() { infowindow.open(map, this); }); 
130        google.maps.event.addListener(marker, 'mouseout', function() { infowindow.close(); }); 
131
132    }); 
133  }); 
134})(); 
135</script>