The following has evaluated to null or missing: ==> propsUtil.get(ucmLocaleKey) [in template "64056#64102#365043" at line 5, 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: #assign locale = propsUtil.get(ucmLoc... [in template "64056#64102#365043" at line 5, column 1] ----
1<div id="outer-footer" class="updatedFooter" style="padding-left: 0px; width: 1640px;">
2 <div id="inner-footer-expert" class="">
3
4<#assign ucmLocaleKey = themeDisplay.getLocale()+"."+siteType+"."+"ucmLocale">
5<#assign locale = propsUtil.get(ucmLocaleKey)/>
6<#assign apiUrl = propsUtil.get("WEB72_API_DOMAIN")/>
7
8<#assign lr74CutoverCountryCode = propsUtil.get("LR74_CUTOVER_COUNTRY_CODE")/>
9<#assign hays_logo = propsUtil.get("HAYS_LOGO")/>
10
11<#if lr74CutoverCountryCode??>
12<#list lr74CutoverCountryCode?split(",") as countryCode>
13 <#if countryCode = themeDisplay.getLocale()?keep_after_last("_") >
14 <#assign apiUrl = propsUtil.get("API_DOMAIN")/>
15 </#if>
16</#list>
17</#if>
18
19<#attempt>
20
21<#if httpUtil.URLtoString(apiUrl+"/o/HaysContentStructure/getcontentstructure/expertFooter/"+locale)??>
22<#assign response = httpUtil.URLtoString(apiUrl+"/o/HaysContentStructure/getcontentstructure/expertFooter/"+locale)>
23<#assign responseObj = jsonFactoryUtil.createJSONObject(response)>
24<#if responseObj?? && responseObj.results?? && responseObj.results?has_content>
25<#assign getResponseResultArray = responseObj.getJSONArray("results")>
26<div id="footer-bottom">
27 <#if getResponseResultArray.length() gt 0>
28 <#assign siteUrl = getResponseResultArray.get(0).siteUrl>
29
30 <#if getResponseResultArray.get(0).getJSONArray("GroupHeading")?? && getResponseResultArray.get(0).getJSONArray("GroupHeading").length()?? && getResponseResultArray.get(0).getJSONArray("GroupHeading").length() gt 1>
31
32 <#assign groupHeadingArr = getResponseResultArray.get(0).getJSONArray("GroupHeading")>
33 <div class="row single-col gpHeading">
34 <div class="col col-12">
35 <nav>
36 <ul>
37 <#list 0 ..< groupHeadingArr.length()?number as i>
38 <#if groupHeadingArr.get(i).Link?starts_with("/")>
39 <#assign linkUrl = siteUrl + groupHeadingArr.get(i).Link>
40 <li>
41 <a href="${linkUrl}" target="">${groupHeadingArr.get(i).GroupHeading}</a>
42 </li>
43 <#else>
44 <li>
45 <a href="${groupHeadingArr.get(i).Link}" target="">${groupHeadingArr.get(i).GroupHeading}</a>
46 </li>
47 </#if>
48 </#list>
49 </ul>
50 </nav>
51 </div>
52 </div>
53 <#elseif getResponseResultArray.get(0).getJSONArray("FooterLink")??>
54 <#assign FooterLinkArr = getResponseResultArray.get(0).getJSONArray("FooterLink")>
55 <div class="row single-col gpHeading">
56 <div class="col col-12">
57 <nav>
58 <ul>
59 <#list 0 ..< FooterLinkArr.length()?number as i>
60 <#assign linkUrl = FooterLinkArr.get(i).FooterLink?replace("href=\"/", "href=\""+siteUrl+"/" ) >
61 <li>
62 ${linkUrl}
63 </li>
64 </#list>
65 </ul>
66 </nav>
67 </div>
68 </div>
69
70 </#if>
71
72
73 <div class="footer-added">
74 <img src="${hays_logo}"></img>
75 <div class="copyright">
76 <p>
77 <p class="last">${getResponseResultArray.get(0).CopyrightHTML}</p>
78
79 </p>
80 </div>
81 </div>
82 </#if>
83</div>
84</#if>
85</#if>
86<#recover>
87
88</#attempt>
89
90
91 </div>
92</div>
93<script>
94window.addEventListener('DOMContentLoaded', function () {
95 var consent = document.getElementById("teconsent");
96
97 // Find the <ul> inside the nav of gpHeading
98 var ulElement = document.querySelector(".gpHeading nav ul");
99
100 if (consent && ulElement) {
101 var liWrapper = document.createElement("li");
102 liWrapper.appendChild(consent);
103 ulElement.appendChild(liWrapper);
104 } else {
105 console.log("Consent element or target UL not found.");
106 }
107});
108
109$(document).ready(function(){
110 if((Liferay.ThemeDisplay.getLanguageId() != "en_GB") && (location.href.indexOf("/web/") != -1)) {
111 console.log("link update required on the site");
112 $('a').each(function(index) {
113 var layoutRelativeUrl = Liferay.ThemeDisplay.getLayoutRelativeURL();
114 var getSiteUrl = layoutRelativeUrl.substring(0, layoutRelativeUrl.lastIndexOf("/"));
115 var linkVal = $(this).attr("href");
116 if((typeof linkVal !== "undefined") && linkVal.indexOf("https") == -1 && linkVal.indexOf("/")!= -1 && (linkVal.indexOf("/") === linkVal.lastIndexOf("/"))){
117 var updatedLink = getSiteUrl + linkVal ;
118 $(this).attr("href", updatedLink)
119 console.log("link updated - " + updatedLink);
120 }
121 });
122 }
123});
124</script>