Clients
An error occurred while processing the template.
No compatible overloaded variation was found; declared parameter types and argument value types mismatch. The FTL type of the argument values were: extended_hash+string (com.liferay.portal.json.JSONObjectImpl wrapped into f.e.b.StringModel). The Java type of the argument values were: com.liferay.portal.json.JSONObjectImpl. The matching overload was searched among these members: com.liferay.portal.json.JSONFactoryImpl.createJSONObject(String), com.liferay.portal.json.JSONFactoryImpl.createJSONObject(Map), com.liferay.portal.json.JSONFactoryImpl.createJSONObject() ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign clientLogo = jsonFactoryUtil... [in template "20101#20128#3282451" at line 30, column 49] ----
1<style>
2 .fancybox__content {
3 max-width: 750px;
4 }
5</style>
6
7<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/>
8<#assign sectorVocabularyId = mlxConstants.getLongConstant('VocabularyIds','VOCABULARY_SECTORS_ID') />
9<#assign images_folder = themeDisplay.getPathThemeImages() />
10
11<div class="corporate--section">
12 <div class="corporate--client--slider1">
13 <div class="corporate--client--slider1--container" data-gtm-block-name="Client" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--client--slider1--container", "autoplay":true, "autoplayButtonOutput":false, "mouseDrag":true, "controls":false, "nav":false, "loop":false, "responsive": { "0": {"items": 2}, "768": {"items": 3}, "1200": {"items": 4}}}'>
14 <#if entries?has_content>
15
16 <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" />
17
18 <#list entries as curEntry>
19 <#assign client = mlxAssetHelperService.getJournalArticleByEntry(curEntry) />
20 <#assign clientArticleId = client.getArticleId() />
21 <#assign clientGroupId = client.getGroupId() />
22 <#assign clientValues = mlxJournalHelperService.getStructureFieldValues(client, locale) />
23 <#assign clientActivity = (clientValues["activity"])!"" />
24 <#assign clientVideos = (clientValues["videos"])!"" />
25 <#assign clientUrl = mlxUrlUtilService.getUrlByJournalArticle(client, locale, groupId)?string />
26 <#assign clientName = (clientValues["name"])!"" />
27 <#assign clientLogoContent = (clientValues["logo"])!"{}" />
28
29 <#if clientLogoContent?has_content>
30 <#assign clientLogo = jsonFactoryUtil.createJSONObject(clientLogoContent) />
31 </#if>
32
33 <!-- sector -->
34 <#assign sectorCategory = mlxAssetHelperService.getAssetCategoryByAssetEntryAndVocabularyId(curEntry, sectorVocabularyId)!"" />
35 <#if sectorCategory != "">
36 <#assign sectorCategoryId = sectorCategory.categoryId />
37 <#else>
38 <#assign sectorCategoryId = 0 />
39 </#if>
40 <#assign sector = mlxAssetHelperService.getAssetCategory(sectorCategoryId)!"" />
41 <#if sector != "">
42 <#assign sectorTitle = sector.getTitle(locale) />
43 <#else>
44 <#assign sectorTitle = "" />
45 </#if>
46 <#if clientVideos?has_content>
47 <#list clientVideos as clientVideo>
48 <#assign clientVideoJSON = jsonFactoryUtil.createJSONObject(clientVideo) />
49 <#assign clientVideoUUID = clientVideoJSON.getString("uuid") />
50 <#assign clientVideoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(clientVideoUUID, locale) />
51 </#list>
52 </#if>
53 <#if clientLogo?has_content>
54 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(clientLogo.uuid, globalGroupId) />
55 <#assign clientLogoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(clientLogo.uuid, "${locale}")/>
56 <#assign clientLogoAlt = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale)!""/>
57
58 <#if clientLogoAlt == "">
59 <#assign clientLogoAlt = clientName />
60 </#if>
61
62 <div class="corporate--client--slider1--item">
63 <figure class="corporate--client--slider1--item-figure">
64 <#if clientVideoUrl?has_content>
65 <a href="${clientUrl}" rel="nofollow" data-fancybox data-width="75%" data-height="906" data-type="iframe" class="corporate--client--slider1--item-image-cta" >
66 ${corporate.img(cdn+clientLogoUrl, true, 'alt="' + clientLogoAlt + '"', 'title="' + clientLogoAlt + '"', 'class="corporate--client--slider1--item-image"')}
67
68 <span class="corporate--client--slider1--item-cta">
69 ${corporate.img(images_folder + "/icons/play-button-min.svg", true, 'class="corporate--client--slider1--video-icon"')}
70 </span>
71 </a>
72 <#else>
73 <a href="${clientUrl}" rel="nofollow" data-fancybox data-width="50%" data-type="iframe" class="corporate--client--slider1--item-image-cta" >
74 ${corporate.img(cdn+clientLogoUrl, true, 'alt="' + clientLogoAlt + '"', 'title="' + clientLogoAlt + '"', 'class="corporate--client--slider1--item-image"')}
75 </a>
76 </#if>
77 </figure>
78 </div>
79 </#if>
80 </#list>
81 </#if>
82 </div>
83 </div>
84</div>
85
86<#-- MAQUETACIÓN FILTROS PARA PAGINA DE CLIENTES -->
87<#--
88<#assign userId = themeDisplay.getUserId() />
89<#assign productGeneralList = [] />
90<#assign sectorGeneralList = [] />
91<#assign productStrId = 398133 />
92<#assign productSoftwareStrId = 455191 />
93<#assign sortField = "order" />
94-->
95<#-- ETIQUETAS DE IDIOMA -->
96<#--
97<#assign filterText = languageUtil.get(locale,"mlx.client.filter.filtered-by") />
98<#assign filterSectorSelectText = languageUtil.get(locale,"mlx.client.filter.sector") />
99<#assign filterSolutionsSelectText = languageUtil.get(locale,"mlx.client.filter.product") />
100<#assign filterButtonText = languageUtil.get(locale,"mlx.client.filter.see-customers") />
101-->
102<#-- OBTENER LISTA DE PRODUCTOS NORMALES E INSERTAR EN LISTA GENERAL -->
103<#--
104<#assign productList = mlxAssetHelperService.getJournalArticleListByStructureIdIdSortedByStructureFieldName(groupId, userId, productStrId, sortField, locale) />
105
106<#if productList?has_content>
107 <#list productList as product>
108 <#assign productGeneralList += [product] />
109 </#list>
110</#if>
111-->
112<#-- OBTENER LISTA DE PRODUCTOS SOFTWARE E INSERTAR EN LISTA GENERAL -->
113<#--
114<#assign productSoftwareList = mlxAssetHelperService.getJournalArticleListByStructureIdIdSortedByStructureFieldName(groupId, userId, productSoftwareStrId, sortField, locale) />
115
116<#if productSoftwareList?has_content>
117 <#list productSoftwareList as productSoftware>
118 <#assign productGeneralList += [productSoftware] />
119 </#list>
120</#if>
121-->
122<#-- OBTENER LISTA DE SECTORES -->
123<#--
124<#assign vocabularyId = mlxConstants.getLongConstant('VocabularyIds','VOCABULARY_SECTORS_ID') />
125<#assign sectorsList = mlxAssetHelperService.getAssetCategoriesByVocabularyId(vocabularyId) />
126-->
127<#--
128<div class="corporate--client--filters">
129 <div class="corporate--client--filters--container">
130 <h4 class="corporate--client--filters--title">${filterText}</h4>
131 <form class="corporate--client--filters--form">
132 <div class="corporate--client--filters--form--row">
133 <div class="corporate--client--filters--form--column--small">
134 <select id="listaSectores" name="listaSectores" required="required" tabindex="1" class="corporate--client--filters--form--select">
135 <option value="">${filterSectorSelectText}</option>
136 <#if sectorsList?has_content>
137 <#list sectorsList as sector>
138 <option value="${sector.getCategoryId()}">${sector.getTitle(locale)}</option>
139 </#list>
140 </#if>
141 </select>
142 </div>
143 <div class="corporate--client--filters--form--column--small">
144 <select id="listaCategorias" name="listaCategorias" required="required" tabindex="1" class="corporate--client--filters--form--select">
145 <option value="">${filterSolutionsSelectText}</option>
146
147 <#if productGeneralList?has_content>
148 <#list productGeneralList as productGeneral>
149 <#assign productGeneralName = mlxJournalHelperService.getStructureFieldValue(productGeneral, "name", locale) />
150 <option value="${productGeneral.articleId}">${productGeneralName}</option>
151 </#list>
152 </#if>
153 </select>
154 </div>
155 <div class="corporate--client--filters--form--column--small">
156 <button class="corporate--client--filters--button" id="submitPC" type=button onclick="" >${filterButtonText}</button>
157 </div>
158 </div>
159 </form>
160 </div>
161</div>
162-->
An error occurred while processing the template.
No compatible overloaded variation was found; declared parameter types and argument value types mismatch. The FTL type of the argument values were: extended_hash+string (com.liferay.portal.json.JSONObjectImpl wrapped into f.e.b.StringModel). The Java type of the argument values were: com.liferay.portal.json.JSONObjectImpl. The matching overload was searched among these members: com.liferay.portal.json.JSONFactoryImpl.createJSONObject(String), com.liferay.portal.json.JSONFactoryImpl.createJSONObject(Map), com.liferay.portal.json.JSONFactoryImpl.createJSONObject() ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign clientVideoJSON = jsonFactory... [in template "20101#20128#3282424" at line 54, column 25] ----
1<#-- VARIABLES GLOBALES -->
2<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL") />
3<#assign clientStrKey = "CLIENT-STR" />
4<#assign productStrKeys = ["PRODUCT-STR", "SOFTWARE-SOLUTIONS-PRODUCTS-STR", "SOFTWARE-PRODUCT-STR"] />
5<#assign practicalCaseStrKeys = "PRACTICAL-CASE-STR" />
6<#assign sectorVocabularyId = mlxConstants.getLongConstant('VocabularyIds','VOCABULARY_SECTORS_ID') />
7
8<#-- ETIQUETAS DE IDIOMA -->
9<#assign lbListText><@corporate.mlxlanguage key='mlx.client.list.some-clients' /></#assign>
10<#assign lbPaginationText><@corporate.mlxlanguage key='mlx.client.list.see-more' /></#assign>
11<#assign lbNoResultsText><@corporate.mlxlanguage key='mlx.client.list.no-results' /></#assign>
12<#assign lbViewVideo><@corporate.mlxlanguage key='mlx.client.watch-video' /></#assign>
13<#assign lbSector><@corporate.mlxlanguage key='mlx.client.sector' /></#assign>
14<#assign lbActivity><@corporate.mlxlanguage key='mlx.client.activity' /></#assign>
15<#assign lbInstallation><@corporate.mlxlanguage key='mlx.client.installation' /></#assign>
16<#assign lbViewCasePractice><@corporate.mlxlanguage key='mlx.client.see-practical-case' /></#assign>
17
18<#if entries?has_content>
19
20 <#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" />
21
22 <div class="corporate--client--list--container" data-gtm-block-name="Client">
23
24 <#-- TITULO SECCION -->
25 <h3 class="corporate--client--list--title">${lbListText}</h3>
26
27 <div class="corporate--client--list" id="contenedorClientes">
28 <#list entries as curEntry>
29 <#assign client = mlxAssetHelperService.getJournalArticleByEntry(curEntry) />
30 <#assign clientUrl = mlxUrlUtilService.getUrlByJournalArticle(client, locale, groupId)?string />
31 <#assign clientArticleId = client.getArticleId() />
32 <#assign clientGroupId = client.getGroupId() />
33 <#assign clientValues = mlxJournalHelperService.getStructureFieldValues(client, locale) />
34 <#assign clientName = (clientValues["name"]?string)!"" />
35 <#assign clientActivity = (clientValues["activity"])!"" />
36 <#assign clientVideos = (clientValues["videos"])!"" />
37
38 <!-- sector -->
39 <#assign sectorCategory = mlxAssetHelperService.getAssetCategoryByAssetEntryAndVocabularyId(curEntry, sectorVocabularyId)!"" />
40 <#if sectorCategory != "">
41 <#assign sectorCategoryId = sectorCategory.categoryId />
42 <#else>
43 <#assign sectorCategoryId = 0 />
44 </#if>
45 <#assign sector = mlxAssetHelperService.getAssetCategory(sectorCategoryId)!"" />
46 <#if sector != "">
47 <#assign sectorTitle = sector.getTitle(locale) />
48 <#else>
49 <#assign sectorTitle = "" />
50 </#if>
51
52 <#if clientVideos?has_content>
53 <#list clientVideos as clientVideo>
54 <#assign clientVideoJSON = jsonFactoryUtil.createJSONObject(clientVideo) />
55 <#assign clientVideoUUID = clientVideoJSON.getString("uuid") />
56 <#assign clientVideoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(clientVideoUUID, locale) />
57 </#list>
58 </#if>
59
60 <#-- PRODUCTOS RELACIONADOS DEL CLIENTE -->
61 <#assign clientProductRelatedContent = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, clientArticleId, productStrKeys)!"" />
62 <#assign clientProduct = [] />
63 <#assign productsId = '' />
64
65 <#if clientProductRelatedContent?has_content>
66 <#list clientProductRelatedContent as content>
67 <#assign productId = content.id />
68 <#assign productValues = mlxJournalHelperService.getStructureFieldValues(content, locale) />
69 <#assign productName = (productValues["name"]?string)!"" />
70 <#assign productUrl = mlxUrlUtilService.getUrlByJournalArticle(content, locale, groupId)?string />
71 <#assign clientProduct += [{"id": productId, "name": productName, "url": productUrl}] />
72 </#list>
73
74 <#list clientProduct as product>
75 <#assign productsId += product.id + ' ' />
76 </#list>
77
78 <#assign clientLogoContent = (clientValues["logo"])!"" />
79
80 <#if clientLogoContent?has_content>
81 <#if clientLogoContent?contains("\\u")>
82 <#assign clientLogoContent = clientLogoContent?replace("\\u", "") />
83 </#if>
84 <#assign clientLogo = clientLogoContent?eval />
85
86 <#if clientLogo?has_content>
87 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(clientLogo.uuid, globalGroupId) />
88 <#assign clientLogoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(clientLogo.uuid, "${locale}") />
89 <#assign clientLogoAlt = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale)!""/>
90
91 <#if clientLogoAlt == "">
92 <#assign clientLogoAlt = clientName />
93 </#if>
94
95 <div class="corporate--client--list--item" data-sector="${sectorCategoryId}" data-products="${productsId}">
96 <#if clientVideoUrl?has_content>
97 <a href="${clientUrl}" class="corporate--client--list--item--link" rel="nofollow" data-fancybox data-video data-width="75%" data-type="iframe">
98 ${corporate.img(cdn+clientLogoUrl, true, 'alt="' + clientLogoAlt + '"', 'title="' + clientLogoAlt + '"', 'class="corporate--client--list--item--image"')}
99 <span class="corporate--client--list--item--badge">${lbViewVideo}</span>
100 </a>
101 <#else>
102 <a href="${clientUrl}" class="corporate--client--list--item--link" rel="nofollow" data-fancybox data-width="50%" data-type="iframe">
103 ${corporate.img(cdn+clientLogoUrl, true, 'alt="' + clientLogoAlt + '"', 'title="' + clientLogoAlt + '"', 'class="corporate--client--list--item--image"')}
104 </a>
105 </#if>
106 </div>
107 </#if>
108 </#if>
109 </#if>
110 </#list>
111 </div>
112 <#-- MENSAJE DE "SIN RESULTADOS" -->
113 <div id="noDataMSG" style="display: none;">
114 ${lbNoResultsText}
115 </div>
116
117</#if>
118<#-- TO-DO: acabar de dejar fino, por el momento ocultamos los filtros
119<script>
120 function setDisplayBtLoadMore(property) {
121 const containerBtLoadMore = document.querySelector('#show-more button');
122 containerBtLoadMore.style.display = property;
123 }
124
125 function addResults(container, elements, property) {
126 Array.from(elements)
127 .forEach(function(element) {
128 container.append(element);
129 element.style.display = property;
130 });
131 }
132
133 function removeElementsByClass(className){
134 const elements = document.getElementsByClassName(className);
135 while(elements.length > 0){
136 elements[0].parentNode.removeChild(elements[0]);
137 }
138 }
139
140 function existsData(elements) {
141 const lbNoData = document.querySelector('#noDataMSG');
142
143 if (elements.length == 0) lbNoData.style.display = 'inline-block';
144 else lbNoData.style.display = 'none';
145 }
146
147 function setDisplayResults(container, elements, limitElements) {
148
149 removeElementsByClass('corporate--client--list--item');
150
151 switch(true) {
152 case (elements.length >= limitElements):
153 //setDisplayBtLoadMore('inline-block');
154
155 let resultsLimit = elements.slice(0, limitElements);
156 let resultsOver = elements.slice(limitElements, elements.length);
157
158 addResults(container, resultsLimit, "flex");
159 addResults(container, resultsOver, "none");
160 break;
161
162 case ((elements.length < limitElements) && (elements.length > 0)):
163 //setDisplayBtLoadMore("none");
164 addResults(container, elements, "flex");
165 break;
166
167 case (elements.length == 0):
168 //setDisplayBtLoadMore("none");
169 break;
170 }
171 }
172
173 /* INICIO */
174 const btLoadMore = document.querySelector('#show-more button');
175 const btFilter = document.querySelector('#submitPC');
176 const CONTAINER = document.querySelector('#contenedorClientes');
177 const ELEMENTS = [...document.querySelectorAll('.corporate--client--list--item')];
178 const LIMITELEMENTS = 36;
179 let currentItems = LIMITELEMENTS;
180 let currentElements = ELEMENTS;
181
182 /*
183 existsData(ELEMENTS);
184 setDisplayResults(CONTAINER, ELEMENTS, LIMITELEMENTS);
185
186 btLoadMore.addEventListener('click', (e) => {
187 for (let i = currentItems; i < currentItems + LIMITELEMENTS; i++) {
188 if (currentElements[i]) {
189 currentElements[i].style.display = 'flex';
190 }
191 }
192
193 currentItems += LIMITELEMENTS;
194
195 if (currentItems >= currentElements.length) event.target.style.display = 'none';
196 });
197 */
198 btFilter.addEventListener('click', (e) => {
199 currentItems = LIMITELEMENTS;
200
201 let valueSector = document.querySelector('#listaSectores').value;
202
203 let valueProductString = document.querySelector('#listaCategorias').value;
204 let valueProduct = '';
205 if (valueProductString != '') valueProduct = ((parseInt(valueProductString, 10))+1).toString();
206
207 if (valueSector == '' && valueProduct == '') {
208 setDisplayResults(CONTAINER, ELEMENTS, LIMITELEMENTS);
209 existsData(ELEMENTS);
210 } else if (valueSector != '' && valueProduct == '') {
211 currentElements = ELEMENTS.filter(element => (element.dataset.sector == valueSector));
212 setDisplayResults(CONTAINER, currentElements, LIMITELEMENTS);
213 existsData(currentElements);
214 } else if (valueSector == '' && valueProduct != '') {
215 currentElements = ELEMENTS.filter(element => (element.dataset.products).includes(valueProduct));
216 setDisplayResults(CONTAINER, currentElements, LIMITELEMENTS);
217 existsData(currentElements);
218 } else if (valueSector != '' && valueProduct != '') {
219 currentElements = ELEMENTS.filter(element => (element.dataset.products).includes(valueProduct));
220 finalElements = currentElements.filter(element => (element.dataset.sector == valueSector));
221 setDisplayResults(CONTAINER, finalElements, LIMITELEMENTS);
222 existsData(finalElements);
223 }
224 });
225</script>
226-->
— 36 Items per Page