The following has evaluated to null or missing: ==> request.getCookies() [in template "35001#35028#2420792" at line 11, column 19] ---- 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: #local cookies = request.getCookies() [in template "35001#35028#2420792" in function "isAlertHidden" at line 11, column 1] ----
1<#compress>
2<#assign
3utilname = "com.liferay.portal.kernel.servlet.taglib.ui.BreadcrumbUtil"
4type_any = staticUtil[utilname].ENTRY_TYPE_ANY
5breadcrumbEntries = staticUtil[utilname].getBreadcrumbEntries(request, [type_any])
6>
7
8<#if serviceLocator?? && entries?has_content>
9
10<#function isAlertHidden alertId>
11<#local cookies = request.getCookies()>
12 <#list cookies as cookie>
13 <#if cookie.getValue()?matches(alertId)>
14 <#return true>
15 </#if>
16 </#list>
17 <#return false>
18</#function>
19
20<#function normalAlert entry>
21 <#if (alertType?contains('value 1') || alertType?contains('value 2'))><#return true></#if>
22 <#return false>
23</#function>
24
25<script>
26function hideAlert(alertId) {
27 var now = new Date();
28 var time = now.getTime();
29 var expireTime = time + 1000*36000;
30 now.setTime(expireTime);
31 document.cookie = 'alertHidden=' + alertId + ';expires='+now.toUTCString()+';path=/';
32}
33</script>
34
35<style>
36
37.portlet:first-of-type{
38margin-bottom:0px!important;
39}
40
41.alert-body {
42 max-width: 1228px;
43 width: 100%;
44 padding: 0 1rem 0 1rem;
45 margin-top: 0.8rem;
46}
47
48.alert-body-wide {
49 background-color:#fc0;
50 width: 100vw;
51 position: relative;
52 left: calc(-51vw + 50.5%);
53 margin-top: -1.1rem;
54}
55
56
57.lexicon-icon-exclamation-full {
58 height: 1.3em;
59 width: 1.3em;
60}
61
62.alert {
63 margin-bottom: -1.5rem;
64}
65
66.alert h2 {
67 margin-top: 0rem;
68 margin-bottom: 0rem;
69 color:#FFFFFF;
70 font-size: 1.25rem;
71
72}
73
74.alert-primary {
75 background-color: #FFFFFF;
76 border-color: rgb(0 0 0 / 0%);
77 }
78
79.alert-top {
80 width: 100%;
81}
82
83.red-background {
84 background-color:#D4351C;
85}
86
87.bg-black {
88 background-color:#000000;
89}
90
91 .alert-primary .close {
92 color: #000000;
93 font-size: 2rem;
94 float:right;
95 position: inherit;
96 margin-top: 0.5rem;
97}
98 .alert-text-primary {
99 color: #000000!important;
100 border: 6px #000000 solid!important;
101 }
102
103 .alert-text-red {
104 color: #000000!important;
105 border: 6px #D4351C solid!important;
106 }
107
108 .alert-text-yellow {
109 color: #000000!important;
110 border: 6px #D4351C solid!important;
111 }
112
113 </style>
114
115
116 <#assign journalArticleRetrievalService = serviceLocator.findService("com.placecube.journal.service.JournalArticleRetrievalService") />
117
118 <#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleService") />
119
120 <#assign getterUtil = staticUtil["com.liferay.portal.kernel.util.GetterUtil"] />
121
122
123 <#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
124
125 <#assign AssetCategoryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryService")>
126
127
128 <#list entries as curEntry>
129
130 <#assign journalArticle = journalArticleService.getLatestArticle(curEntry.getClassPK()) />
131
132 <#assign alertBody = journalArticleRetrievalService.getFieldValue(journalArticle,"alertBody",locale) />
133
134 <#assign body = alertBody.get() />
135
136 <#assign alertId = curEntry.entryId?c>
137
138 <#assign alertDismiss = journalArticleRetrievalService.getFieldValue(journalArticle,"select_dismiss",locale) />
139
140 <#assign alertType = journalArticleRetrievalService.getFieldValue(journalArticle,"select_type",locale) />
141
142 <#if alertType?contains('value 3')>
143 <div class="alert alert-primary <#if alertDismiss?contains('value 1')>alert-dismissible</#if> p-0" role="alert">
144 <div class="alert-body-wide d-flex justify-content-center">
145 <div class="alert-body">
146 <div class="alert-top alert-warning px-3">
147 <#if alertDismiss?contains('value 1')>
148 <button type="button" id ="alertClose" onclick="hideAlert(${alertId})" class="close text-dark mt-2" data-dismiss="alert" aria-label="Close">
149 <span aria-hidden="true">×</span>
150 </button>
151 </#if>
152 <h2 class="text-dark">
153 <svg class="lexicon-icon lexicon-icon-exclamation-full" viewBox="0 0 512 512">
154 <path class="lexicon-icon-outline" d="M256,0C114.6,0,0,114.6,0,256s114.6,256,256,256s256-114.6,256-256S397.4,0,256,0z M256,384c-17.7,0-32-14.3-32-32
155 s14.3-32,32-32s32,14.3,32,32S273.7,384,256,384z M272,288h-32l-16-160h64L272,288z"></path>
156 </svg> Important
157 </h2>
158 </div>
159 <div class="alert-text alert-warning px-3">
160 <h3 class="mt-2">${curEntry.getTitle(locale)}</h3>
161 <p>${body}</p>
162 </div>
163 </div>
164 </div>
165 </#if>
166
167 <#list curEntry.categories as category>
168
169 <#assign cat = category.getName()?lower_case />
170 <#assign cat2 = cat?replace("and ", "")/>
171 <#assign cat3 = cat2?replace(",", "")/>
172 <#list breadcrumbEntries as breadcrumb>
173
174 <#assign breadcrumbLevel = breadcrumb.getTitle()?lower_case/>
175 <#assign breadcrumbLevelLower = breadcrumbLevel?replace(",", "")/>
176 <#assign breadcrumbLevelLower2 = breadcrumbLevelLower?replace("and ", "")/>
177 <#assign breadcrumbLevelLower3 = breadcrumbLevelLower2?replace(" information", "")/>
178
179 <#--<p>Breadcrumb level: : ${breadcrumbLevelLower3}</p>-->
180
181 <#if !isAlertHidden(alertId)>
182
183 <#--<p>Alert category : ${cat3}</p>-->
184
185 <#if breadcrumbLevelLower3?matches(cat3) || !cat3?has_content>
186
187
188 <#if normalAlert??>
189 <div class="alert alert-primary d-flex justify-content-center <#if alertDismiss?contains('value 1')>alert-dismissible</#if> p-0 mb-2" role="alert">
190 <div class="alert-body">
191 <div class="alert-top
192 <#if alertType?contains('value 1')>red-background</#if>
193 <#if alertType?contains('value 2')>bg-black</#if> px-3">
194 <#if alertDismiss?contains('value 1')>
195 <button type="button" id ="alertClose" onclick="hideAlert(${alertId})" class="close text-light" data-dismiss="alert" aria-label="Close">
196 <span aria-hidden="true">×</span>
197 </button>
198 </#if>
199 <h2>
200 <svg class="lexicon-icon lexicon-icon-exclamation-full" viewBox="0 0 512 512">
201 <path class="lexicon-icon-outline" d="M256,0C114.6,0,0,114.6,0,256s114.6,256,256,256s256-114.6,256-256S397.4,0,256,0z M256,384c-17.7,0-32-14.3-32-32
202 s14.3-32,32-32s32,14.3,32,32S273.7,384,256,384z M272,288h-32l-16-160h64L272,288z"></path>
203 </svg>
204 <#if alertType?contains('value 1')>Warning</#if>
205 <#if alertType?contains('value 2')>Important</#if>
206 </h2>
207 </div>
208 <div class="
209 <#if alertType?contains('value 1')>alert-text-red</#if>
210 <#if alertType?contains('value 2')>alert-text-primary</#if> px-3">
211 <h3 class="mt-2">${curEntry.getTitle(locale)}</h3>
212 <p>${body}</p>
213 </div>
214 </div>
215 </div>
216 </#if>
217 </#if>
218 </#if>
219 </#list>
220 </#list>
221 </#list>
222 </#if>
223</#compress>
Which bin do I use
If you have had a tag or sticker placed on your bin, find out why and what you can do to make sure your bin is emptied next time.
Please note that your bin(s) may differ in appearance.
Food waste - weekly collection
Kitchen caddy liners are available at most supermarkets and local shops.
7-litre kitchen caddy (keep indoors)
23-litre food waste bin (keep outdoors)
What can go in your food waste bin
Yes please | No thanks |
---|---|
All cooked and uncooked food, including:
|
|
Compostable caddy bags or newspaper can be used to line caddy. Find out more about food waste and where it goes.
Rubbish - fortnightly collection
Depending on your circumstances, each household has been allocated one of the following two options.
Standard: 140-litre black rubbish bin
Bag and box: Two authorised blue sacks per fortnight
What goes in your rubbish bin
Yes please | No thanks |
---|---|
Rubbish that cannot be recycled, including:
|
|
Recycling - fortnightly collection
Depending on your circumstances, each household has been allocated one of the following two options.
Standard: 240-litre black wheelie bin with a green lid
Bag and box: Two boxes with lids for mixed recycling
What can go in your recycling bin
Yes please | No thanks |
---|---|
Paper and cardboard including:
Most hard plastics (any colour) from food, drink and household products, including:
|
|
Plastic items can be rinsed to remove excess food/liquid, but do not need to be cleaned thoroughly. Take care when handling items that previously contained raw meat and fish.
Box for glass
What can go in your glass box
Yes please | No thanks |
---|---|
|
|
Never fill your glass box higher than the top of the box itself. Extra glass will be accepted at the kerbside provided it is placed in a sturdy container that can be easily lifted and emptied by a single person.
Reusable battery bag
Once full, please place your battery bag out alongside or on top of your recycling bin - never inside any bin.
What can go in your battery bagYes please | No thanks |
---|---|
|
|
Garden waste - fortnightly collection
Sign up for our subscription service.
Standard: 240-litre black wheelie bin with a brown lid
Sack: Authorised compostable paper sack (2 per collection)
Table of suitable and unsuitable materials to be placed in garden waste bin
Yes please | No thanks |
---|---|
|
|
Most items that cannot be recycled using the kerbside collection service can be taken to a household recycling centre.
Wrong stuff in the wrong bin?
If there is any reason why we cannot collect some or all of your waste, we will leave a tag or sticker on the container. Find out what our tags and stickers mean.