The following has evaluated to null or missing: ==> item.banner_navigation [in template "10113#11634844#45735967" at line 40, column 96] ---- Tip: It's the step after the last dot that caused this error, not those before it. ---- Tip: If the failing expression is known to be 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: ${fetchCDNLink(item.banner_navigation... [in template "10113#11634844#45735967" at line 40, column 81] ----
1<#assign liferay_theme=PortletJspTagLibs["/META-INF/liferay-theme.tld"] />
2<#assign portlet=PortletJspTagLibs["/META-INF/liferay-portlet.tld"] />
3<@liferay_theme["defineObjects"] />
4<@portlet["defineObjects"] />
5
6<#assign today=.now?string('yyyy-MM-dd')?date('yyyy-MM-dd') />
7<#if TransitionSpeed.getData() !="">
8 <#assign autoPlay=TransitionSpeed.getData()?number * 1000 />
9 <#else>
10 <#assign autoPlay=10000 * 1000 />
11</#if>
12
13<#assign css_folder=themeDisplay.getPathThemeCss() />
14<#assign javascript_folder=themeDisplay.getPathThemeJavaScript() />
15<#assign images_folder=themeDisplay.getPathThemeImages() />
16
17
18
19<script src="${javascript_folder}/theme-pablo/start_page_carousel.js?v1712825033702"></script>
20
21
22<div class="MainCarousel-wrap">
23 <div class="MainCarousel-main js-spc-carousel">
24 <div class="MainCarousel-swiper js-swiper-carousel">
25 <div class="swiper-wrapper">
26 <#assign number_of_banners=0>
27
28 <#list Naslov.getSiblings() as item>
29 <#if number_of_banners lt 5>
30 <#assign doRender=((item.SchedulingDateFrom.getData()?has_content)?then(today gte
31 item.SchedulingDateFrom.getData()?date('yyyy-MM-dd'), true)) &&
32 ((item.SchedulingDateTo.getData()?has_content)?then(today lte
33 item.SchedulingDateTo.getData()?date('yyyy-MM-dd') ,true))>
34 <#if doRender>
35 <#assign number_of_banners++>
36 <#assign gtmName="" />
37 <#if item.GTMLabel??>
38 <#assign gtmName=item.GTMLabel.getData() />
39 </#if>
40 <div class="swiper-slide js-swiper-thumb-image" data-thumb="${fetchCDNLink(item.banner_navigation.getData())}">
41 <div class="MainCarousel-main-cell overflow-hidden" data-banner-index="${number_of_banners}"
42 data-gtm-name="${gtmName}">
43 <#assign otvaranjeLinka="">
44 <#if item.OtvaranjeLinka.getData()=="new window">
45 <#assign otvaranjeLinka="_blank">
46 </#if>
47 <#assign link="" />
48 <#assign modalId="" />
49 <#assign modalTriggerClass="" />
50 <#assign ffCustomTitle="" />
51 <#if item.LinkButton.getData() !="">
52 <#assign link=item.LinkButton.getData() />
53 <#elseif item.ModalId?? && item.ModalId.getData() !="">
54 <#assign modalIdSufix="'" />
55 <#assign modalId="data-modal='#" />
56 <#assign modalId=modalId + item.ModalId.getData() />
57 <#assign modalId=modalId + modalIdSufix />
58 <#assign link="#" />
59 <#assign modalTriggerClass="js-modal-trigger" />
60 <#if item.FFCustomTitle??>
61 <#assign ffCustomTitle=item.FFCustomTitle.getData() />
62 </#if>
63
64 </#if>
65
66 <#if item.LinkButton.getData() !="">
67 <a href="${link}" target="${otvaranjeLinka}" class="block-link gtm-carousel-block-link">
68 </#if>
69
70 <picture class="MainCarousel-image">
71 <source srcset="${fetchCDNLink(item.BannerDesktop.getData())}" media="(min-width: 768px)" />
72 <img src="${fetchCDNLink(item.BannerMobile.getData())}" loading="lazy"/>
73 </picture>
74
75 <div class="MainCarousel-contentBlock-wrap">
76 <div class="container">
77
78 <#assign content_block_color="" />
79
80 <#if item.background_color.getData()=="primary">
81 <#assign content_block_color="is-primary" />
82 <#elseif item.background_color.getData()=="secondary">
83 <#assign content_block_color="is-secondary" />
84 <#elseif item.background_color.getData()=="tertiary">
85 <#assign content_block_color="is-tertiary" />
86 <#elseif item.background_color.getData()=="quaternary">
87 <#assign content_block_color="is-quaternary" />
88 <#elseif item.background_color.getData()=="quinary">
89 <#assign content_block_color="is-quinary" />
90 </#if>
91
92 <#if item.ButtonVariant.getData()=="red">
93 <#assign button_color="button--red" />
94 <#elseif item.ButtonVariant.getData()=="white">
95 <#assign button_color="button--light" />
96 </#if>
97
98 <div class="MainCarousel-contentBlock ${content_block_color}">
99 <#if item.CounterContainer?? && item.CounterContainer.HasCounter.getData()=="yes" &&
100 item.CounterContainer.CounterToDate.getData() !="">
101 <#assign longToday=.now?long />
102 <#assign toHours="00" />
103 <#assign toMinutes="00" />
104 <#if item.CounterContainer.CounterToHours.getData()?has_content>
105 <#assign toHours=(item.CounterContainer.CounterToHours.getData()?number>23)?then("23",
106 item.CounterContainer.CounterToHours.getData()) />
107 <#if toHours?length lt 2>
108 <#assign toHours="0" + toHours />
109 </#if>
110 </#if>
111 <#if item.CounterContainer.CounterToMinutes.getData()?has_content>
112 <#assign toMinutes=(item.CounterContainer.CounterToMinutes.getData()?number>
113 59)?then("59", item.CounterContainer.CounterToMinutes.getData()) />
114 <#if toMinutes?length lt 2>
115 <#assign toMinutes="0" + toMinutes />
116 </#if>
117 </#if>
118 <#assign toSeconds="00" />
119
120 <#assign
121 countdownDisplayBuilder=item.CounterContainer.CounterToDate.getData()?date("yyyy-MM-dd")?string.iso
122 + "T" />
123 <#assign countdownDisplayBuilder=countdownDisplayBuilder + toHours />
124 <#assign countdownDisplayBuilder=countdownDisplayBuilder + ":" />
125 <#assign countdownDisplayBuilder=countdownDisplayBuilder + toMinutes />
126 <#assign countdownDisplayBuilder=countdownDisplayBuilder + ":" />
127 <#assign countdownDisplayBuilder=countdownDisplayBuilder + toSeconds />
128
129 <#assign
130 countdownToBuilder=item.CounterContainer.CounterToDate.getData()?date("yyyy-MM-dd")?string
131 + " " />
132 <#assign countdownToBuilder=countdownToBuilder + toHours />
133 <#assign countdownToBuilder=countdownToBuilder + ":" />
134 <#assign countdownToBuilder=countdownToBuilder + toMinutes />
135 <#assign countdownToBuilder=countdownToBuilder + ":" />
136 <#assign countdownToBuilder=countdownToBuilder + toSeconds />
137 <#assign countdownToLong=countdownToBuilder?datetime?long />
138 <#assign countdownDiff=((countdownToLong - longToday)/1000)?floor />
139 <#if countdownDiff gte 0>
140 <div class="mt-4 mb-4 md:mb-8">
141 <div
142 class="Countdown-clock ${item.CounterContainer.CounterBackgroundColor.getData()}-fields js-countdown-clock"
143 data-deadline="${countdownDisplayBuilder}">
144 <div class="Countdown-clock-wrap">
145 <div class="Countdown-clock-field days Countdown-clock-field-nt">
146 <span class="font-serif js-countdown-days number">00</span>
147 <span class="text">dana</span>
148 </div>
149 <div class="Countdown-clock-field hours Countdown-clock-field-nt">
150 <span class="font-serif js-countdown-hours number">00</span>
151 <span class="text">sati</span>
152 </div>
153 <div class="Countdown-clock-field minutes Countdown-clock-field-nt">
154 <span class="font-serif js-countdown-minutes number">00</span>
155 <span class="text">minuta</span>
156 </div>
157 <#if item.CounterContainer.ShowSeconds.getData()="yes">
158 <div class="Countdown-clock-field seconds Countdown-clock-field-nt">
159 <span class="font-serif js-countdown-seconds number">00</span>
160 <span class="text">sekundi</span>
161 </div>
162 </#if>
163 </div>
164 </div>
165 </div>
166 <#else>
167 <div>
168 ${item.CounterContainer.CounterExpiredText.getData()}
169 </div>
170 </#if>
171 </#if>
172
173 <div class="MainCarousel-description">
174 <#if item?has_content>
175 <h3 class="MainCarousel-title font-serif">${item.getData()}</h3>
176 </#if>
177 <#if item.Podnaslov?has_content>
178 <p class="MainCarousel-text text-base md:text-lg font-normal">
179 ${item.Podnaslov.getData()}</p>
180 </#if>
181
182 <#if link !="" && item.ButtonText.getData() !="">
183 <button
184 class="button button--primary ${button_color} button--has-shadow serif ${modalTriggerClass}"
185 href="${link}" target="${otvaranjeLinka}" ${modalId}
186 data-ff-custom-title="${ffCustomTitle}">
187 <span class="button__label">${item.ButtonText.getData()}</span>
188 <span class="button__icon icon-right">
189 <svg width="24" height="24" viewBox="0 0 24 24" fill="none"
190 xmlns="http://www.w3.org/2000/svg">
191 <path
192 d="M15.186 12.0016L9.9375 17.25L8.8125 16.125L12.9368 12.0007L8.8125 7.875L9.9375 6.75L15.186 12H15.1875L15.1868 12.0007L15.1875 12.0016H15.186Z"
193 fill="currentColor"></path>
194 </svg>
195 </span>
196 </button>
197 </#if>
198 </div>
199 </div>
200
201 <#if getterUtil.getBoolean(item.patch.show_patch.getData())>
202 <#assign patch_type=item.patch.patch_type.getData() />
203 <#assign patch_type_class="" />
204
205 <#if patch_type !="primary">
206 <#assign patch_type_class="Patch--secondary" />
207 </#if>
208
209 <div class="Patch-wrap font-serif ${patch_type_class}">
210 <#if item.patch.patch_small_text.getData() !="" && patch_type=="primary">
211 <p class="Patch Patch--black is-small">
212 <span class="Patch-txt">
213 ${item.patch.patch_small_text.getData()}
214 </span>
215 </p>
216 </#if>
217
218 <#assign patch_secondary_class="" />
219
220 <#if patch_type=="secondary-red">
221 <#assign patch_secondary_class="Patch--big-red" />
222 <#elseif patch_type=="secondary-black">
223 <#assign patch_secondary_class="Patch--big-black" />
224 </#if>
225
226 <p class="Patch Patch--red ${patch_secondary_class}">
227 <span class="font-bold">
228 <#if item.patch.patch_subtitle.getData() !="">
229 <span
230 class="font-normal Patch-subtitle">${item.patch.patch_subtitle.getData()}</span>
231 </#if>
232 <span class="Patch-title">${item.patch.patch_title.getData()}</span>
233 <#if item.patch.patch_currency_text.getData() !="">
234 <span
235 class="font-normal Patch-currency big-kn">${item.patch.patch_currency_text.getData()}</span>
236 </#if>
237 <#if item.patch.patch_discount_text.getData() !="">
238 <span class="Patch-discount">${item.patch.patch_discount_text.getData()}</span>
239 </#if>
240 </span>
241 <#if item.patch.patch_text.getData() !="">
242 <span class="Patch-txt d-block">${item.patch.patch_text.getData()}</span>
243 </#if>
244 </p>
245 </div>
246 </#if>
247 </div>
248 </div>
249
250 <#if item.LinkButton.getData() !="">
251 </a>
252 </#if>
253
254 </div>
255 </div>
256 </#if>
257 </#if>
258 </#list>
259 </div>
260 <#if number_of_banners gt 1>
261 <div class="d-flex justify-center">
262 <div class="MainCarousel-pagination"></div>
263 </div>
264 <div class="MainCarousel-navigation">
265 <div class="MainCarousel-button-prev bg-gray-20"><img src="${images_folder}/icons/icon-left.svg" /></div>
266 <div class="MainCarousel-button-next bg-gray-20"><img src="${images_folder}/icons/icon-right.svg" /></div>
267 </div>
268 </#if>
269 </div>
270 </div>
271</div>
272
273<#function fetchCDNLink link>
274 <#if !link?starts_with(themeDisplay.getCDNHost())>
275 <#return (themeDisplay.getCDNHost() + link)>
276 </#if>
277 <#return link>
278</#function>
279
280<script>
281
282 $(document).ready(function () {
283 $('.gtm-carousel-block-link').on("click", "", function () {
284 var component = $(this).parent();
285 var index = component.data('banner-index');
286
287 var promotionId = component.find("h3.MainCarousel-title").text();
288 var title = (component.data("gtm-name") != "") ? component.data("gtm-name") : component.find("h3.MainCarousel-title").text();
289
290 <#-- new GA4 code -- >
291 var selectPromotionData = {
292 'event': 'select_promotion',
293 'ecommerce': {
294 'items': [{
295 'promotion_id': promotionId,
296 'promotion_name': title,
297 'creative_slot': "Homepage",
298 'index': index
299 }]
300 }
301 };
302
303 window.dataLayer = window.dataLayer || [];
304 window.dataLayer.push({ ecommerce: null });
305 window.dataLayer.push(selectPromotionData);
306
307 <#-- old GA3 code, ready for deletion when GA3 shuts down -->
308 var imageName = component.find("img.MainCarousel-image").attr("alt");
309 window.dataLayer.push({
310 'event': 'promotionClick',
311 'ecommerce': {
312 'promoClick': {
313 'promotions': [{
314 'id': 'Home - Slider',
315 'name': title,
316 'creative': imageName,
317 'position': index
318 }]
319 }
320 }
321 });
322 <#-- end of old GA3 -->
323 });
324
325 <#-- new GA4 code -->
326 window.dataLayer = window.dataLayer || [];
327 var mainPromoCarouselPromoData = [];
328
329 $.each($(".MainCarousel-main-cell"), function () {
330 var promotionData = {
331 'promotion_id': $(this).find("h3.MainCarousel-title").text(),
332 'promotion_name': ($(this).data("gtm-name") != "") ? $(this).data("gtm-name") : $(this).find("h3.MainCarousel-title").text(),
333 'creative_slot': "Homepage",
334 'index': $(this).data('banner-index')
335 };
336 mainPromoCarouselPromoData.push(promotionData);
337 });
338
339 var promotionViewData = {
340 'event': 'view_promotion',
341 'ecommerce': {
342 'items': mainPromoCarouselPromoData
343 }
344 };
345
346 window.dataLayer = window.dataLayer || [];
347 window.dataLayer.push({ ecommerce: null });
348 window.dataLayer.push(promotionViewData);
349 <#-- end of new GA4 code -->
350
351 <#-- old GA3 code, ready for deletion when GA3 shuts down -->
352 var promotionsObjectList = [];
353 $.each($(".MainCarousel-main-cell"), function () {
354 var promotionsObject = {
355 'id': 'Home - Slider',
356 'name': ($(this).data("gtm-name") != "") ? $(this).data("gtm-name") : $(this).find("h3.MainCarousel-title").text(),
357 'creative': $(this).find("img.MainCarousel-image").attr("title"),
358 'position': $(this).data('banner-index')
359 };
360 promotionsObjectList.push(promotionsObject);
361 });
362
363 window.dataLayer.push({
364 'ecommerce': {
365 'promoView': {
366 'promotions': promotionsObjectList
367 }
368 }
369 });
370 <#-- end of old GA3 -->
371 });
372</script>
Posao u A1
Provjeri koje su trenutno otvorene pozicije, kako poslati otvorenu molbu za posao i kako izgleda naš proces zapošljavanja.Studenti i pripravnici
Kod nas trenutno radi preko 400 studenata – započni i ti svoju karijeru s nama!Mi smo A1 Hrvatska
Već smo 19 godina ponosni član A1 Telekom Austria Grupe, vodećeg pružatelja digitalnih servisa i komunikacijskih rješenja u središnjoj i istočnoj Europi, koji trenutačno zapošljava 19.000 zaposlenika te posluje u sedam država pružajući usluge za približno 24 milijuna korisnika.
Na hrvatskom tržištu smo davne 1998. počeli kao start-up Vipnet d.o.o., i iako smo od tada značajno narasli, nikada nismo postali tipična korporacija. Uvijek smo bili dinamičniji od ostatka tržišta te brže odgovarali na potrebe naših korisnika. Odlukom A1 Telekom Austria Grupa, Vipnet d.o.o. je 2018. godine postao A1 Hrvatska d.o.o.
Transformacija iz tradicionalnog telekom operatora u digitalnu kompaniju dio je naše evolucije. U tom su procesu presudni upravo ljudi, oko 2000 naših zaposlenika u Hrvatskoj, koji mijenjaju ustaljene procese i zadane norme te stvaraju nešto novo – inovacije za svijet u digitalno doba.
Empowering digital life
Iako nitko ne zna kako će svijet izgledati 2050. godine, mi smo spremni na izazove budućnosti.
I zato je naša nova strategija i svrha: Empowering digital life.
Zašto A1 Hrvatska?
Odaberi karijeru koju ćeš voljeti
U A1 Hrvatska, brojne su mogućnosti za razvoj karijere. I to ne bilo kakve, nego one koju ćeš voljeti! Imat ćeš slobodu i autonomiju u poslu te priliku da se razvijaš kroz rad na izazovnim projektima i inovativnim tehnologijama!
Potičemo internacionalnu suradnju kroz grupne projekte, a ako to želiš, možeš nastaviti razvijati svoju karijeru i u jednoj od sedam zemalja unutar A1 Grupe. Radit ćeš sa izvanrednim ljudima, kolegama od kojih možeš puno naučiti i koji će ti uvijek rado pomoći. Trenutno otvorene pozicije možeš pronaći na linku, a ako nisi pronašao ono što tražiš, možeš nam se javiti na mail karijere@A1.hr
Učimo jedni od drugih i razvijamo se kontinuirano, a posebno cijenimo “can-do” stav i preuzimanje inicijative. Grešaka se ne bojimo, sve dok iz njih učimo, jer vjerujemo da je to jedini pravi put za poticanje inovacija. Atmosfera u našim uredima je jako ugodna, komunikacija otvorena, svi smo na “TI”, a dress-code je ležeran.
Kod nas su stalne samo dinamika i promjene, ali zabave nam nikad ne nedostaje (savjet: i zato nikada ne ostavljaj svoj ekran otključan kad te nema u blizini! ;)) Naši kompanijski partiji su već postali legendarni! Naši ljudi dolaze sa smiješkom na posao, jer ovdje stvarno možeš biti svoj!
Po svemu tome je naša kultura stvarno posebna (ili kako kaže jedan naš kolega: “Imamo svoj đir!” <3)
Povjerenje
Povjerenje stvara okolinu u kojoj su znatiželja, otvorenost i suradnja ključne stavke. Mi u A1 vjerujemo u znanje i sposobnost svakog od naših kolega i težimo odnosu punom povjerenja s našim korisnicima, partnerima i kolegama. To nam pomaže da iz dana u dan rastemo i napredujemo.
Timski rad
Radimo zajedno na način da koristimo zajedničku snagu i kreativnost kako bismo što uspješnije izašli u susret našim korisnicima i udovoljili njihovim potrebama. Timski rad je izuzetno važan u našoj kompaniji te se svačije mišljenje cijeni i uzima u obzir.
Agilnost
Digitalni svijet se mijenja iz dana u dan i ne čeka nikoga da mu se prilagodi. Upravo zato mi smo znatiželjni, odlučni i reagiramo brzo. Nikad ne prestajemo učiti i uvijek otkrivamo nove načine i pristupe kako bismo bili u korak s tehnologijom i trendovima.
Korisničko iskustvo
Povjerenje korisnika za nas je apsolutni prioritet. Zbog toga uvijek razmišljamo o korisničkom iskustvu te kako ga unaprijediti. Bez korisnika-nema posla! Jednostavno je.