Fin

menu-img-alt vale-wave
Imagem de header interno Imagem de header interno
Une erreur s'est produite lors du traitement du modèle.
Syntax error in template "44549#44620#98608" in line 54, column 63:
Naming convention mismatch. Identifiers that are part of the template language (not the user specified ones) must consistently use the same naming convention within the same template. This template uses legacy naming convention (directive (tag) names are like examplename, everything else is like example_name) estabilished by auto-detection at line 54, column 49 by token "has_content", but the problematic token, "newsTopicCategory", uses a different convention.
1<#if entry??> 
2	<#assign 
3			images_path = "/documents/d/guest/" 
4			namespace = "com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet_" + stringUtil.randomId() 
5   /> 
6	  
7	 <#attempt> 
8	 <#assign newsTopicVocabularyId = 64872 /> 
9	 <#recover> 
10     <#assign newsTopicVocabularyId = 0 /> 
11   </#attempt> 
12 
13	 
14	<#function getDisplayPageUrl asset> 
15			<#local 
16					assetRenderer = asset.getAssetRenderer() 
17					baseViewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetRenderer, asset, !stringUtil.equals(assetLinkBehavior, "showFullContent"))?split("?")?first?split("/-/")?first 
18			/> 
19			<#return baseViewURL?replace(themeDisplay.getURLPortal(), "")/> 
20	</#function> 
21 
22	<#function getDDMFormFieldsReferencesMap entry > 
23			<#assign assetRenderer = entry.getAssetRenderer() /> 
24			<#assign DDMFormFieldValuesMap = assetRenderer.getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValuesMap() /> 
25			<#return assetRenderer.article.DDMStructure.DDMForm.getDDMFormFieldsReferencesMap(true) /> 
26	</#function> 
27 
28	<#function getDDMFieldValue DDMFormFieldsReferencesMap name> 
29			<#assign field = DDMFormFieldsReferencesMap[name].name /> 
30			<#return DDMFormFieldValuesMap[field][0].getValue().getString(locale)!"" /> 
31	</#function> 
32 
33	<#function getCustomDisplayPageDataAttr customDisplayPageJson categoryFilterEndpoint> 
34			<#local 
35					groupId = customDisplayPageJson.getLong("groupId") 
36					uuid = customDisplayPageJson.getString("id") 
37					privateLayout = customDisplayPageJson.getBoolean("privateLayout") 
38			/> 
39			<#local customDisplayPageDataAttr> 
40					data-vale-custom-display-page='{"groupId":${groupId},"uuid":"${uuid}","privateLayout":${privateLayout?c}}' 
41					data-vale-category-endpoint=${categoryFilterEndpoint} 
42			</#local> 
43			<#return customDisplayPageDataAttr/> 
44	</#function> 
45 
46	<#function getCategoryFilterEndpoint asset> 
47		<#attempt> 
48		<!--	<#local 
49					newsTopicCategory = asset.getCategories()?filter(category -> category.getVocabularyId() == newsTopicVocabularyId)?first 
50					newsTopicCategoryId = newsTopicCategory.getCategoryId() 
51			/> --> 
52			<#local 
53        newsTopicCategory = asset.getCategories()?filter(category -> category.getVocabularyId() == newsTopicVocabularyId)?first!null 
54        newsTopicCategoryId = newsTopicCategory?has_content ? newsTopicCategory.getCategoryId() : null 
55      /> 
56			<#recover> 
57				<#assign newsTopicCategoryId = 0 /> 
58			</#attempt> 
59			<#return  "/-/categories/" + newsTopicCategoryId /> 
60	</#function> 
61 
62	<#assign assetRenderer=entry.getAssetRenderer()!"" /> 
63	<#if assetRenderer?has_content> 
64		<#assign 
65				article = assetRenderer.getArticle() 
66 
67				categoryFilterEndpoint = getCategoryFilterEndpoint(entry) 
68 
69				DDMFormFieldsReferencesMap = getDDMFormFieldsReferencesMap(entry) 
70				img = jsonFactoryUtil.createJSONObject(getDDMFieldValue(DDMFormFieldsReferencesMap, 'imagemDeCapa')) 
71 
72				customDisplayPageJsonString = getDDMFieldValue(DDMFormFieldsReferencesMap, "customDisplayPage") 
73				customDisplayPageJson = jsonFactoryUtil.createJSONObject(customDisplayPageJsonString) 
74 
75				hasCustomDisplayPage = customDisplayPageJson.getString("groupId")?has_content 
76				customDisplayPageDataAttr = hasCustomDisplayPage?then( 
77						getCustomDisplayPageDataAttr(customDisplayPageJson, categoryFilterEndpoint), "") 
78 
79				displayPageUrl = getDisplayPageUrl(entry) + categoryFilterEndpoint 
80		/> 
81 
82		<#assign search_page_endpoint = locale?contains("en")?then("all-the-news", "todas-as-noticias") /> 
83 
84		<#assign accessAllNews = ""> 
85		<#if locale?contains("en")> 
86			<#assign accessAllNews = "Access all news"> 
87		<#else> 
88			<#assign accessAllNews = "Acesse todas as notícias"> 
89		</#if> 
90 
91		<div class="vale-widget-ultimas-noticias container" id="vale-fragmento-carrossel-card-branco-categoria-${namespace}"> 
92				<div class="row mt-7"> 
93						<div class="col-12 col-md-8 mb-7 mb-md-0 pr-4" id="news-card"> 
94								<div class="mb-4 position-relative"> 
95										<a href="${displayPageUrl}" class="text-decoration-none" ${customDisplayPageDataAttr}> 
96												<img 
97														alt="${img.alt}" 
98														class="imagem-capa-principal" 
99														data-fileentryid="${img.fileEntryId}" 
100														src="${img.url}" 
101												/> 
102												<img 
103														class="onda-principal d-none d-md-block position-absolute" 
104														src="${images_path}onda_branca" 
105												/> 
106										</a> 
107								</div> 
108 
109								<p> 
110										<#assign data = getDDMFieldValue(DDMFormFieldsReferencesMap, 'data') /> 
111										<#assign date_localized = dateUtil.formatDate("yyyy-MM-dd", data, locale)/> 
112 
113										${date_localized} 
114								</p> 
115 
116								<a href="${displayPageUrl}" class="text-decoration-none mb-4" ${customDisplayPageDataAttr}> 
117										<h2 class="text-verde-vale"> 
118												${entry.getTitle(locale)} 
119										</h2> 
120								</a> 
121						</div> 
122						<div class="coluna-direita-noticias col-12 col-md-4 d-flex flex-column"> 
123								<#if entries?has_content> 
124										<#list entries as curEntry> 
125												<#if entry.getTitle(locale) != curEntry.getTitle(locale) > 
126														<#assign 
127																assetRenderer = curEntry.getAssetRenderer() 
128																article = assetRenderer.getArticle() 
129 
130																categoryFilterEndpoint = getCategoryFilterEndpoint(curEntry) 
131 
132																DDMFormFieldsReferencesMap = getDDMFormFieldsReferencesMap(curEntry) 
133																img = jsonFactoryUtil.createJSONObject(getDDMFieldValue(DDMFormFieldsReferencesMap, 'imagemDeCapa')) 
134 
135																customDisplayPageJsonString = getDDMFieldValue(DDMFormFieldsReferencesMap, "customDisplayPage") 
136																customDisplayPageJson = jsonFactoryUtil.createJSONObject(customDisplayPageJsonString) 
137 
138																hasCustomDisplayPage = customDisplayPageJson.getString("groupId")?has_content 
139																customDisplayPageDataAttr = hasCustomDisplayPage?then( 
140																		getCustomDisplayPageDataAttr(customDisplayPageJson, categoryFilterEndpoint), "") 
141 
142																displayPageUrl = getDisplayPageUrl(curEntry) + categoryFilterEndpoint 
143														/> 
144														<div class="font-weight-light mb-5" id="news-card"> 
145																<div class="mb-4 position-relative"> 
146																		<a href="${displayPageUrl}" class="text-decoration-none" ${customDisplayPageDataAttr}> 
147																				<img 
148																						alt="${img.alt}" 
149																						class="imagem-capa" 
150																						data-fileentryid="${img.fileEntryId}" 
151																						src="${img.url}" 
152																				/> 
153																				<img 
154																						class="onda position-absolute" 
155																						src="${images_path}onda_branca" 
156																				/> 
157																		</a> 
158																</div> 
159 
160																<p class="mb-2"> 
161																		<#assign data = getDDMFieldValue(DDMFormFieldsReferencesMap, 'data') /> 
162																		<#assign date_localized = dateUtil.formatDate("yyyy-MM-dd", data, locale)/> 
163 
164																		${date_localized} 
165																</p> 
166 
167																<a href="${displayPageUrl}" class="text-decoration-none" ${customDisplayPageDataAttr}> 
168																		<h4 class="mb-0 text-verde-vale"> 
169																				${curEntry.getTitle(locale)} 
170																		</h4> 
171																</a> 
172														</div> 
173												</#if> 
174										</#list> 
175								</#if> 
176						</div> 
177			</div> 
178		</div> 
179 
180		<style> 
181		.vale-widget-ultimas-noticias .imagem-capa-principal { 
182				object-fit: cover; 
183
184 
185		.vale-widget-ultimas-noticias .imagem-capa { 
186				border-left: 20px solid var(--amarelo-vale); 
187				height: 13.75rem; 
188				width: 100%; 
189				object-fit: cover; 
190
191 
192		.vale-widget-ultimas-noticias .onda-principal { 
193				bottom: -0.125rem; 
194				right: -0.125rem; 
195
196 
197		.vale-widget-ultimas-noticias .onda { 
198				bottom: -0.125rem; 
199				right: -0.125rem; 
200
201 
202		.vale-widget-ultimas-noticias .width-16 { 
203				width: 16rem; 
204
205 
206		@media screen and (max-width: 768px) { 
207				.vale-widget-ultimas-noticias .imagem-capa-principal { 
208						height: 16.0625rem; 
209						width: 100vw; 
210						position: relative; 
211						left: 50%; 
212						margin-left: -50vw; 
213
214 
215				.vale-widget-ultimas-noticias .imagem-capa { 
216						border-left: 10px solid var(--amarelo-vale); 
217
218
219 
220		@media screen and (min-width: 768px) { 
221				.vale-widget-ultimas-noticias .imagem-capa-principal { 
222						border-left: 20px solid var(--amarelo-vale); 
223						height: 29.1875rem; 
224						width: 100%; 
225
226 
227				.vale-widget-ultimas-noticias .coluna-direita-noticias { 
228						max-height:  55.875rem; 
229						overflow-y: auto; 
230
231
232		</style> 
233 
234		<script> 
235		(function(){ 
236			// Tagueamento 
237				const namespace = document.querySelector("#vale-fragmento-carrossel-card-branco-categoria-${namespace}"); 
238 
239				const cards = namespace.querySelectorAll("#news-card"); 
240 
241				const handleEventLinkClick = (title, href) => { 
242						Analytics.track("Link", { 
243								section: "Últimas notícias", 
244								rotulo: title + " : " + href, 
245					}); 
246				}; 
247 
248				cards.forEach(card => { 
249						const links =  card.querySelectorAll("a"); 
250						const title = card.querySelectorAll("h2, h4, .h2, .h4")[0].innerText; 
251						links.forEach(link => { 
252								link.addEventListener("click", () => handleEventLinkClick(title, link.href)) 
253						}) 
254				}) 
255 
256				// Configurar URL de página de exibição dinâmica 
257				const displayPageUrls = namespace.querySelectorAll('a[data-vale-custom-display-page]'); 
258				displayPageUrls.forEach(displayPageUrl => { 
259						const customDisplayPage = displayPageUrl.dataset["valeCustomDisplayPage"]; 
260						const categoryEndpoint = displayPageUrl.dataset["valeCategoryEndpoint"]; 
261						Liferay.Service( 
262								'/layout/get-layout-by-uuid-and-group-id', 
263								JSON.parse(customDisplayPage), 
264								layout => { 
265										const friendlyURL = layout["friendlyURL"]; 
266										if (friendlyURL) { 
267												displayPageUrl.href = friendlyURL + categoryEndpoint; 
268
269
270						); 
271				}) 
272		})() 
273		</script> 
274	</#if> 
275</#if> 

News

Garson Mine Group Photo

Family Ties and Changing Times at Garson Mine

For four father-daughter duos at Garson Mine, mining is more than a job – it’s the family business.

 
vale-wave
Danielle Robb

Black History Month: Danielle Robb Finds Her Calling

Danielle Robb, Millwright at the Copper Cliff Smelter, shares her career journey from academia to industry.

 
vale-wave
Francis joined Vale Canada as Warehouse Supervisor in 2019. Francis ascended to his current role of Warehouse Superintendent in October 2023, where he oversees the operations of all company warehouses in Ontario.

Black History Month: The Sky is the Limit for Francis Osei-Bonsu

“Always do your best:” Warehouse Superintendent Francis Osei-Bonsu on a career journey shaped by his mother’s legacy

 
vale-wave
Damilola (Dami) Katibi

Black History Month: Damilola Katibi Finds the Right Role

Dami’s story is the first in our special series honouring Black History Month.

 
vale-wave
Spot new member Thompson Vale family

See Spot Run: agile mobile robot is new addition to the Thompson family

Spot is the newest robotic member of the Thompson Vale family

 
vale-wave
PT Vale Celebrates 55th Anniversary

PT Vale Celebrates 55th Anniversary

PT Vale Indonesia (PT Vale) recently celebrated its 55th Anniversary, holding an amazing celebration befitting more than a half a century of operations in Indonesia

 
vale-wave
Stacy Kennedy first female head Manitoba operations

Stacy Kennedy, First Female Head of Our Manitoba Operations, Is Living Life to the Fullest

Stacy Kennedy was named Head of Operations in Thompson, Manitoba, becoming the first woman to hold this role

 
vale-wave
Afficher 1 à 7 de 7
scroll-to-see-more

Press

Afficher 1 à 6 de 6
scroll-to-see-more

It is essential that we maintain open and transparent dialogue channels.

Here you will find all our contact channels. Feel free to choose the one that best suits your needs.