Página inicial Agência Petrobras' Agency
Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
Title
X
O uso deste material é autorizado apenas para fins editoriais.
Ok Cancel
Browse by Editorial
Innovation
Institutional
Business
Regionais
Seleção de Jornalismo
Sustainability
2025.05.02
Petrobras participates in OTC 2025, in Houston (USA)
Petrobras’ CEO Magda Chambriard will be present at the opening session of the conference, the largest in the world oil and gas sector
Keep reading
2025.04.29
Petrobras production grows 5.4% and reaches 2.8 million barrels in the 1st quarter of 2025
Keep reading
2025.01.23
Petrobras begins the Binding Phase of the Tartaruga Field in the Sergipe-Alagoas Basin
Keep reading
2024.12.16
Petrobras to use Nasa technology to monitor the Equatorial Margin
The company was given access to the mission by the American and Indian space agencies
Keep reading
2024.10.24
Petrobras will invest BRL 60 million in BRAVO buoy's phase two
Five new units will be released on the Brazilian coast after one year of successful operations by the Remote Buoy for Offshore Wind Evaluation (Bravo)
Keep reading
2024.09.18
Petrobras announces R$16 million call for startup proposals
Institutions of Science and Technology (ICTs) are also eligible to participate
Keep reading
2024.08.29
Petrobras will invest BRL 500 million in five supercomputers
Latin America's leading company in computational capacity will replace the machines to keep up with competitiveness
Keep reading
2024.08.14
Petrobras will use a digital twin to optimize oil production and flow
A technology that can boost production was validated and will be extended to the company’s fleet
Keep reading
2024.08.12
Petrobras is releasing a digital tool that stimulates a reduction in CO2 emissions
The platform costs BRL 2 million and gives free online access to data on the entire country
Keep reading
2024.06.19
Petrobras signs a Protocol of Intentions with the RJ Government for offshore wind energy
The pilot project aims to acquire knowledge and overcome the main challenges for the future commercial parks in the state
Keep reading
2024.06.14
Petrobras signs a memorandum to conduct research into seismic acquisition and processing technology
A partnership with the Norwegian company Shearwater aims to raise the quality of seismic research data to map oil deposits
Keep reading
2024.06.10
Petrobras improves the performance of its waste and water collection management
The Sustainability Report indicates advances in Solid Waste Management by investing over BRL 800 million in social projects
Keep reading
2024.04.30
Petrobras to invest R$20 million in research into natural hydrogen
Research has been underway since October 2023 in the state of Bahia and will be extended to other states
Keep reading
2024.04.30
Petrobras reduces absolute operational emissions by 41%
The Climate Change Supplement brings positive results of the company’s decarbonization efforts
Keep reading
2024.04.19
Petrobras approves new opportunities to use resources from the Decarbonization Fund
Petrobras' Decarbonization Fund will direct resources to installing photovoltaic plants in refineries. Total opportunities financed by the fund already have the potential to reduce emissions by more than 1.5 million tons of CO2 per year
Keep reading
Browse Multimedia Content
Aprovados
Cadastro de Reserva
Document
Photo
Map and Illustration
Piauí
Video
Audio
An error occurred while processing the template.
The following has evaluated to null or missing: ==> entry [in template "20099#20135#11247695" at line 510, column 125] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign journalArticleCategories = as... [in template "20099#20135#11247695" at line 510, column 5] ----
1<#-- Conteúdo Web -> Templates: Site de Crise - Include de templates-->
2<#-- include "${templatesPath}/1975602" -->
3
4<#-- Conteúdo Web -> Templates: Site de Crise - Funções gerais-->
5<#include "${templatesPath}/1975398" />
6
7<#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
8<#assign fileEntryService = staticUtil["com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil"] />
9<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
10<#assign assetVocabularyService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyService") />
11<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
12<#assign vocabularies = assetVocabularyService.getGroupVocabularies(groupId) />
13<#assign mediaVocabulary = findVocabulary("Multimidia", vocabularies) />
14<#assign editoriaVocabulary = findVocabulary("Editorial", vocabularies) />
15
16<#assign assetEntryQuery = objectUtil('com.liferay.asset.kernel.service.persistence.AssetEntryQuery')>
17<#assign portalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"]>
18<#assign assetEntryLocalServiceUtil = objectUtil("com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil").getService()>
19
20<#assign SITE_URL = themeDisplay.getPortalURL() + themeDisplay.getPathFriendlyURLPublic() + layout.getGroup().friendlyURL />
21
22<#function getFirstCategoryFromVocabulary journalArticleCategories vocabulary>
23 <#list journalArticleCategories as category>
24 <#if vocabulary.getVocabularyId() == category.getVocabularyId()>
25 <#return category>
26 </#if>
27 </#list>
28 <#return "">
29</#function>
30
31<#--
32@function formatTime
33@description Formata uma data e hora para string.
34@param date Instância da classe Date do java.
35@return String formatada da data e hora.
36 -->
37<#function formatTime date>
38 <#if !date ?? || !date?has_content>
39 <#return "">
40 </#if>
41 <#return date?datetime?string("HH:mm:ss")>
42</#function>
43
44<#assign rootCss = "card-media_" + randomNumber(4586) />
45<#assign cardMap = {} />
46<#assign mediaAudioCategoryTitle = {"pt_BR": "Áudio","en_US":"Audio"}/>
47<#assign mediaDocumentCategoryTitle = {"pt_BR": "Documento","en_US":"Document"}>
48<#assign mediaMapCategoryTitle = {"pt_BR": "Mapa e Ilustração","en_US":"Map and Illustration"}/>
49<#assign mediaPhotoCategoryTitle = {"pt_BR": "Foto","en_US":"Foto"}/>
50<#assign videoPhotoCategoryTitle = {"pt_BR": "Video","en_US":"Video"}/>
51
52<#assign MEDIA_TYPE_NONE = 0 />
53<#assign MEDIA_TYPE_DOCUMENT = 1 />
54<#assign MEDIA_TYPE_VIDEO = 2 />
55<#assign MEDIA_TYPE_AUDIO = 3 />
56<#assign MEDIA_TYPE_PHOTO = 4 />
57<#assign MEDIA_TYPE_MAP = 5 />
58
59<#function getCategory(categoryTitle categoryList)>
60 <#assign result = categoryList?filter(cat -> cat.getTitle(locale) == categoryTitle) />
61 <#if result?size gt 0>
62 <#return result[0]>
63 </#if>
64 <#return "">
65</#function>
66
67<#-- Função para obter os dados de um card no Web Content (Journal Article) -->
68<#function getCardData entry journalArticleLocalService fileEntryService cardMap mediaVocabulary>
69
70 <#assign journalArticleCategories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", entry.getClassPK()) />
71
72 <#assign mediaCategory = getFirstCategoryFromVocabulary(journalArticleCategories, mediaVocabulary) />
73 <#assign mediCategoryId = -1 />
74 <#if mediaCategory?has_content>
75 <#assign mediCategoryId = mediaCategory.getCategoryId() />
76 </#if>
77 <#if mediCategoryId == -1>
78 <#return {} />
79 </#if>
80 <#if cardMap[mediCategoryId?string]??>
81 <#if cardMap[mediCategoryId?string]?size gt 7 >
82 <#--return {} -->
83 </#if>
84 </#if>
85
86 <#assign journalArticle = journalArticleLocalService.getLatestArticle(entry.getClassPK()) />
87 <#assign ddmStructure = journalArticle.getDDMStructure() />
88 <#assign fieldList = getFieldListByStructure(ddmStructure) />
89 <#assign xmlArticle = journalArticle.getDocument().getRootElement() />
90
91 <#assign cardTitle = getFieldValue(fieldList, xmlArticle, "Título Home")/>
92 <#assign subtitle = getFieldValue(fieldList, xmlArticle, "Legenda")/>
93 <#assign author = getFieldValue(fieldList, xmlArticle, "Autor")/>
94 <#assign thumbnailImage = getMediaInfo(fieldList, xmlArticle, "Imagem de thumbnail", fileEntryService) >
95
96 <#assign groupId = getIdFromFieldName(fieldList, "Arquivo original") />
97 <#assign originalFileGroup = getGroupNode(groupId, xmlArticle) />
98
99 <#assign originalFile = getMediaInfo(fieldList, originalFileGroup, "Arquivo selecionado", fileEntryService) >
100 <#assign originalFileExternalUrl = getFieldValue(fieldList, originalFileGroup, "URL externa") />
101
102 <#assign lastPublishDate = journalArticle.getDisplayDate()>
103 <#assign createDate = journalArticle.getCreateDate()>
104
105 <#assign editoriaCategory = getFirstCategoryFromVocabulary(journalArticleCategories, editoriaVocabulary) />
106
107 <#assign photoCategory = getCategory(mediaPhotoCategoryTitle[locale], journalArticleCategories) />
108 <#assign documentCategory = getCategory(mediaDocumentCategoryTitle[locale], journalArticleCategories) />
109 <#assign mapCategory = getCategory(mediaMapCategoryTitle[locale], journalArticleCategories) />
110 <#assign audioCategory = getCategory(mediaAudioCategoryTitle[locale], journalArticleCategories) />
111 <#assign videoCategory = getCategory(videoPhotoCategoryTitle[locale], journalArticleCategories) />
112
113 <#assign isPhoto = photoCategory?has_content />
114 <#assign isDocument = documentCategory?has_content />
115 <#assign isMap = mapCategory?has_content />
116 <#assign isAudio = audioCategory?has_content />
117 <#assign isVideo = videoCategory?has_content />
118
119 <#assign mediaType = -1 />
120
121 <#if isPhoto>
122 <#assign mediaType = MEDIA_TYPE_PHOTO />
123 <#elseif isDocument>
124 <#assign mediaType = MEDIA_TYPE_DOCUMENT />
125 <#elseif isMap>
126 <#assign mediaType = MEDIA_TYPE_MAP />
127 <#elseif isAudio>
128 <#assign mediaType = MEDIA_TYPE_AUDIO />
129 <#elseif isVideo>
130 <#assign mediaType = MEDIA_TYPE_VIDEO />
131 </#if>
132
133 <#assign editoriaCategoryTitle = "" />
134 <#assign editoriaCategoryId = -1/>
135 <#if editoriaCategory?? && editoriaCategory?has_content>
136 <#assign editoriaCategoryTitle = editoriaCategory.getTitle(locale) />
137 <#assign editoriaCategoryId = editoriaCategory.getCategoryId()/>
138 </#if>
139
140 <#assign cardInfo = {"cardTitle": cardTitle,
141 "subtitle" : subtitle,
142 "author": author,
143 "thumbnailImage": thumbnailImage,
144 "originalFile": originalFile,
145 "originalFileExternalUrl": originalFileExternalUrl,
146 "lastPublishDate": lastPublishDate,
147 "createDate" : createDate,
148 "mediaId": mediCategoryId,
149 "mediaCategoryTitle": mediaCategory.getTitle(locale),
150 "mediaType" : mediaType,
151 "editoriaCategoryTitle" : editoriaCategoryTitle,
152 "editoriaCategoryId" :editoriaCategoryId,
153 "renderEditoriaCategoryAsLink" : true,
154 "renderMediaCategoryAsLink" : false
155 }/>
156
157 <#if cardMap[mediCategoryId?string]??>
158 <#assign cardMap = cardMap + {mediCategoryId : cardMap[mediCategoryId?string] + [cardInfo]} />
159 <#else>
160 <#assign cardMap = cardMap + {mediCategoryId : [cardInfo]} />
161 </#if>
162
163 <#return cardInfo />
164</#function>
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181<#macro printMediaIcon mediaType>
182
183 <#if mediaType == MEDIA_TYPE_DOCUMENT>
184 <svg viewBox="0 0 12 15" fill="none" xmlns="http://www.w3.org/2000/svg">
185 <path d="M7.5 1.5H1.5C1.36739 1.5 1.24021 1.55268 1.14645 1.64645C1.05268 1.74021 1 1.86739 1 2V13C1 13.1326 1.05268 13.2598 1.14645 13.3536C1.24021 13.4473 1.36739 13.5 1.5 13.5H10.5C10.6326 13.5 10.7598 13.4473 10.8536 13.3536C10.9473 13.2598 11 13.1326 11 13V5M7.5 1.5L11 5M7.5 1.5V5H11M4 8H8M4 10H8"
186 stroke="#373737" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
187 </svg>
188 <#elseif mediaType == MEDIA_TYPE_VIDEO>
189 <svg viewBox="0 0 16 11" fill="none" xmlns="http://www.w3.org/2000/svg">
190 <path d="M11.5 4.5L15 2.5V8.5L11.5 6.5M1.5 1.25H9.5C10.0304 1.25 10.5391 1.46071 10.9142 1.83579C11.2893 2.21086 11.5 2.71957 11.5 3.25V9.25C11.5 9.38261 11.4473 9.50979 11.3536 9.60355C11.2598 9.69732 11.1326 9.75 11 9.75H3C2.46957 9.75 1.96086 9.53929 1.58579 9.16421C1.21071 8.78914 1 8.28043 1 7.75V1.75C1 1.61739 1.05268 1.49021 1.14645 1.39645C1.24021 1.30268 1.36739 1.25 1.5 1.25Z"
191 stroke="#525252" stroke-linecap="round" stroke-linejoin="round"/>
192 </svg>
193 <#elseif mediaType == MEDIA_TYPE_AUDIO>
194 <svg viewBox="0 0 12 15" fill="none" xmlns="http://www.w3.org/2000/svg">
195 <path d="M5.9999 12V14M10.4749 8C10.3452 9.09574 9.81795 10.1058 8.99314 10.8387C8.16834 11.5716 7.10329 11.9765 5.9999 11.9765C4.89651 11.9765 3.83147 11.5716 3.00666 10.8387C2.18186 10.1058 1.65462 9.09574 1.5249 8M5.9999 1C7.38061 1 8.4999 2.11929 8.4999 3.5V7.5C8.4999 8.88071 7.38061 10 5.9999 10C4.61919 10 3.4999 8.88071 3.4999 7.5V3.5C3.4999 2.11929 4.61919 1 5.9999 1Z"
196 stroke="#373737" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
197 </svg>
198 <#elseif mediaType == MEDIA_TYPE_PHOTO>
199 <svg viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg">
200 <path d="M12 11.5H2C1.73478 11.5 1.48043 11.3946 1.29289 11.2071C1.10536 11.0196 1 10.7652 1 10.5V3.5C1 3.23478 1.10536 2.98043 1.29289 2.79289C1.48043 2.60536 1.73478 2.5 2 2.5H4L5 1H9L10 2.5H12C12.2652 2.5 12.5196 2.60536 12.7071 2.79289C12.8946 2.98043 13 3.23478 13 3.5V10.5C13 10.7652 12.8946 11.0196 12.7071 11.2071C12.5196 11.3946 12.2652 11.5 12 11.5Z"
201 stroke="#373737" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
202 <path d="M7 9C8.24264 9 9.25 7.99264 9.25 6.75C9.25 5.50736 8.24264 4.5 7 4.5C5.75736 4.5 4.75 5.50736 4.75 6.75C4.75 7.99264 5.75736 9 7 9Z"
203 stroke="#373737" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
204 </svg>
205 <#elseif mediaType == MEDIA_TYPE_MAP>
206 <svg viewBox="0 0 14 13" fill="none" xmlns="http://www.w3.org/2000/svg">
207 <path d="M5 10L1 11V2L5 1M5 10L9 12M5 10V1M5 1L9 3M9 12V3M9 12L13 11V2L9 3" stroke="#373737"
208 stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
209 </svg>
210 </#if>
211</#macro>
212
213
214
215<#macro renderCard infoToRender siteUrl>
216 <#if !infoToRender["cardTitle"]??>
217 <#return />
218 </#if>
219
220 <#assign cssRoot = "multimedia"/>
221 <div class="card ${rootCss}" category-id="${infoToRender.mediaId}">
222 <#if infoToRender.thumbnailImage.url?has_content>
223 <div class="img-container">
224 <img src="${infoToRender.thumbnailImage.url}" alt="${infoToRender.thumbnailImage.alt}">
225 </div>
226 </#if>
227 <div class="text-container">
228 <#if infoToRender.renderEditoriaCategoryAsLink>
229 <a class="editoria small-caps-lg"
230 href="${siteUrl}/listar-editoria?q=&category=${infoToRender.editoriaCategoryId}">${infoToRender.editoriaCategoryTitle}</a>
231 <#else>
232 <p class="editoria small-caps-lg">${infoToRender.editoriaCategoryTitle}</p>
233 </#if>
234 <h2 class="card-title h2">
235 <#assign MAX_CARD_TITLE_CHARACTERS = 76 />
236 <#if infoToRender.cardTitle?length gt MAX_CARD_TITLE_CHARACTERS>
237 ${infoToRender.cardTitle?substring(0, MAX_CARD_TITLE_CHARACTERS)} + ...
238 <#else>
239 ${infoToRender.cardTitle}
240 </#if>
241 <#-- ${infoToRender.cardTitle} -->
242 </h2>
243 <div class="date">
244 <#if locale == "pt_BR">
245 <p class="updated">Publicado em ${formatDate(infoToRender.lastPublishDate)}
246 às ${formatTime(infoToRender.lastPublishDate)}</p>
247 <#else >
248 <p class="updated">Published on ${formatDate(infoToRender.lastPublishDate)}
249 at ${formatTime(infoToRender.lastPublishDate)} </p>
250 </#if>
251 </div>
252
253
254 <div class="media-link-container">
255 <div class="media-category-title-container">
256 <@printMediaIcon infoToRender.mediaType />
257 <p class="title">
258 ${infoToRender.mediaCategoryTitle}
259 </p>
260 </div>
261
262 <#assign originalFileSource= "" />
263 <#assign imgAlt= "" />
264 <#if infoToRender.originalFile.url?has_content>
265 <#assign originalFileSource= infoToRender.originalFile.url />
266 <#assign imgAlt= infoToRender.originalFile.alt />
267 <#else>
268 <#assign originalFileSource= infoToRender.originalFileExternalUrl />
269 <#assign imgAlt= infoToRender.cardTitle />
270 </#if>
271 <#--
272 <p>
273 infoToRender.originalFile.url : ${infoToRender.originalFile.url} <br>
274 infoToRender.originalFileExternalUrl : ${infoToRender.originalFileExternalUrl}
275 </p>
276 -->
277 <a class="download link" href="${originalFileSource}" target="_blank">
278 Download
279 <svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
280 <path d="M5.04688 6.73438L8 9.6875M8 9.6875L10.9531 6.73438M8 9.6875V1.8125M14.1875 9.6875V13.625C14.1875 13.7742 14.1282 13.9173 14.0227 14.0227C13.9173 14.1282 13.7742 14.1875 13.625 14.1875H2.375C2.22582 14.1875 2.08274 14.1282 1.97725 14.0227C1.87176 13.9173 1.8125 13.7742 1.8125 13.625V9.6875"
281 stroke="#008542" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
282 </svg>
283 </a>
284 </div>
285 </div>
286 </div>
287</#macro>
288
289<#macro printCssStyleForMedia cssRoot>
290 <style>
291 .${cssRoot} {
292 display: flex;
293 flex-direction: column;
294 gap: var(--space-none);
295 border-radius: var(--border-radius-lg);
296 border: 1px solid var(--color-neutral-400, #EEE);
297 background: var(--color-neutral-100, #FFF);
298 height: 404px;
299 width: 306px;
300 flex-shrink: 0;
301 }
302 .${cssRoot}.none {
303 display: none;
304 }
305
306 .${cssRoot}:hover {
307 box-shadow: var(--box-shadow-neutral);
308 transition: box-shadow 300ms ease-in-out;
309 }
310
311 .${cssRoot} .img-container {
312 height: 170px;
313 }
314
315 .${cssRoot} .img-container img {
316 width: 306px;
317 border-radius: var(--space-sm) var(--space-sm) var(--space-none) var(--space-none);
318 object-fit: cover;
319 left: -1px;
320 position: relative;
321 height: 170px;
322 }
323
324 .${cssRoot} .text-container {
325 width: 100%;
326 padding: var(--space-md);
327 display: flex;
328 flex-direction: column;
329 gap: var(--space-xxs, 8px);
330 height: 100%;
331 }
332
333 .${cssRoot} .text-container .editoria {
334 color: var(--color-neutral-800, #373737);
335 font-weight: var(--font-weight-regular);
336 }
337
338 .${cssRoot} .text-container .card-title {
339 color: var(--color-neutral-800, #373737);
340 margin: 0;
341 font-family: var(--font-family-base, "Petrobras Sans");
342 font-size: var(--font-size-sm, 20px);
343 font-style: var(--font-style-normal,normal);
344 font-weight: var(--font-weight-bold, 700);
345 line-height: var(--line-height-md, 132%); /* 26.4px */
346 }
347
348 .${cssRoot} .text-container .date,
349 .${cssRoot} .text-container .date .updated,
350 .${cssRoot} .text-container .date .published {
351 color: var(--color-neutral-800, #373737);
352 font-family: var(--font-family-base, "Petrobras Sans");
353 font-size: var(--font-size-xxxs, 14px);
354 font-style: var(--font-style-normal, normal);
355 font-weight: var(--font-weight-regular, 400);
356 line-height: var(--line-height-xl, 160%); /* 25.6px */
357 margin: var(--space-none);
358 }
359
360 .${cssRoot} .text-container .bar {
361 width: var(--size-xl);
362 height: 4.1px;
363 margin-top: var(--space-md);
364 background-color: var(--color-secondary-medium);
365 }
366
367 .${cssRoot} .text-container .date {
368 }
369
370 .${cssRoot} .text-container .media-link-container {
371 display: flex;
372 flex-direction: row;
373 align-items: flex-end;
374 justify-content: space-between;
375 padding-top: var(--size-xxxs);
376 height: 100%;
377 }
378
379 .${cssRoot} .text-container .media-link-container .media-category-title-container {
380 display: flex;
381 gap: var(--size-micro);
382 align-items: center;
383 justify-content: center;
384 border-radius: 100px;
385 padding: var(--space-none) var(--space-xs);
386 border: 1px solid var(--color-neutral-400, #EEE);
387 background: var(--color-neutral-200, #FBFBFB);
388 height: 32px;
389 }
390
391 .${cssRoot} .text-container .media-link-container .media-category-title-container svg {
392 max-width: 16px;
393 width: 16px;
394 }
395
396 .${cssRoot} .text-container .media-link-container .media-category-title-container .title {
397 color: var(--color-neutral-700, #525252);
398 font-family: var(--font-family-base);
399 font-size: var(--font-size-xxxs);
400 font-style: var(--font-style-normal);
401 font-weight: var(--font-weight-regular);
402 line-height: var(--line-height-xl);
403 margin: var(--space-none);
404 }
405
406 .${cssRoot} .text-container .media-link-container .download {
407 color: var(--color-primary-medium, #008542);
408 font-family: var(--font-family-base);
409 font-size: var(--font-size-xxxs);
410 font-style: var(--font-style-normal);
411 font-weight: var(--font-weight-bold);
412 line-height: var(--line-height-lg);
413
414 text-decoration-line: var(--text-decoration-underline);
415 display: flex;
416 gap: var(--space-xxs);
417 align-items: center;
418 }
419
420 .${cssRoot} .text-container .media-link-container .download svg {
421 width: 18px !important;
422 height: 18px;
423 }
424
425 @media screen and (max-width: 742px) {
426 .${cssRoot} {
427 flex-direction: column;
428 gap: var(--space-none);
429 min-width: 296px;
430 }
431
432 .${cssRoot} .img-container img {
433 height: 154px;
434 border-radius: var(--border-radius-lg) var(--border-radius-lg) 0 0;
435 object-fit: cover;
436 max-width: 296px;
437 }
438
439 .${cssRoot} .text-container {
440 padding: var(--space-md);
441 gap: var(--space-xxs);
442 }
443
444 .${cssRoot} .text-container .bar {
445 margin: var(--space-sm) var(--space-none);
446 }
447
448 .${cssRoot} .text-container .media-link-container .media-category-title-container .title {
449 font-size: var(--font-size-micro);
450 }
451
452 .${cssRoot} .text-container .media-link-container .media-category-title-container svg {
453 width: 16px;
454 }
455
456 .${cssRoot} .text-container .media-link-container .media-category-title-container {
457 gap: var(--size-micro);
458 padding: var(--space-xxxs) var(--space-xxs);
459 height: 24px;
460 }
461
462 .${cssRoot} .text-container .media-link-container .download {
463 font-size: var(--font-size-micro);
464 }
465 }
466 </style>
467</#macro>
468
469
470<#--assign AssetEntryFinder = serviceLocator.findService("com.liferay.asset.kernel.service.persistence.AssetEntryFinder") -->
471
472<#function getAssetEntries assetEntryQuery portalUtil assetEntryLocalServiceUtil>
473 <#attempt >
474 <#assign groupId = themeDisplay.getScopeGroupId()>
475 <#assign companyId = themeDisplay.getCompanyId()>
476 <#assign realUserId = themeDisplay.getDefaultUserId() />
477 <#assign className = "com.liferay.journal.model.JournalArticle">
478 <#assign classNameId = portalUtil.getClassNameId(className)>
479
480 ${assetEntryQuery.setClassNameIds([classNameId]) }
481 ${assetEntryQuery.setEnd(8)}
482
483 <#assign allAssets = []/>
484 <#list mediaVocabulary.getCategories() as medCat>
485 ${assetEntryQuery.setAllCategoryIds([medCat.getCategoryId()])}
486 <#assign ents = assetEntryLocalServiceUtil.getEntries(assetEntryQuery) />
487 <#assign allAssets = allAssets + ents />
488 </#list>
489
490 <#return allAssets />
491 <#recover >
492 <#return [] />
493 </#attempt>
494</#function>
495
496
497
498<#assign allAssets = getAssetEntries(assetEntryQuery, portalUtil, assetEntryLocalServiceUtil) />
499<#list allAssets as assetEntry>
500 <#assign cardData = getCardData(assetEntry journalArticleService fileEntryService cardMap mediaVocabulary) />
501 <@renderCard cardData SITE_URL/>
502</#list>
503
504<@printCssStyleForMedia rootCss/>
505
506
507<#assign cardMap = {} />
508<#list allAssets as assetEntry>
509
510 <#assign journalArticleCategories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", entry.getClassPK()) />
511
512 <#assign mediaCategory = getFirstCategoryFromVocabulary(journalArticleCategories, mediaVocabulary) />
513 <#assign mediCategoryId = -1 />
514 <#if mediaCategory?has_content>
515 <#assign mediCategoryId = mediaCategory.getCategoryId() />
516 </#if>
517 <#if mediCategoryId == -1>
518 <#return {} />
519 </#if>
520 <#if cardMap[mediCategoryId?string]??>
521 <#if cardMap[mediCategoryId?string]?size gt 7 >
522 <#--return {} -->
523 </#if>
524 </#if>
525
526 <#assign journalArticle = journalArticleService.getLatestArticle(entry.getClassPK()) />
527 <#assign ddmStructure = journalArticle.getDDMStructure() />
528 <#assign fieldList = getFieldListByStructure(ddmStructure) />
529 <#assign xmlArticle = journalArticle.getDocument().getRootElement() />
530
531 <#assign cardTitle = getFieldValue(fieldList, xmlArticle, "Título Home")/>
532 <#assign subtitle = getFieldValue(fieldList, xmlArticle, "Legenda")/>
533 <#assign author = getFieldValue(fieldList, xmlArticle, "Autor")/>
534 <#assign thumbnailImage = getMediaInfo(fieldList, xmlArticle, "Imagem de thumbnail", fileEntryService) >
535
536 <#assign groupId = getIdFromFieldName(fieldList, "Arquivo original") />
537 <#assign originalFileGroup = getGroupNode(groupId, xmlArticle) />
538
539 <#assign originalFile = getMediaInfo(fieldList, originalFileGroup, "Arquivo selecionado", fileEntryService) >
540 <#assign originalFileExternalUrl = getFieldValue(fieldList, originalFileGroup, "URL externa") />
541
542 <#assign lastPublishDate = journalArticle.getDisplayDate()>
543 <#assign createDate = journalArticle.getCreateDate()>
544 <#if journalArticle.getLastPublishDate()??>
545 <#assign lastPublishDate = journalArticle.getLastPublishDate()>
546 </#if>
547
548 <#assign editoriaCategory = getFirstCategoryFromVocabulary(journalArticleCategories, editoriaVocabulary) />
549
550 <#assign photoCategory = getCategory(mediaPhotoCategoryTitle[locale], journalArticleCategories) />
551 <#assign documentCategory = getCategory(mediaDocumentCategoryTitle[locale], journalArticleCategories) />
552 <#assign mapCategory = getCategory(mediaMapCategoryTitle[locale], journalArticleCategories) />
553 <#assign audioCategory = getCategory(mediaAudioCategoryTitle[locale], journalArticleCategories) />
554 <#assign videoCategory = getCategory(videoPhotoCategoryTitle[locale], journalArticleCategories) />
555
556 <#assign isPhoto = photoCategory?has_content />
557 <#assign isDocument = documentCategory?has_content />
558 <#assign isMap = mapCategory?has_content />
559 <#assign isAudio = audioCategory?has_content />
560 <#assign isVideo = videoCategory?has_content />
561
562 <#assign mediaType = -1 />
563
564 <#if isPhoto>
565 <#assign mediaType = MEDIA_TYPE_PHOTO />
566 <#elseif isDocument>
567 <#assign mediaType = MEDIA_TYPE_DOCUMENT />
568 <#elseif isMap>
569 <#assign mediaType = MEDIA_TYPE_MAP />
570 <#elseif isAudio>
571 <#assign mediaType = MEDIA_TYPE_AUDIO />
572 <#elseif isVideo>
573 <#assign mediaType = MEDIA_TYPE_VIDEO />
574 </#if>
575
576 <#assign cardInfo = {"cardTitle": cardTitle,
577 "subtitle" : subtitle,
578 "author": author,
579 "thumbnailImage": thumbnailImage,
580 "originalFile": originalFile,
581 "originalFileExternalUrl": originalFileExternalUrl,
582 "lastPublishDate": lastPublishDate,
583 "createDate" : createDate,
584 "mediaId": mediCategoryId,
585 "mediaCategoryTitle": mediaCategory.getTitle(locale),
586 "mediaType" : mediaType,
587 "editoriaCategoryTitle" : editoriaCategory.getTitle(locale),
588 "editoriaCategoryId" : editoriaCategory.getCategoryId(),
589 "renderEditoriaCategoryAsLink" : true,
590 "renderMediaCategoryAsLink" : false
591 }/>
592
593 <h1>
594 <!-- originalFile.url : ${cardInfo.originalFile.url} -->
595 </h1>
596
597 <#if cardMap[mediCategoryId?string]??>
598 <#assign cardMap = cardMap + {mediCategoryId : cardMap[mediCategoryId?string] + [cardInfo]} />
599 <#else>
600 <#assign cardMap = cardMap + {mediCategoryId : [cardInfo]} />
601 </#if>
602
603</#list>
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619<#-- Renderizar Lista de cards -->
620<#--if entries?has_content>
621 <#list entries as entry>
622 <#assign cardData = getCardData(entry journalArticleService fileEntryService cardMap mediaVocabulary) />
623 <@renderCard cardData SITE_URL/>
624 </#list>
625
626 <@printCssStyleForMedia rootCss/>
627</#if -->
Petrobras' Bluesky Page Petrobras' Threds Page Petrobras' Facebook Page Petrobras' Instagram Page Petrobras' YouTube Page Petrobras' Tik Tok Page Petrobras' Linkedin Page
Use our search to find what you are looking for
Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
- Press Office
- Categories
- Also access:
Canais
Idioma
Acessibilidade
Busca
Choose a channel:
Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
Accessibility:
High-Contrast
Off
On
Big Text
Off
On
Language:
Select a language: