1<#-- 1. Get the relative path from the currentURL -->
2<#if currentURL?contains("://")>
3 <#-- Locate the slash after the domain -->
4 <#assign pos = currentURL?index_of("/", currentURL?index_of("://") + 3)>
5 <#assign relativePath = currentURL?substring(pos)>
6<#else>
7 <#assign relativePath = currentURL>
8</#if>
9
10<#-- 2. Remove any trailing slash (if not the root) -->
11<#if relativePath?ends_with("/") && relativePath?length gt 1>
12 <#assign relativePath = relativePath?substring(0, relativePath?length - 1)>
13</#if>
14
15<#-- 3. Split the relative path into segments -->
16<#assign segments = relativePath?split("/")>
17<#-- For example, for:
18 /fr/w/tout-sur-ooredoo/presse/awards/yooz-your-talent-duplicate-2-11
19 we have:
20 segments[0] = "" (because of leading slash)
21 segments[1] = "fr"
22 segments[2] = "w"
23 segments[3] = "tout-sur-ooredoo"
24 segments[4] = "presse"
25 segments[5] = "awards"
26 segments[6] = "yooz-your-talent-duplicate-2-11"
27-->
28
29<#-- 4. Build the target URL by removing first and second segments (after the leading empty element)
30 and also dropping the last segment. In other words, join segments from index 3 to (size - 2). -->
31<#if segments?size gt 3>
32 <#assign targetSegments = []>
33 <#-- Iterate from index 3 up to segments?size - 2 (for our sample, from 3 to 5) -->
34 <#list 3..(segments?size - 2) as i>
35 <#assign targetSegments = targetSegments + [segments[i]]>
36 </#list>
37 <#assign targetURL = "/" + targetSegments?join("/")>
38<#else>
39 <#assign targetURL = relativePath>
40</#if>
41 <#-- 5. Remove "/presse" from the targetURL -->
42<#assign targetURL = targetURL?replace("/presse", "")>
43
44
45<!-- Debug output (remove or comment out for production) -->
46<#-- Retrieve the target Layout using the LayoutLocalService.
47Adjust the second parameter to true if the page is in a private layout. -->
48 <#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")>
49<#assign targetLayout = LayoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, targetURL)>
50
51<#-- Get breadcrumb trail (ancestors) from the target layout -->
52<#assign breadcrumbLayouts = targetLayout.getAncestors()>
53<#-- Reverse the breadcrumbLayouts sequence -->
54<#assign reversedBreadcrumbLayouts = breadcrumbLayouts?reverse>
55
56<#if reversedBreadcrumbLayouts?has_content>
57<ol class="breadcrumb breadcrumb_standard">
58 <#list reversedBreadcrumbLayouts as layout>
59 <li class="breadcrumb-item">
60 <a
61 class="breadcrumb-link"
62 href="${layout.getFriendlyURL(locale)}"
63 >
64 <span class="breadcrumb-text-truncate">${htmlUtil.escape(layout.getName(locale))}</span>
65 </a>
66 </li>
67
68 </#list>
69 <li class="breadcrumb-item breadcrumb-li-active">
70 <a
71 class="breadcrumb-link text-decoration-line: none breadcrumb-text-truncate-active "
72
73 href="${targetLayout.getFriendlyURL(locale)}"
74 >
75 <span class="active breadcrumb-text-truncate">${htmlUtil.escape(targetLayout.getName(locale))}</span>
76 </a>
77</ol>
78</#if>
79
80
81<style>
82 .portlet-boundary_com_liferay_site_navigation_breadcrumb_web_portlet_SiteNavigationBreadcrumbPortlet_ .portlet-content {
83 padding: 0px !important;
84 background: transparent !important;
85 }
86
87 .lfr-layout-structure-item-com-liferay-site-navigation-breadcrumb-web-portlet-sitenavigationbreadcrumbportlet .portlet-content {
88 background: rgb(244 246 248 / var(--tw-bg-opacity));
89 }
90
91 .breadcrumb_standard {
92 background: transparent;
93 max-width: 80rem;
94 margin-left: auto;
95 margin-right: auto;
96 padding-left: 0;
97 }
98
99 .breadcrumb-text-truncate {
100 color: #000000 !important;
101 }
102
103 .breadcrumb-text-truncate.active {
104 color: #d6001c !important;
105 }
106 .rtl .breadcrumb-item + .breadcrumb-item::before {
107 transform: scaleX(-1);
108}
109</style>
110
111<script>
112 function updateBreadcrumb() {
113 var ignoredSegments = ['fr', 'en', 'web', 'guest', 'about-us', 'tout-sur-ooredoo', 'w'];
114 var urlSegments = window.location.pathname.split('/').filter(function(segment) {
115 return !ignoredSegments.includes(segment);
116 });
117
118 var htmlBlock = document.getElementById('htmlblockli');
119 console.log('urlSegments.length', urlSegments.length);
120 if (htmlBlock && urlSegments.length >= 3) {
121 var last2Segments = urlSegments.slice(-3);
122 if (last2Segments[0] && !ignoredSegments.includes(last2Segments[0])) {
123 var newSegment = document.getElementById('newSegment');
124 if (newSegment) {
125 newSegment.textContent = formatString(last2Segments[0]);
126 }
127 } else {
128 console.log('sssssssssssss');
129 var newSegment = document.getElementById('newSegmentli1');
130 newSegment.parentNode.removeChild(newSegment);
131 }
132 if (last2Segments[1] && !ignoredSegments.includes(last2Segments[1])) {
133 console.log('vvvvvvvvv', last2Segments[1]);
134 var newSegment = document.getElementById('newSegment2');
135 if (newSegment) {
136 newSegment.textContent = formatString(last2Segments[1]);
137 newSegment.classList.add("active");
138 }
139 } else {
140 console.log('sssssssssssss');
141 var newSegment = document.getElementById('newSegmentli2');
142 newSegment.parentNode.removeChild(newSegment);
143
144 }
145 }
146 }
147 function formatString(inputString) {
148 // Split the input string by '-'
149 console.log('formattedString start ', inputString);
150 const words = inputString.split('-');
151
152 // Process each word
153 const formattedWords = words.map((word) => {
154 // Check if the word is all uppercase
155 if (word === word.toUpperCase()) {
156 return word.toLowerCase(); // Convert to lowercase if all uppercase
157 }
158
159 // Check if the word has only 2 letters
160 if (word.length === 2) {
161 return word.toLowerCase(); // If 2 letters, keep it in simple case
162 }
163
164 // Capitalize the first letter and keep the rest lowercase
165 return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase();
166 //return word;
167 });
168
169 // Join the formatted words back together with space
170 let formattedString = formattedWords.join(' ');
171 if(formattedString == 'Evenements et Activites Mediatiques' ){
172 formattedString= '${languageUtil.get(locale, "media-activities")}';
173 console.log('formattedString 1 ', formattedString);
174 }
175 if(formattedString == 'Csr et Mecenat' ){
176 formattedString= '${languageUtil.get(locale, "csr-merchant")}';
177 console.log('formattedString 2 ', formattedString);
178 }
179 if(formattedString == 'Communiques de Presse' ){
180 formattedString= '${languageUtil.get(locale, "de-presse")}';
181 console.log('formattedString 3 ', formattedString);
182 }
183
184 if(formattedString == 'A la Une' ){
185 formattedString= '${languageUtil.get(locale, "A La Une")}';
186 console.log('formattedString 4 ', formattedString);
187 }
188
189 console.log('formattedString end ', formattedString);
190 return formattedString;
191 }
192
193 updateBreadcrumb();
194</script>