A Vale agora
Buscas recentes
Links rápidos
No ar o edital Desafio Uso Futuro da Mina de Águas Claras (MAC)
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>
Arquivo de notícias
Imprensa
Investidores
Nossas histórias
Vale 80 anos
Em 2022, a Vale celebra oito décadas de existência com a percepção de que uma trajetória tão cheia de capítulos não pode ser contada a partir de um único ponto de vista. Conheça nossa história.
Espaço Memória
A história de uma empresa é o retrato da sua vivência, da sua experiência, dos seus aprendizados, “causos” contados pelas pessoas, das memórias individuais, dos sonhos de quem fez e faz parte de sua trajetória.
Mulheres na Vale
Na Vale, acreditamos que a presença feminina é essencial para a construção de um futuro mais igualitário e sustentável. Nossas recentes iniciativas com foco em inclusão e diversidade ajudam a avançarmos na criação de um ambiente mais colaborativo.
Caminhos da coletividade
Conheça a força transformadora das nossas comunidades nessa websérie
Equidade étnico-racial
Assumimos o compromisso de ser uma empresa antirracista e, juntos, trabalhamos todos os dias para promover a equidade de oportunidades na nossa empresa.