Rack dynamique (palettier dynamique)

Rack dynamique (palettier dynamique)

Solution de stockage compact pour palettes dont les charges se déplacent par gravité pour optimiser l’espace.

Présentation

Rack dynamique pour palettes : opérations agiles, rotation FIFO parfaite

Le rack dynamique est une structure compacte composée de canaux de stockage munis de rouleaux, légèrement inclinés pour permettre le glissement des palettes. Insérées par la partie la plus élevée du canal, les charges palettisées se déplacent sous l’effet de la gravité jusqu’à l’extrémité opposée, d’où elles peuvent être extraites.

Le palettier à accumulation dynamique est dépourvu d'allées intermédiaires pour gagner en capacité de stockage. Le rayonnage dynamique pour palettes permet par ailleurs de mettre en œuvre une stratégie FIFO (la palette qui entre en premier sort en premier), ce qui contribue à une gestion efficace des stocks.

Le rack dynamique est un système de stockage compact, agile et efficace

Les avantages du rack dynamique

  • Optimisation de la surface. Le rack dynamique est une solution de stockage à haute densité permettant d’augmenter considérablement la capacité de l’entrepôt.
  • Rotation optimale des produits. La compatibilité avec la méthode FIFO (First In, First Out) se traduit par un contrôle précis des stocks.
  • Gain de temps. Grâce à la disponibilité de toutes les références dans la même allée de travail, il est possible de localiser rapidement tout produit. Ainsi, les manœuvres des chariots élévateurs sont moins longues et l’extraction des palettes est accélérée.
  • Chargement et déchargement indépendants. Le dépôt et l’extraction des palettes s’effectuent à partir d’allées distinctes, ce qui évite les interférences. Les chariots élévateurs travaillent ainsi sans interruption.
  • Références multiples. Bien que chaque canal soit réservé à une seule et même référence, ces dernières peuvent varier d’un canal à l’autre.
  • Économies d’énergie. La mise en place de cette solution dans un entrepôt frigorifique contribue à réduire la consommation d’énergie, en raison du moindre volume à réfrigérer.
  • Sécurité et fiabilité. Les différents composants du rack dynamique Mecalux ont été conçus pour garantir un fonctionnement sans danger pour les opérateurs et les marchandises.

Avec le palettier dynamique, nous avons réduit de 50 % le temps nécessaire à l’introduction et à l’extraction des palettes

LAR
Riccardo Monari Directeur d’usine
LAR
(Campogalliano, Italie)

Applications du palettier à accumulation dynamique

Solution idéale pour de nombreux secteurs de l’industrie et de la distribution

Le rack dynamique à palettes convient aux entreprises souhaitant optimiser leur espace de stockage et accélérer les opérations de manutention pour une rotation efficace et sans erreur des marchandises.

Le rack dynamique est particulièrement utile dans les entrepôts contenant de nombreuses palettes par référence

Stockage massif de références à forte rotation

Le rack dynamique est idéal pour stocker de nombreuses unités de charge par référence.

Le rack accumulation dynamique est courant dans les entreprises gérant des denrées périssables

Stockage de denrées périssables

Gestion simplifiée des produits soumis à une date de péremption, dans des secteurs tels que l’agroalimentaire ou le pharmaceutique.

Le rack dynamique permet de relier différentes zones de travail

Entrepôt intermédiaire entre les zones de travail

Possibilité de relier deux zones de travail, généralement celles de la production et de l’expédition.

Le rack dynamique accélère la gestion des tampons de stockage

Gestion des buffers

Dynamisation des flux de marchandises dans les zones tampon de stockage, comme celle des commandes préparées.

Le palettier dynamique réduit la consommation d’énergie dans les entrepôts frigorifiques

Chambres froides

Ce système de stockage compact permet une moindre consommation d’énergie dans les entrepôts frigorifiques.

Fonctionnement d’un rack dynamique à palette

Contrôle optimal des stocks avec des manœuvres optimisées

Le rack FIFO se distingue par une excellente simplicité d’utilisation. Sa structure permet une gestion extrêmement agile qui raccourcit les manœuvres et les distances à parcourir par les chariots élévateurs, pour un dépôt et une extraction accélérés.

Une erreur s'est produite lors du traitement du modèle.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getUrlByJournalArticle(com.liferay.journal.model.JournalArticle, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign articleUrl = mlxUrlUtilServic...  [in template "20101#20128#PRODUCT-PRACTICAL-CASES-RELATED-TAB-TPL" at line 16, column 21]
----
1<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
2<#assign articleId = .vars["reserved-article-id"].data /> 
3<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
4 
5<#assign practicalCaseStr = "PRACTICAL-CASE-STR" /> 
6<#assign relatedArticles = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, practicalCaseStr) /> 
7 
8<#if relatedArticles?has_content> 
9    <div class="corporate--product--cases"> 
10        <div class="corporate--product--cases--container" data-js="slider" data-js-type="tiny-slider" data-js-config='{"container": ".corporate--product--cases--slider", "navPosition": "bottom", "controls": false, "loop":false, "mouseDrag": true}' data-gtm-block-name="Case_Study"> 
11            <h2 class="corporate--product--cases--title">${name.getData()}</h2> 
12            <div class="corporate--product--cases--slider" data-gtm-block-name="Case_Study">  
13 
14                <#list relatedArticles as article> 
15 
16                    <#assign articleUrl =  mlxUrlUtilService.getUrlByJournalArticle(article, "${locale}", groupId)?string /> 
17                    <#assign articleName =  mlxJournalHelperService.getStructureFieldValue(article, "name", "${locale}")?string /> 
18                    <#assign articleDescription =  mlxJournalHelperService.getStructureFieldValue(article, "html_description", "${locale}")?string /> 
19 
20                    <#assign clientStrKey = "CLIENT-STR" /> 
21                    <#assign articleClient = (mlxAssetHelperService.getFirstRelatedArticle(groupId, article.articleId, clientStrKey))!"" /> 
22 
23                    <div class="corporate--product--cases--item"> 
24                        <div class="corporate--product--cases--info"> 
25                            <#if articleClient != ""> 
26                                <#assign clientName = mlxJournalHelperService.getStructureFieldValue(articleClient, "name", "${locale}")?string /> 
27                                <h3 class="corporate--product--cases--item-title">${clientName}</h3> 
28                            <#else> 
29                                <#assign clientName = articleName> 
30                            </#if> 
31                            <#if articleName?has_content> 
32                                <p class="corporate--product--cases--item-subtitle">${articleName}</p> 
33                            </#if> 
34                            <#if articleDescription?has_content> 
35                                <p class="corporate--product--cases--item-description">${articleDescription?truncate(350, '...')} 
36                                    <a href="${articleUrl}" title="${clientName}" class="corporate--product--cases--item-link">${languageUtil.get(locale, "mlx.search.article.readmore")}</a> 
37                                </p> 
38                            </#if> 
39                        </div> 
40                         
41                        <#assign articleImageContent = (mlxJournalHelperService.getStructureFieldValue(article, "list_image", "${locale}"))!{}  /> 
42 
43                        <#if articleImageContent?has_content> 
44                            <#assign articleImage = articleImageContent?eval /> 
45                            <#if articleImage?has_content> 
46                                 
47                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) /> 
48                                <#assign articleImageUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
49                                <#assign articleImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
50                                <#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
51                                 
52                                <div class="corporate--product--cases--thumbnail"> 
53                                 
54                                    <#assign articleVideoContent =  (mlxJournalHelperService.getStructureFieldValue(article, "video_gallery_file", "${locale}"))![] /> 
55                                     
56                                    <#if articleVideoContent?is_sequence> 
57                                        <#if articleVideoContent?first?has_content> 
58                                            <#assign articleVideo= articleVideoContent?first?eval /> 
59																						<#if articleVideo.uuid??> 
60                                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleVideo.uuid, globalGroupId) /> 
61 
62																								<#assign videoTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
63																								<#if (videoTitle=="") > 
64																										<#assign videoTitle = articleName /> 
65																								</#if> 
66 
67																								<#assign articleVideoUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
68																								<#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
69 
70																								<#if youtubeEmbeddedCode?has_content> 
71																										<#assign htmlModalAttributes='data-fancybox="video-gallery-${article?index}" data-type="iframe" data-src="https://www.youtube.com/embed${youtubeEmbeddedCode}" data-caption="${articleName}"' /> 
72																								<#else> 
73																										<#assign htmlModalAttributes='data-fancybox="video-gallery-${article?index}" data-type="html5video" data-src="${articleVideoUrl}" data-thumb="${articleImageUrl}" data-caption="${articleName}"' /> 
74																								</#if> 
75 
76																								<a href="#" class="corporate--product--cases--video-container" data-has-modal="true" ${htmlModalAttributes} data-gtm-event="modal" data-gtm-event-label="/Case-study/Video/${videoTitle}"> 
77																										<figure class="corporate--product--cases--figure" > 
78																												<div class="corporate--product--cases--container-icon" > 
79																														${corporate.img(cdn + '/o/corporate-theme/images/common/th-play2.png', false,'data-role="play-btn" class="corporate--product--cases--video-icon" alt="play"')} 
80																												</div> 
81 
82																												<#assign uuid = articleImage.uuid!"" /> 
83																												<#if uuid?has_content > 
84																														<#assign imgTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
85 
86																														<#assign imgWidth = '640'> 
87																														<#assign imgTitle = clientName!imgTitle> 
88																														<#assign imgAlt = clientName!imgTitle> 
89																														<#assign imgClass = 'corporate--product--cases--item-image corporate--product--cases--item-image-youtube'> 
90																														<#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
91																														${corporate.img(articleImageUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
92																																						'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
93																																						'srcset="' + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
94																																												 articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
95																												</#if> 
96																										</figure>   
97																								</a> 
98																						</#if> 
99                                        <#else> 
100                                            <figure class="corporate--product--cases--figure"> 
101																								<#assign uuid = articleImage.uuid!"" /> 
102																								<#if uuid?has_content > 
103																										<#assign imgTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
104 
105																										<#assign imgWidth = '640'> 
106																										<#assign imgTitle = clientName!imgTitle> 
107																										<#assign imgAlt = clientName!imgTitle> 
108																										<#assign imgClass = 'corporate--product--cases--item-image'> 
109																										<#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
110																										${corporate.img(articleImageUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
111																																		'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
112																																		'srcset="' + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
113																																								 articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
114																								</#if> 
115                                            </figure> 
116                                        </#if> 
117                                    <#else> 
118                                        <#if articleVideoContent?has_content> 
119                                            <#assign articleVideo = jsonFactoryUtil.createJSONObject(articleVideoContent) /> 
120                                            <#if articleVideo.uuid??> 
121                                                <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleVideo.uuid, globalGroupId) /> 
122                                                 
123                                                <#assign videoTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
124                                                <#if (videoTitle=="") > 
125                                                    <#assign videoTitle = articleName /> 
126                                                </#if> 
127                                                 
128                                                <#assign articleVideoUrl = mlxUrlUtilService.getLRUrl(fileEntry) /> 
129                                                <#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
130 
131                                                <#if youtubeEmbeddedCode?has_content> 
132                                                    <#assign htmlModalAttributes='data-fancybox="video-gallery-${article?index}" data-type="iframe" data-src="https://www.youtube.com/embed${youtubeEmbeddedCode}" data-caption="${articleName}"' /> 
133                                                <#else> 
134                                                    <#assign htmlModalAttributes='data-fancybox="video-gallery-${article?index}" data-type="html5video" data-src="${articleVideoUrl}" data-thumb="${articleImageUrl}" data-caption="${articleName}"' /> 
135                                                </#if> 
136 
137                                                <a href="#" class="corporate--product--cases--video-container" data-has-modal="true" ${htmlModalAttributes} data-gtm-event="modal" data-gtm-event-label="/Case-study/Video/${videoTitle}"> 
138                                                    <figure class="corporate--product--cases--figure" > 
139                                                        <div class="corporate--product--cases--container-icon" > 
140                                                            ${corporate.img(cdn + '/o/corporate-theme/images/common/th-play2.png', false,'data-role="play-btn" class="corporate--product--cases--video-icon" alt="play"')} 
141                                                        </div> 
142 
143																												<#assign uuid = articleImage.uuid!"" /> 
144																												<#if uuid?has_content > 
145																														<#assign imgTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
146 
147																														<#assign imgWidth = '640'> 
148																														<#assign imgTitle = clientName!imgTitle> 
149																														<#assign imgAlt = clientName!imgTitle> 
150																														<#assign imgClass = 'corporate--product--cases--item-image corporate--product--cases--item-image-youtube'> 
151																														<#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
152																														${corporate.img(articleImageUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
153																																						'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
154																																						'srcset="' + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
155																																												 articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
156																											</#if> 
157                                                    </figure>   
158                                                </a> 
159                                            <#else> 
160                                                <figure class="corporate--product--cases--figure"> 
161																										<#assign uuid = articleImage.uuid!"" /> 
162																										<#if uuid?has_content > 
163																												<#assign imgTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
164 
165																												<#assign imgWidth = '640'> 
166																												<#assign imgTitle = clientName!imgTitle> 
167																												<#assign imgAlt = clientName!imgTitle> 
168																												<#assign imgClass = 'corporate--product--cases--item-image'> 
169																												<#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
170																												${corporate.img(articleImageUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
171																																				'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
172																																				'srcset="' + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
173																																										 articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
174																									</#if> 
175                                                </figure> 
176                                            </#if> 
177                                        <#else> 
178                                            <figure class="corporate--product--cases--figure"> 
179																								<#assign uuid = articleImage.uuid!"" /> 
180																								<#if uuid?has_content > 
181																										<#assign imgTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
182 
183																										<#assign imgWidth = '640'> 
184																										<#assign imgTitle = clientName!imgTitle> 
185																										<#assign imgAlt = clientName!imgTitle> 
186																										<#assign imgClass = 'corporate--product--cases--item-image'> 
187																										<#assign urlParamConcat = articleImageUrl?contains("?")?then("&","?")> 
188																										${corporate.img(articleImageUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
189																																		'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
190																																		'srcset="' + articleImageUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
191																																								 articleImageUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w"')} 
192																								</#if> 
193                                            </figure> 
194                                        </#if> 
195                                    </#if> 
196                                </div> 
197                            </#if> 
198                        </#if> 
199                    </div> 
200                </#list> 
201            </div> 
202 
203            <#assign pcasesMasterId=56006 />  <#--referencias --> 
204            <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
205            <#if pcasesLayout == "" > 
206                <#assign pcasesMasterId=640015 /> <#--cps --> 
207                <#assign pcasesLayout=(mlxMastersHelperService.getLayoutByMasterAndGroup(pcasesMasterId,scopeGroupId)!"") /> 
208            </#if> 
209            <#if pcasesLayout != "" > 
210                <#assign pcasesUrl = pcasesLayout.getFriendlyURL() /> 
211                <a href="${pcasesUrl}" title='${languageUtil.get(locale, "mlx.practical-case.show-more")}' class="corporate--product--cases--viewmore">${languageUtil.get(locale, "mlx.practical-case.show-more")}</a> 
212            </#if> 
213             
214        </div> 
215    </div> 
216</#if> 

Configurations du rack dynamique

Solution de stockage hautement polyvalente et adaptable à des besoins variés

Le palettier dynamique par gravité pour palettes se décline en différentes configurations selon la méthode de gestion des marchandises souhaitée et le type d’opérations à effectuer, par exemple la préparation de commandes à partir du rayonnage lui-même.

Composants du rack dynamique

Le rack dynamique Mecalux bénéficie d’une grande fiabilité grâce à la qualité de fabrication de ses différents composants. Cela garantit le bon fonctionnement de l’installation ainsi qu’une longue durée de vie.

Le palettier dynamique est constitué des éléments communs à tous les rayonnages à palettes (échelles, lisses...) et des composants spécifiques au rayonnage dynamique palette, notamment la piste à rouleaux.

Le rayonnage dynamique palettes comprend un ensemble de composants garantissant le glissement sécurisé et à vitesse contrôlée des palettes dans les canaux de stockage.

Rouleaux

Rouleaux

Fabriqués à partir d’un tube d’acier électro-soudé, ils permettent un glissement en douceur des palettes le long du canal. Espacement et diamètre variables en fonction du type et du poids de la palette.

Échelle

Échelle

Ensemble composé de deux profilés verticaux (les montants) reliés entre eux par des traverses et des diagonales.

Lisse dynamique

Lisse dynamique

Pièce horizontale servant de support aux pistes à rouleaux sur lesquelles glissent les palettes stockées dans le rayonnage.

Lisse de sortie

Lisse de sortie

Il s’agit de la lisse située à la fin du canal, à laquelle sont assemblés les profils du canal dynamique. Elle est dotée de butées de retenue.

Butée de sortie

Butée de sortie

Elle remplace la lisse de sortie lorsque le canal dépasse l’emplacement de la lisse d’appui.

Rouleau-frein

Rouleau-frein

Agissant sur les palettes selon les forces générées, il régule la vitesse de leur déplacement. Plus la vitesse ou le poids de la palette est élevé, plus la force de freinage est importante.

Centreur de palettes

Centreur de palettes

Il sert à centrer la palette en tête de canal, afin d’empêcher qu’elle dévie de sa trajectoire.

Grillage métallique latéral de sécurité

Grillage métallique latéral de sécurité

Il limite l’accès des personnes aux canaux dynamiques et, en même temps, empêche la chute de marchandises sur les zones de passage ou de travail.

Plaque signalétique

Plaque signalétique

Elle affiche les informations techniques du rayonnage, ainsi que la vignette de l’inspection technique indiquant la date du prochain contrôle. Elle est disposée de manière visible aux extrémités de l’installation.

Accessoires du rack à palettes dynamique

Éléments permettant d’adapter le système à différents besoins spécifiques.

Les butées de palette retiennent ou séparent les palettes dans le rack dynamique

Butée de palette

Elles retiennent ou séparent les palettes pour faciliter l’extraction de la première et répartir la pression exercée entre elles. Sa mise en place est en option et dépend des caractéristiques de l’installation.

Les niveaux à ras du sol sont souvent utilisés dans les zones de production ou d’expédition

Niveaux à ras du sol pour transpalette

Formés d'une combinaison de rouleaux longs et de groupes de rouleaux courts, ils sont conçus pour opérer les transpalettes et les gerbeurs. Ils sont souvent installés dans les zones de production ou d’expédition.

Les rouleaux segmentés sont recommandés pour les chariots élévateurs à fourches rigides non oscillantes

Rouleaux segmentés

Ils sont prévus aux entrées et sorties des canaux pour les engins de manutention à fourches rigides non oscillantes. Ils permettent une insertion et une extraction faciles des palettes.

Les canaux rabattables permettent l’entretien ou le nettoyage du rack dynamique au niveau du sol

Canaux rabattables

Destinés au niveau inférieur des rayonnages, ils facilitent l’entretien et le nettoyage au niveau du sol.

Une erreur s'est produite lors du traitement du modèle.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getLRUrl(com.liferay.document.library.kernel.model.DLFileEntry)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign downloadLink = mlxUrlUtilServ...  [in template "20101#20128#PRODUCT-CATALOGS-TPL" at line 33, column 25]
----
1<#assign articleId = .vars["reserved-article-id"].data /> 
2 
3<#assign relatedProduct = mlxAssetHelperService.getFirstRelatedArticle(groupId, articleId, "PRODUCT-STR")!"" /> 
4 
5<#if relatedProduct != ""> 
6 
7    <#assign productValues = mlxJournalHelperService.getStructureFieldValues(relatedProduct, "locale") /> 
8     
9    <#if productValues?has_content> 
10     
11        <div class="corporate--product--downloads"> 
12            <div class="corporate--product--downloads--container"> 
13                <h2 class="corporate--product--downloads--title">${name.getData()}</h2> 
14                <div class="corporate--product--downloads--row"> 
15     
16                    <#list productValues["cataloguesFieldSet"] as catalog> 
17                         
18                         
19                        <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
20                        <#assign catalogUuid = catalog.cataloguesFieldSetFieldSet.catalogue_fileFieldSet["catalogue_file"]?eval /> 
21 
22                        <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(catalogUuid.uuid, globalGroupId) /> 
23                         
24                        <#assign thumbnail = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("thumbnail", fileEntry.getFileEntryId()))!"" /> 
25                        <#if thumbnail?has_content> 
26                            <#assign thumbnail = thumbnail?eval /> 
27                            <#assign thumbnailfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(thumbnail.uuid, globalGroupId) /> 
28                            <#assign thumbnail = mlxUrlUtilService.getLRUrl(thumbnailfileEntry) /> 
29                        <#else> 
30                            <#assign thumbnail = "/no-thumbnail-catalog-img.1.0.png"> 
31                        </#if> 
32                         
33                        <#assign downloadLink = mlxUrlUtilService.getLRUrl(fileEntry) /> 
34                         
35                         
36                        <div class="corporate--product--downloads--item"> 
37                            <div class="corporate--product--downloads--item-card"> 
38                                <figure class="corporate--product--downloads--item-figure"> 
39                                    ${corporate.img(thumbnail, true, 'alt="' + fileEntry.getTitle() + '"', 'title="' + fileEntry.getTitle() + '"', 'class="corporate--product--downloads--item-image"')} 
40                                </figure> 
41                                <div class="corporate--product--downloads--item-wrapper"> 
42                                    <#if catalog["catalogues"]?has_content > 
43                                        <#assign title = catalog["catalogues"] /> 
44                                    <#else> 
45                                        <#assign title = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
46                                    </#if> 
47                                    <h3 class="corporate--product--downloads--item-heading">${title!""}</h3> 
48                                    <#if catalog.cataloguesFieldSetFieldSet.catalogue_fileFieldSet.catalogue_fileFieldSetFieldSet["title_alt_catalogue"]?has_content > 
49                                        <#assign description = catalog.cataloguesFieldSetFieldSet.catalogue_fileFieldSet.catalogue_fileFieldSetFieldSet["title_alt_catalogue"] /> 
50                                    <#else> 
51                                        <#assign description = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentDescription",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
52                                    </#if> 
53                                    <p class="corporate--product--downloads--item-description">${description!""}</p> 
54                                    <a  
55                                        href="${downloadLink}"  
56                                        title="${title}" 
57                                        target="_blank"  
58                                        class="corporate--product--downloads--item-button-download" 
59                                        data-track-download-view="true"  
60                                        data-track-download-name="${title}"  
61                                        data-track-download-type="${catalog.cataloguesFieldSetFieldSet['catalogues_type']?replace('["','')?replace('"]','')}"  
62                                        data-gtm-event="download"  
63                                        data-gtm-event-label="${catalog.cataloguesFieldSetFieldSet['catalogues_type']?replace('["','')?replace('"]','')}/${title}" 
64                                        data-gtm-event-click-category="Download"> 
65                                        <@corporate.mlxlanguage key='mlx.theme.download' /> 
66                                    </a> 
67                                </div> 
68                            </div> 
69                        </div>                    
70                     
71                         
72                    </#list> 
73                     
74                </div> 
75            </div> 
76        </div> 
77         
78    </#if> 
79         
80     
81</#if> 

Foire aux questions

Le rack dynamique, aussi appelé palettier dynamique, rack accumulation dynamique ou pallet flow, est le système de stockage pour palettes le plus agile sur le marché. Grâce à sa structure, qui combine des rayonnages et des pistes à rouleaux inclinées sur lesquels les charges glissent, l’action de la gravité dynamise les opérations de chargement et de déchargement. Aussi, l’élimination des allées de travail intérieures améliore l’utilisation de l’espace de stockage disponible.

Le rayonnage dynamique pour palettes offre de nombreux avantages. Il s’agit avant tout du système compact le plus agile et le plus performant sur le plan opérationnel. De ce fait, c’est une solution idéale pour différents types d’entrepôts. Sa mise en place garantit également un contrôle précis des stocks. Par ailleurs, les allées de chargement et de déchargement étant séparées, les interférences sont éliminées. Aussi, le stockage d’une seule référence par canal facilite la localisation des produits et réduit les temps d’extraction. Bien entendu, le rack dynamique assure également une exploitation maximale de la surface disponible, même si l’aménagement de canaux très profonds peut entraîner une perte de capacité en hauteur, en raison de la pente nécessaire au fonctionnement du système (environ 4 %).

L’une des principales différences entre les deux systèmes réside dans les particularités des opérations de chargement et de déchargement. Dans le rack à accumulation, le chariot élévateur pénètre dans les allées de stockage pour y déposer les palettes. Dans le rack dynamique, en revanche, le chariot élévateur ne circule pas à l’intérieur de la structure, puisqu’il dépose les palettes à l’entrée du canal souhaité et qu’elles se déplacent en toute autonomie jusqu’à leur emplacement. C’est pourquoi les opérations de dépôt et d’extraction des charges dans le rack dynamique sont nettement plus rapides et plus sûres. Une autre différence majeure est liée à la diversité de références pouvant être stockées, qui est certainement plus importante pour le rack dynamique. En effet, chaque canal peut contenir une référence différente, alors que, pour le rack à accumulation, tous les canaux d’une même allée de stockage doivent être destinés à une seule référence.

La différence fondamentale entre les deux est liée à la méthode de gestion des stocks. Le rack dynamique, qui dispose de deux allées de travail (une pour le chargement, une pour le déchargement), fonctionne selon le principe FIFO (First In First Out), c’est-à-dire que la première palette déposée dans un canal est également la première à en être extraite. Le rayonnage push-back, par contre, suit le critère LIFO (Last In First Out). Puisqu’une seule allée de travail est utilisée, la dernière palette déposée dans le canal est la première à en être extraite. Pour les entrepôts gérant des marchandises périssables (denrées alimentaires, produits pharmaceutiques), le rack dynamique est le meilleur choix, étant donné qu’il facilite l’extraction prioritaire des références dont la date de péremption est proche.

Les canaux de stockage d’un rack dynamique ont une profondeur de 30 palettes maximum. Toutefois, il convient de noter que l’aménagement de canaux très profonds risque de causer une perte en capacité de stockage sur la hauteur, en raison de l’inclinaison du canal nécessaire au bon fonctionnement du système.

La différence de niveau de chaque canal de stockage est d’environ 4 %, pour un glissement en douceur et en toute sécurité des palettes.

L’espacement entre les montants, c’est-à-dire la longueur de la lisse, doit correspondre à la dimension avant de la palette, y compris la charge, plus un jeu de 160 mm (soit 80 mm de chaque côté). Dans le cas contraire, la palette ou les marchandises risquent de heurter l’échelle du rack.

Non. Le rack dynamique Mecalux utilise la force de gravité pour faire glisser les palettes dans les canaux de stockage, légèrement inclinés.

Il s’agit d’un système simple faisant office de butée. Une pédale actionne des tiges qui rabattent ou soulèvent le dispositif de retenue (butée palettes) pour freiner la deuxième palette. Lorsque la première palette se rapproche de la sortie du canal, son poids appuie sur la pédale, ce qui entraîne le mouvement des tiges. L’activation de la bride du dispositif par ces tiges empêche la deuxième palette d’avancer vers l’extrémité du canal, évitant ainsi tout contact entre les deux palettes.

Les palettes sont généralement manipulées par le côté le plus court, puis elles se déplacent à l’intérieur des canaux avec les patins perpendiculaires aux rouleaux. Pour les canaux peu profonds, il est possible de manipuler les palettes par le côté le plus long, c’est-à-dire qu’elles se déplacent avec les patins parallèles aux rouleaux. Dans ce cas, puisque les rouleaux occupent toute la largeur du canal, ils peuvent être remplacés par trois ensembles de rouleaux courts.

Le rack dynamique est compatible avec n’importe quel type de chariot élévateur (à contrepoids, à mât rétractable, tridirectionnel...).

Oui, le rack dynamique peut être desservi par un transstockeur pour palettes automatisant ainsi le chargement et le déchargement des palettes. Cette automatisation peut également être partielle, de sorte qu’une seule opération soit concernée. En effet, il est courant d’installer un seul transstockeur assurant le dépôt des palettes, l’extraction étant effectuée par un chariot élévateur à partir de l’allée opposée.

Une erreur s'est produite lors du traitement du modèle.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getUrlByJournalArticle(com.liferay.journal.model.JournalArticle, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign productUrl = mlxUrlUtilServic...  [in template "20101#20128#PRODUCT-RELATED-PRODUCTS-TAB-TPL" at line 30, column 25]
----
1<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
2<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
3<#assign mainJA = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].data) /> 
4 
5<#-- se busca el contenido FREEBANNER dummy relacionado --> 
6<#assign relatedFreeBanner = mlxAssetHelperService.getRelatedArticlesByStructure(groupId,  mainJA.getArticleId(), "FREE-BANNER-STR") /> 
7 
8<#-- se buscan los PRODUCT y PRODUCT-SOFTWARE relacionados --> 
9<#assign freeBannerRelatedProducts = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, relatedFreeBanner[0].getArticleId(), ["PRODUCT-STR","SOFTWARE-SOLUTIONS-PRODUCTS-STR"]) /> 
10 
11<div class="corporate--product--related-products"> 
12    <div data-js="slider" data-js-type="tiny-slider" data-js-config="{'container': '.corporate--product--related-products--slider', 'loop':false, 'navPosition': 'bottom', 'mouseDrag': 'true', 'items':1,'gutter':20, 'controlsText': ['',''], 'responsive': {'600': {'items':1},'750': {'items':2},'1280': {'items':3,'gutter': 30}}}" class="corporate--product--related-products--container" data-gtm-block-name="Related_Products"> 
13        <h2 class="corporate--product--related-products--title">${name.getData()}</h2> 
14 
15        <#if freeBannerRelatedProducts?has_content> 
16            <#assign pagePath = (mlxPageInfo.mlxNavigationMenuDTO.masterName)!"" /> 
17 
18            <div class="corporate--product--related-products--slider"> 
19 
20                <#list freeBannerRelatedProducts as relatedProduct> 
21 
22                    <#assign jaMapStrValues = mlxJournalHelperService.getStructureFieldValues(relatedProduct, languageId) /> 
23 
24                    <#if !(jaMapStrValues["name"]?ends_with("*"))> 
25                        <#assign productEntry = mlxAssetHelperService.getAssetEntryByJournalArticle(relatedProduct)!"{}" /> 
26                        <#assign productCategory = mlxAssetHelperService.getAssetCategoryByAssetEntryAndVocabularyId(productEntry, 396288)!"{}"/> 
27                        <#if productCategory == "{}"> <#-- Si viene vacío no es PRODUCT-STR sino SOFTWARE-SOLUCIONS por lo ello se le pasa la categoryId de "Software de gestión de almacenes" para obtener el name y sus traducciones--> 
28                            <#assign productCategory = mlxAssetHelperService.getAssetCategory(396307) /> 
29                        </#if> 
30                        <#assign productUrl = mlxUrlUtilService.getUrlByJournalArticle(relatedProduct, locale, groupId)?string!"" /> 
31                         
32                        <#assign mlxPageInfo= mlxPageInfoService.getPageInfoByUrl(productUrl, scopeGroupId, locale)!"" /> 
33                        <#assign pageView = mlxPageInfo?has_content?then(mlxPageInfo.getPageView(), "") /> 
34                        <#assign pagePath = "/" + pageView?replace("_","/") /> 
35 
36                        <div class="corporate--product--related-products--item"> 
37                            <div class="corporate--product--related-products--item-card"> 
38 
39                                <a href="${productUrl}" title='${jaMapStrValues["name"]}' class="corporate--product--related-products--item-link" data-gtm-event="click" data-gtm-event-label='${relatedProduct?counter}_${pagePath}' data-gtm-event-click-category='[pageMaster]_Related_Products'> 
40                                    <figure class="corporate--product--related-products--item-figure"> 
41 
42																			<#assign articleImageObj = jaMapStrValues["list_imageFieldSet"] /> 
43																			<#assign articleImageObj = articleImageObj.list_image?eval /> 
44																			<#assign articleImage = mlxDocumentsHelperService.getDocumentUrlFromUUID(articleImageObj.uuid, "${locale}") /> 
45 
46																			<#if articleImageObj.uuid?has_content > 
47																					<#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImageObj.uuid, globalGroupId) /> 
48																					<#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
49																					<#if docUrl == ''> 
50																							<#assign imgUrl = articleImage /> 
51																					<#else> 
52																							<#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
53																					</#if> 
54																		      <#assign imgTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
55 
56																					<#assign imgWidth = '320'> 
57																					<#assign imgTitle = jaMapStrValues["name"]!imgTitle> 
58																					<#assign imgAlt = jaMapStrValues["name"]!imgTitle> 
59																					<#assign imgClass = 'corporate--product--related-products--item-image lazyload'> 
60																					<#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
61																					${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
62																													'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
63																													'srcset="' + imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
64																																			 imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w,' +  
65																																			 imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 1024w"')} 
66																			</#if> 
67 
68                                    </figure> 
69 
70                                    <div class="corporate--product--related-products--item-wrapper"> 
71                                        <#if productCategory != "{}"> 
72                                            <span class="corporate--product--related-products--item-upperheading">${productCategory.getTitle(locale)!""}</span> 
73                                        </#if> 
74                                        <h3 class="corporate--product--related-products--item-heading">${jaMapStrValues["name"]!""}</h3> 
75                                    </div> 
76 
77                                </a> 
78                            </div> 
79                        </div> 
80                    </#if> 
81 
82                </#list> 
83 
84            </div> 
85 
86        </#if> 
87 
88    </div> 
89</div> 
Une erreur s'est produite lors du traitement du modèle.
Java method "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl.getUrlByJournalArticle(com.liferay.journal.model.JournalArticle, String, long)" threw an exception when invoked on com.mecalux.util.service.impl.MlxUrlUtilServiceImpl object "com.mecalux.util.service.impl.MlxUrlUtilServiceImpl@43669969"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: #assign assetUrl = mlxUrlUtilService...  [in template "20101#20128#PRODUCT-OTHER-RELATED-TAB-TPL" at line 103, column 41]
----
1<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" /> 
2 
3<#assign mainJA = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].data) /> 
4 
5<#-- Article ARTICLE-STR, Blog BLOG-POST-STR, ManualArticle MANUAL-DE-ALMACENAJE-STR, Manual Category CATEGORIA-DE-MANUAL-DE-ALMACENAJE-STR, Video VIDEO-STR, Link Module LINK-MODULE-STR --> 
6<#assign otherArticleKeyList = ["ARTICLE-STR","BLOG-POST-STR","MANUAL-DE-ALMACENAJE-STR","CATEGORIA-DE-MANUAL-DE-ALMACENAJE-STR","VIDEO-STR", "LINK-MODULE-STR", "INTERVIEW-STR"] /> 
7<#assign currentOtherArticleRelatedLinks = (mlxAssetHelperService.getRelatedArticlesByStructure(groupId,  mainJA.getArticleId(), otherArticleKeyList))![] /> 
8 
9<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/> 
10 
11<#if currentOtherArticleRelatedLinks?has_content > 
12    <div class="corporate--product--related-others"> 
13		<div class="corporate--product--related-others--container" data-js="slider" data-js-type="tiny-slider" data-js-config="{'container': '.corporate--product--related-others--slider', 'loop':false, 'navPosition': 'bottom', 'mouseDrag': 'true', 'items':1,'gutter':20, 'controlsText': ['',''], 'responsive': {'600': {'items':1},'750': {'items':2},'1280': {'items':3,'gutter': 30}}}" data-gtm-block-name="Your_Interest"> 
14      <#if .vars["name"].getData()?has_content > 
15      	<h2 class="corporate--product--related-others--title">${.vars["name"].getData()}</h2> 
16			<#else> 
17      	<h2 class="corporate--product--related-others--title"><@corporate.mlxlanguage key="mlx.related.alsointerested" /></h2> 
18      </#if> 
19 
20			<#-- CONST ids de structura, para poder saber que contenido nos llega --> 
21			<#assign articuloStrKey = "ARTICLE-STR" /> 
22			<#assign manualArticleStrKey = "MANUAL-DE-ALMACENAJE-STR" /> 
23			<#assign manualCategoryStrKey = "CATEGORIA-DE-MANUAL-DE-ALMACENAJE-STR" /> 
24			<#assign videoStrKey = "VIDEO-STR" /> 
25			<#assign blogStrKey = "BLOG-POST-STR" /> 
26			<#assign linkModuleStrKey = "LINK-MODULE-STR" /> 
27            		<#assign interviewStrKey = "INTERVIEW-STR" /> 
28			<#--   ====>   segun estructura  --> 
29			 
30			<#assign filtersMap={} /> 
31			<#assign filtersLinkModuleNames=[] /> 
32	 
33            <#list currentOtherArticleRelatedLinks as journalArticle > 
34             
35                <#assign currStr = journalArticle.getDDMStructure().getStructureKey() /> 
36                <#if ( currStr == articuloStrKey ) > 
37                    <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.news' /></#assign> 
38                    <#if !filtersMap[currStr]?? > 
39                        <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
40                    </#if> 
41                <#elseif ( currStr == manualArticleStrKey ) > 
42                    <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
43                    <#if !filtersMap[currStr]?? > 
44                        <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
45                    </#if> 
46                <#elseif ( currStr == manualCategoryStrKey ) > 
47                    <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
48                    <#if !filtersMap[currStr]?? > 
49                        <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
50                    </#if> 
51                <#elseif ( currStr == blogStrKey ) > 
52                    <#assign ribbonText><@corporate.mlxlanguage key='mlx.search.blog' /></#assign> 
53                    <#if !filtersMap[currStr]?? > 
54                        <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
55                    </#if> 
56                <#elseif ( currStr == videoStrKey ) > 
57                    <#assign ribbonText><@corporate.mlxlanguage key='mlx.software.resources.videos.title' /></#assign> 
58                    <#if !filtersMap[currStr]?? > 
59                        <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
60                    </#if> 
61                <#elseif ( currStr == linkModuleStrKey ) > 
62                    <#assign ribbonText = mlxJournalHelperService.getStructureFieldValue(journalArticle,"link_type_title",locale) /> 
63                    <#if !filtersMap[currStr]?? > 
64                        <#assign ribbonArray = [ribbonText] /> 
65                        <#assign filtersLinkModuleNames = filtersLinkModuleNames + ribbonArray /> 
66                        <#assign filtersMap=filtersMap + {currStr : filtersLinkModuleNames} /> 
67                    <#else> 
68                        <#if (!filtersMap[currStr]?seq_contains(ribbonText)) > 
69                            <#assign ribbonArray = [ribbonText] /> 
70                            <#assign filtersLinkModuleNames = filtersLinkModuleNames + ribbonArray /> 
71                            <#assign filtersMap=filtersMap + {currStr : filtersLinkModuleNames} /> 
72                        </#if> 
73                    </#if> 
74                <#elseif ( currStr == interviewStrKey ) > 
75                    <#assign ribbonText><@corporate.mlxlanguage key='mlx.interviews.title' /></#assign> 
76                    <#if !filtersMap[currStr]?? > 
77                        <#assign filtersMap=filtersMap + {currStr : [ribbonText]} /> 
78                    </#if> 
79                </#if> 
80            </#list> 
81 
82            <#if (filtersMap?size > 1) > 
83 
84                <div class="corporate--product--related-others--filters"> 
85                    <button class="corporate--product--related-others--chip active" data-js-filter="all" data-gtm-block-name="Your-Interest" data-gtm-event="clickfilter" data-gtm-event-label='All'><@corporate.mlxlanguage key="mlx.theme.all" /></button> <#-- Todos --> 
86 
87                    <#list filtersMap as key, filterArrayNames > 
88                        <#list filterArrayNames as filterValue > 
89                            <#assign gtmTextFormat = filterValue?replace(" ", "-") /> 
90                            <button class="corporate--product--related-others--chip" data-js-filter='${filterValue?replace(" ", "-")}' data-gtm-block-name="Your_Interest" data-gtm-event="clickfilter" data-gtm-event-label='${gtmTextFormat}'>${filterValue}</button> 
91                        </#list> 
92                    </#list> 
93             
94                </div> 
95 
96            </#if> 
97			 
98			<div class="corporate--product--related-others--slider" data-gtm-block-name="Your_Interest"> 
99                 
100				<#list currentOtherArticleRelatedLinks as journalArticle > 
101 
102					<#assign currStr = journalArticle.getDDMStructure().getStructureKey() > 
103					<#assign assetUrl =  mlxUrlUtilService.getUrlByJournalArticle(journalArticle,locale, groupId)?string /> 
104					<#assign journalArticleValues = (mlxJournalHelperService.getStructureFieldValues(journalArticle, locale))!"" />			 
105					<#assign magazineTitle = (journalArticleValues["name"])!"" /> 
106					<#assign magazineDescription = (journalArticleValues["description"])!"" />  
107					<#assign magazineImage = (journalArticleValues["list_image"])!"" />  
108 
109					<#if ( currStr == articuloStrKey ) > 
110						<#assign ribbonText><@corporate.mlxlanguage key='mlx.search.news' /></#assign> 
111						<#assign magazineTitle = (journalArticleValues["article_name"]) /> 
112						<#assign magazineImage = (journalArticleValues["image_list"])!"" />  
113					<#elseif ( currStr == manualArticleStrKey ) > 
114						<#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
115						<#assign magazineTitle = journalArticleValues.parentStructureFieldSet420316.article_name /> 
116						<#assign magazineImage = (journalArticleValues.parentStructureFieldSet420316["image_list"])!"" /> 
117					<#elseif ( currStr == manualCategoryStrKey ) > 
118						<#assign ribbonText><@corporate.mlxlanguage key='mlx.software.content.type.articles' /></#assign> <#-- No hay key de languange para manual --> 
119						<#assign magazineImage = (journalArticleValues["social_networks_image"])!"" /> 
120						<#assign magazineDescription = (journalArticleValues["text"])!"" /> 
121					<#elseif ( currStr == blogStrKey ) > 
122						<#assign ribbonText><@corporate.mlxlanguage key='mlx.search.blog' /></#assign> 
123						<#assign magazineDescription = (journalArticleValues["list_summary"])!"" /> 
124					<#elseif ( currStr == videoStrKey ) > 
125						<#assign ribbonText><@corporate.mlxlanguage key='mlx.software.resources.videos.title' /></#assign> 
126						<#assign magazineImage = (journalArticleValues["social_networks_image"])!"" />  
127					<#elseif ( currStr == linkModuleStrKey ) > 
128						<#assign ribbonText = (journalArticleValues["link_type_title"])!"" /> 
129						<#assign assetUrl = (journalArticleValues["link_automatic"])!"" /> 
130						<#if !assetUrl?has_content > 
131							<#assign assetUrl = (journalArticleValues["link_manual"])!"" /> 
132						<#else>	 
133							<#-- split the string to just get the page layout id , groupID and if its a private layout --> 
134							<#assign linkPageObj =  assetUrl?eval /> 
135							<#assign linkPageId = getterUtil.getLong(linkPageObj.layoutId) /> 
136							<#assign linkGroupId = getterUtil.getLong(linkPageObj.groupId) /> 
137							<#assign linkPrivate = linkPageObj.privateLayout /> 
138 
139							<#-- get Friendly URL --> 
140							<#assign assetUrl = mlxUrlUtilService.getUrlByLayoutId(linkGroupId, linkPageId, linkPrivate, locale) /> 
141						</#if> 
142 
143 
144						<#assign newTab = (journalArticleValues["target"])!false />  
145						<#assign targetAttr = "" /> 
146						<#if newTab > 
147							<#assign targetAttr = 'target="_blank"' /> 
148						</#if> 
149		     <#elseif ( currStr == interviewStrKey ) > 
150		        <#assign ribbonText><@corporate.mlxlanguage key='mlx.interviews.title' /></#assign> 
151		        <#assign magazineImage = (journalArticleValues.hero["hero_image"])!"" /> 
152		        <#assign magazineTitle = (journalArticleValues.hero["hero_title"])!"" />  
153					</#if> 
154 
155					<#if !magazineImage?has_content > 
156						<#assign magazineImage = "https://mecaluxfr.cdnwm.com/documents/20128/455220/article-generic.jpg/90759464-6e87-2453-9b8f-bf012535f258?t=1513270722000&e=jpg" />	<#-- Imagen default en caso de artículos antiguos sin imagen --> 
157                        <#assign articleImage = {} /> 
158					<#else> 
159                        <#assign articleImage = magazineImage?replace('\\u','')?eval /> 
160                        <#assign magazineImage = mlxDocumentsHelperService.getDocumentUrlFromUUID(articleImage.uuid, locale) /> 
161					</#if> 
162 
163					<div class="corporate--product--related-others--item" data-js-filter-values='${ribbonText?replace(" ", "-")}'> 
164						<div class="corporate--product--related-others--item-card"> 
165								 <#assign mlxPageInfo= mlxPageInfoService.getPageInfoByUrl(assetUrl, scopeGroupId, locale)!"" /> 
166                 <#assign pageView = mlxPageInfo?has_content?then(mlxPageInfo.getPageView(), "") /> 
167                 <#assign pagePath = "/" + pageView?replace("_","/") /> 
168                 <a href="${assetUrl}" title="${magazineTitle}" class="corporate--product--related-others--item-link" ${targetAttr!} data-gtm-event="click" data-gtm-event-label='${journalArticle?counter}_${pagePath}' data-gtm-event-click-category='[pageMaster]_Your_Interest' > 
169										<figure class="corporate--product--related-others--item-figure"> 
170										 
171												<#if articleImage.uuid?has_content > 
172                                                    <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(articleImage.uuid, globalGroupId) /> 
173                                                    <#assign docUrl = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentUrl",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!""/> 
174                                                    <#if docUrl == ''> 
175                                                            <#assign imgUrl = magazineImage /> 
176                                                    <#else> 
177                                                            <#assign imgUrl = cdn + docUrl + "." + fileEntry.getVersion() + "." + fileEntry.getExtension() /> 
178                                                    </#if> 
179                                                    <#assign imgTitle = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" /> 
180 
181                                                    <#assign imgWidth = '320'> 
182                                                    <#assign imgTitle = magazineTitle!imgTitle> 
183                                                    <#assign imgAlt = magazineTitle!imgTitle> 
184                                                    <#assign imgClass = 'corporate--product--related-others--item-image lazyload'> 
185                                                    <#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
186                                                    ${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
187                                                                                    'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
188                                                                                    'srcset="' + imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
189                                                                                                imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w,' +  
190                                                                                                imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 1024w"')} 
191												<#else> 
192                                                    <#assign imgUrl = magazineImage /> 
193                                                    <#assign imgWidth = '320'> 
194														<#assign imgTitle = magazineTitle!imgTitle> 
195														<#assign imgAlt = magazineTitle!imgTitle> 
196														<#assign imgClass = 'corporate--product--related-others--item-image lazyload'> 
197														<#assign urlParamConcat = imgUrl?contains("?")?then("&","?")> 
198														${corporate.img(imgUrl + urlParamConcat + 'imwidth=' + imgWidth + '', true, 
199																						'alt="' + imgAlt + '"', 'title="' + imgTitle + '"', 'class="' + imgClass + '"' 
200																						'srcset="' + imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 320w,' +  
201                                                                                                    imgUrl + urlParamConcat + 'imwidth=640&imdensity=1 640w,' +  
202                                                                                                    imgUrl + urlParamConcat + 'imwidth=320&imdensity=1 1024w"')} 
203                                                </#if> 
204										</figure> 
205										<div class="corporate--product--related-others--item-wrapper"> 
206											<span class="corporate--product--related-others--item-upperheading">${ribbonText}</span> 
207											<h3 class="corporate--product--related-others--item-heading">${magazineTitle}</h3> 
208										</div> 
209								</a> 
210						</div> 
211					</div>  
212 
213					<#assign magazineTitle = "" /> 
214					<#assign magazineDescription = "" /> 
215					<#assign magazineImage = "" /> 
216					<#assign lazyImage = "" /> 
217					<#assign assetUrl = "" /> 
218					<#assign ribbonText = "" /> 
219					<#assign target = "" /> 
220 
221				</#list> 
222			</div> 
223		</div> 
224    </div> 
225</#if> 

Demandez conseil à un expert