Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
Title
O uso deste material é autorizado apenas para fins editoriais.
Most Recent
2026.08.06
Petrobras Reports R$ 52.4 Billion Profit in the Second Quarter of 2026
Keep reading
2026.07.28
Petrobras' own oil and gas production grows 14% in 12 months, reaching 3.34 million barrels of oil equivalent per day in the 2nd quarter of 2026
Keep reading
2026.07.09
Petrobras concludes acquisition of exploration block in São Tomé and Príncipe
Keep reading
2026.06.24
Búzios field surpasses its own record and produces 1.1 million bpd
Keep reading
2026.06.23
Petrobras and Pemex Sign Partnership for Cooperation in E&P and Industrial Processes
Keep reading
Most Read
2024.01.30
Petrobras intensifies tests to produce renewable diesel in its refining park
Keep reading
2024.01.30
Repar breaks historical records of production and sales
Keep reading
Browse by Editorial
2026.03.25
Petrobras and Finep launch a R$ 30 million call for proposals for Research, Development and Innovation projects in Biorefining
Keep reading
2026.03.03
Petrobras foresees investment of over R$150 million in the Libra Rocks Project
Keep reading
2025.10.08
Petrobras puts the Harpia supercomputer into operation
Keep reading
2024.12.16
Petrobras to use Nasa technology to monitor the Equatorial Margin
Keep reading
2024.10.24
Petrobras will invest BRL 60 million in BRAVO buoy's phase two
Keep reading
2024.09.18
Petrobras announces R$16 million call for startup proposals
Keep reading
2024.08.29
Petrobras will invest BRL 500 million in five supercomputers
Keep reading
2024.08.14
Petrobras will use a digital twin to optimize oil production and flow
Keep reading
2026.04.16
Petrobras provides information on the resolutions of the Annual General Meeting
Keep reading
2025.07.11
Petrobras elects Angélica Laureano as executive Director of Energy Transition and Sustainability
Keep reading
2026.04.02
Petrobras announces financial settlement related to the redetermination of the Tupi Shared Reservoir
Keep reading
2026.03.12
Petrobras Paid R$ 277.6 Billion in Taxes and Government Take in 2025
Keep reading
2026.08.06
Petrobras Reports R$ 52.4 Billion Profit in the Second Quarter of 2026
Keep reading
2026.07.28
Petrobras' own oil and gas production grows 14% in 12 months, reaching 3.34 million barrels of oil equivalent per day in the 2nd quarter of 2026
Keep reading
2026.07.09
Petrobras concludes acquisition of exploration block in São Tomé and Príncipe
Keep reading
2026.06.24
Búzios field surpasses its own record and produces 1.1 million bpd
Keep reading
2026.06.23
Petrobras and Pemex Sign Partnership for Cooperation in E&P and Industrial Processes
Keep reading
2026.06.19
Petrobras approves investment in bio-jet fuel and renewable diesel plant at RPBC
Keep reading
2026.06.17
Petrobras Receives Payment of First Installment of the Economic Subvention Program for Diesel Oil Commercialization
Keep reading
2025.12.19
FAFEN-BA moves forward to resume operations and strengthen national fertilizer production
Keep reading
2025.09.10
Petrobras produces SAF with renewable content at Revap
Keep reading
2025.01.23
Petrobras begins the Binding Phase of the Tartaruga Field in the Sergipe-Alagoas Basin
Keep reading
2025.06.16
Petrobras announces progress in initiatives for the Energy Transition
Keep reading
2026.01.16
ProFloresta+ Call Receives 16 Carbon Credit Sale Proposals
Keep reading
2026.01.15
Petrobras sells bunker fuel with renewable content to the international market
Keep reading
2025.12.05
Petrobras launches sustainable aviation fuel produced entirely in Brazil
Keep reading
2025.11.04
Petrobras will supply renewable-content fuel for COP 30
Keep reading
Browse Multimedia Content
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 -->
Notice
This is an exclusive press communication channel. We request that demands not related to journalistic issues (for instance: advertising, legal issues, employee participation at events, academic research, and others) not be sent to this contact.
The Fale Conosco channel or 0800 728 9001 are the proper channels to request company information in general.
Use our search to find what you are looking for
Do a search:
Most searched
Fuel price
Pre-salt
Team Petrobras
Customer Service Center
0800 728 9001
Access to Information
Transparency Portal- Press Office
- Categories
- Also access:
© Copyright Petrobras 2024. All rights reserved.
You are on: PETROBRAS' AGENCY
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:
Language
Accessibility
Channels
Search
When you visit a website, it may store or collect information in your browser, mostly in the form of cookies. This information might be about you, your preferences, or your device and is primarily used to make the website work as expected. The information usually does not directly identify you but can provide a more personalized web experience. As we respect your right to privacy, you can choose not to allow certain types of cookies. Click on the titles of different categories to learn more and adjust our default settings. However, blocking some types of cookies may affect your experience on the website and the services we can offer. For more information, visit our Privacy and Personal Data Protection page
Strictly Necessary Cookies
These cookies are necessary for the website to function and cannot be disabled in our systems. They are usually set only in response to actions you take that constitute a request for services, such as setting your privacy preferences, logging in, or filling out forms. You can configure your browser to block or alert you about these cookies, but some parts of the website will not work. These cookies do not store any personally identifiable information.
Functional Cookies
hese cookies enable the website to provide enhanced functionality and personalization. They may be set by us or by third parties whose services we have added to our pages. If these cookies are not allowed, some or all of these services may not function properly.
Performance Cookies
These cookies allow us to count visits and traffic sources so we can measure and improve the performance of our website. They help us understand which pages are the most and least popular and see how visitors navigate the site. All information collected by these cookies is aggregated and, therefore, anonymous. If you do not allow these cookies, we will not know when you visited our website.
Personalization Cookies
These cookies may be set on our website by our advertising partners. They may be used by these companies to build a profile of your interests and show you relevant ads on other websites. They do not directly store personal information but are based on uniquely identifying your browser and internet device. If you do not allow these cookies, you will see less targeted advertising.

