Title
Title
Do a search:
Search
Most searched
Fuel price
Pre-salt
Team Petrobras
Title
O uso deste material é autorizado apenas para fins editoriais.
Petrobras and bp sign memorandum of intent for business and research
Companies will study partnerships beyond exploratory activity
Posted on 2024.04.18
Copy text Petrobras and bp sign memorandum of intent for business and research
Fernanda Sabença / Petrobras News Agency
Petrobras and bp representatives during signing of Memorandum of Understanding
Download Petrobras and bp representatives during signing of Memorandum of UnderstandingPetrobras and bp signed a Memorandum of Understanding (MoU) on Thursday, 4/18, with the aim of promoting discussions and collaboration between the companies. This non-binding agreement focuses on topics such as: business opportunities in Sustainable Fuels, Carbon Credits, Refining and Exploration, and Production. The companies will also work together on research, development, and innovation projects.
"We're going to deepen our conversations in order to exchange knowledge, synergize assets and develop opportunities for products and businesses that meet the needs of an increasingly demanding society and market," said Petrobras president Jean Paul Prates.
The memorandum will last for two years. Committees of representatives from both companies will be set up to monitor the progress of the studies and discussions.
“As partners in exploration blocks in offshore Brazil, bp and Petrobras have built a strong relationship – and I am delighted about this opportunity to bring together our complimentary skills, experience and capabilities to extend our existing cooperation into exciting new areas in Brazil and potentially aboard.” said William Lin, bp EVP Regions, Corporates and Solutions.
The two companies are already partners in exploration blocks in the Exploration & Production segment, including Alto de Cabo Frio Central, Campos Basin, and Barreirinhas Basin, all operated by Petrobras.
Downloads
Text of this article
Text downloadVideos from this article
Você pode se interessar por
Java method "com.liferay.journal.model.impl.JournalArticleImpl.getDocument()" threw an exception when invoked on com.liferay.journal.model.impl.JournalArticleImpl object "{\"mvccVersion\": 1, \"ctCollectionId\": 0, \"uuid\": \"5de5ae9f-850e-ea63-96f7-1dd4c364c345\", \"id\": 18199662, \"resourcePrimKey\": 18159540, \"groupId\": 10623376, \"companyId\": 20099, \"userId\": 11888211, \"userName\": \"Leonardo Bruno Pimenta Melo\", \"createDate\": \"Mon May 13 23:57:09 GMT 2024\", \"modifiedDate\": \"Tue May 14 21:48:19 GMT 2024\", \"externalReferenceCode\": \"7a173b9b-c4f2-d3df-d131-de7c57fc5e62\", \"folderId\": 11260026, \"classNameId\": 0, \"classPK\": 0, \"treePath\": \"/10628776/11260026/\", \"articleId\": \"18159538\", \"version\": 2.1, \"urlTitle\": \"negocio/petrobras-alcanca-lucro-liquido-de-r-23-7-bilhoes-no-1-trimestre-de-2024\", \"DDMStructureId\": 10628772, \"DDMTemplateKey\": \"\", \"defaultLanguageId\": \"pt_BR\", \"layoutUuid\": \"\", \"displayDate\": \"Mon May 13 23:44:00 GMT 2024\", \"expirationDate\": null, \"reviewDate\": null, \"indexable\": true, \"smallImage\": false, \"smallImageId\": 0, \"smallImageSource\": 1, \"smallImageURL\": \"\", \"lastPublishDate\": null, \"status\": 0, \"statusByUserId\": 11888211, \"statusByUserName\": \"Leonardo Bruno Pimenta Melo\", \"statusDate\": \"Tue May 14 21:48:19 GMT 2024\"}"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign xmlArticle = journalArticle.g... [in template "20099#20135#11247698" in function "getCardData" at line 84, 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 assetEntryQuery = objectUtil('com.liferay.asset.kernel.service.persistence.AssetEntryQuery')>
13<#assign portalUtil = staticUtil["com.liferay.portal.kernel.util.PortalUtil"]>
14<#assign assetEntryLocalServiceUtil = objectUtil("com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil").getService()>
15
16<#assign vocabularies = assetVocabularyService.getGroupVocabularies(groupId) />
17<#assign editoriaVocabulary = findVocabulary("Editorial", vocabularies) />
18<#assign mediaVocabulary = findVocabulary("Multimidia", vocabularies) />
19
20
21
22
23<#function getFirstCategoryFromVocabulary entry vocabulary>
24 <#assign categories = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", entry.getClassPK()) />
25 <#list categories as category>
26 <#assign vocabulary = assetVocabularyService.getVocabulary(category.getVocabularyId()) />
27
28 <#if vocabulary.getVocabularyId() == category.getVocabularyId()>
29 <#return category>
30 </#if>
31 </#list>
32 <#return "">
33</#function>
34
35<#function getAssetEntriesByCategory portalUtil assetEntryLocalServiceUtil newCategoryId vocabularyToExclude>
36 <#attempt >
37 <#assign groupId = themeDisplay.getScopeGroupId()>
38 <#assign companyId = themeDisplay.getCompanyId()>
39 <#assign realUserId = themeDisplay.getDefaultUserId() />
40 <#assign className = "com.liferay.journal.model.JournalArticle">
41 <#assign classNameId = portalUtil.getClassNameId(className)>
42
43 <#assign assetEntryQuery = objectUtil('com.liferay.asset.kernel.service.persistence.AssetEntryQuery') />
44 ${assetEntryQuery.setClassNameIds([classNameId]) }
45 ${assetEntryQuery.setEnd(8)}
46 <#assign notAllCategoryIds = [] />
47 <#list vocabularyToExclude.getCategories() as category>
48 <#assign notAllCategoryIds += [category.getCategoryId()] />
49 </#list>
50 ${assetEntryQuery.setNotAllCategoryIds(notAllCategoryIds)}
51 ${assetEntryQuery.setAllCategoryIds([newCategoryId])}
52
53 <#assign allAssets = assetEntryLocalServiceUtil.getEntries(assetEntryQuery)/>
54
55 <#return allAssets />
56 <#recover >
57 <#return [] />
58 </#attempt>
59</#function>
60
61<#assign rootCss = "card-news_" + randomNumber(4586) />
62<#assign cardMap = {} />
63
64<#-- Função para obter os dados de um card no Web Content (Journal Article) -->
65<#function getCardData entry journalArticleLocalService fileEntryService cardMap>
66
67 <#assign editoria = getFirstCategoryFromVocabulary(entry, editoriaVocabulary) />
68 <#assign editoriaId = -1 />
69 <#if editoria?has_content>
70 <#assign editoriaId = editoria.getCategoryId() />
71 </#if>
72 <#if editoriaId == -1>
73 <#return {} />
74 </#if>
75 <#if cardMap[ editoriaId?string]??>
76 <#if cardMap[editoriaId?string]?size gt 7 >
77 <#return {} />
78 </#if>
79 </#if>
80
81 <#assign journalArticle = journalArticleLocalService.getLatestArticle(entry.getClassPK()) />
82 <#assign ddmStructure = journalArticle.getDDMStructure() />
83 <#assign fieldList = getFieldListByStructure(ddmStructure) />
84 <#assign xmlArticle = journalArticle.getDocument().getRootElement() />
85
86 <#if getStructName(journalArticle) != "Agência de Notícias - Notícia">
87 <#return {} />
88 </#if>
89
90 <#assign imagesGroup = getNodes(getIdFromFieldName(fieldList, "Imagem de destaque da notícia"), xmlArticle) />
91 <#assign image = "" />
92 <#list imagesGroup as imageGroup >
93 <#assign image = getMediaInfo(fieldList, imageGroup, "Imagem Destaque", fileEntryService) /> />
94 </#list>
95
96 <#assign title = getFieldValue(fieldList, xmlArticle, "Título de destaque da notícia") />
97 <#if !(title?has_content && title != "")>
98 <#assign title = journalArticle.getTitle(locale) />
99 </#if>
100
101 <#assign lastPublishDate = journalArticle.getDisplayDate()>
102 <#assign createDate = journalArticle.getCreateDate()>
103
104 <#assign editoria = getFirstCategoryFromVocabulary(entry, editoriaVocabulary) />
105 <#assign editoriaId = -1 />
106 <#if editoria?has_content>
107 <#assign editoriaId = editoria.getCategoryId() />
108 </#if>
109
110 <#assign review = getFieldValue(fieldList, xmlArticle, "Subtítulo") />
111
112 <#assign urlNews = themeDisplay.getPortalURL() + themeDisplay.getPathFriendlyURLPublic() + layout.getGroup().friendlyURL + "/w/" + journalArticle.getUrlTitle()>
113
114 <#if themeDisplay.getPortalURL()?contains("webserver")>
115 <#assign urlNews = themeDisplay.getPortalURL() + themeDisplay.getPathFriendlyURLPublic() + layout.getGroup().friendlyURL + "/w/" + journalArticle.getUrlTitle()>
116 <#else>
117 <#assign urlNews = "/w/" + journalArticle.getUrlTitle()>
118 </#if>
119
120 <#assign cardInfo = {"image": image,
121 "title": title,
122 "lastPublishDate": lastPublishDate,
123 "createDate" : createDate,
124 "editoriaId": editoriaId,
125 "urlNews": urlNews,
126 "review": review} />
127
128 <#if cardMap[editoriaId?string]??>
129 <#assign cardMap = cardMap + {editoriaId : cardMap[editoriaId?string] + [cardInfo]} />
130 <#else>
131 <#assign cardMap = cardMap + {editoriaId : [cardInfo]} />
132 </#if>
133
134 <#return cardInfo />
135
136</#function>
137
138
139<#macro renderCard cardData>
140 <#if !cardData["image"]??>
141 <#return />
142 </#if>
143
144 <div class="card ${rootCss}" category-id="${cardData.editoriaId}">
145 <a class="news-card-of-interest-link" href="${cardData.urlNews}"></a>
146 <div class="news-content">
147 <div class="head">
148 <h2 class="title h4">${cardData.title}</h2>
149 <div class="bar"></div>
150 </div>
151 <div class="bottom-wrapper">
152 <div class="link-container">
153 <p class="read-more">
154 <#if locale?lower_case == "pt_br"> Continuar lendo <#else> Keep reading </#if>
155 </p>
156 </div>
157 </div>
158 </div>
159 </div>
160
161</#macro>
162
163<#assign newsJournalArticle = "">
164<#assign newsAssetEntry = getAssetEntryFromRequest(assetEntryLocalServiceUtil)>
165<#if newsAssetEntry?? && newsAssetEntry?has_content>
166 <#assign newsJournalArticle = journalArticleService.fetchLatestArticle(newsAssetEntry.classPK)/>
167</#if>
168
169<#if newsJournalArticle?? && newsJournalArticle?has_content>
170
171 <#assign newsEditoria = getFirstCategoryFromVocabulary(newsAssetEntry, editoriaVocabulary) />
172 <#assign newsEditoriaId = -1 />
173 <#if newsEditoria?has_content>
174 <#assign newsEditoriaId = newsEditoria.getCategoryId() />
175 </#if>
176
177 <#assign entries = getAssetEntriesByCategory(portalUtil, assetEntryLocalServiceUtil, newsEditoriaId, mediaVocabulary) />
178
179 <#-- Renderizar Lista de cards -->
180 <#if entries?has_content>
181 <#list entries as entry>
182 <#assign cardData = getCardData(entry journalArticleService fileEntryService cardMap) />
183 <@renderCard cardData/>
184 </#list>
185
186 <style>
187 .${rootCss} {
188 width: 306px;
189 border-radius: 16px;
190 border: 1px solid var(--color-neutral-400, #EEE);
191 background: var(--color-neutral-100, #FFF);
192 margin: 0;
193 }
194
195 .${rootCss} *:not(.news-card-of-interest-link) {
196 pointer-events: none;
197 }
198
199 .${rootCss} a.news-card-of-interest-link {
200 position: absolute;
201 width: 100%;
202 height: 100%;
203 opacity: 0;
204 top: 0;
205 }
206
207 .${rootCss}:hover {
208 box-shadow: var(--box-shadow-neutral);
209 transition: box-shadow 300ms ease-in-out;
210 }
211
212 .${rootCss} .news-content {
213 padding: var(--space-md, 24px);
214 display: flex;
215 flex-direction: column;
216 height: 100%;
217 background: var(--color-background-card);
218 border-radius: var(--border-radius-card);
219 }
220
221 .${rootCss} img {
222 background: lightgray 50% / cover no-repeat;
223 height: 170px;
224 }
225
226 .${rootCss} .head {
227 display: flex;
228 flex-direction: column;
229 gap: var(--space-xxs, 8px);
230 }
231
232 .${rootCss} .head .date {
233 color: var(--color-neutral-800, #373737);
234 font-family: var(--font-family-base, "Petrobras Sans");
235 font-size: var(--font-size-xxxs, 14px);
236 font-style: var(--font-style-normal, normal);
237 font-weight: var(--font-weight-regular, 400);
238 line-height: var(--line-height-xl, 160%); /* 19.2px */
239 }
240
241 .${rootCss} .head .title {
242 color: var(--color-neutral-800);
243 }
244
245 .${rootCss} .head .bar {
246 background-color: var(--color-secondary-solid-to-bright-200, #FDC82F);
247 height: 4px;
248 width: 20px;
249 margin: var(--space-xs, 12px) 0 var(--space-sm, 16px) 0;
250 }
251
252 .${rootCss} .bottom-wrapper {
253 height: 100%;
254 display: flex;
255 flex-direction: column;
256 justify-content: flex-end;
257 }
258
259 .${rootCss} .bottom-wrapper .review-container {
260 color: var(--color-neutral-800, #373737);
261 font-family: var(--font-family-base, "Petrobras Sans");
262 font-size: var(--font-size-xxs, 16px);
263 font-style: var(--font-style-normal, normal);
264 font-weight: var(--font-weight-regular, 400);
265 line-height: var(--line-height-xl, 160%); /* 22.4px */
266 }
267
268 .${rootCss} .bottom-wrapper .link-container {
269 flex: 0 1 auto;
270 }
271
272 .${rootCss} .bottom-wrapper .link-container .read-more {
273 color: var(--color-primary-solid-to-bright-200, var(--color-primary-medium));
274 font-family: var(--font-family-base, "Petrobras Sans");
275 font-size: var(--font-size-xxs, 16px);
276 font-style: var(--font-style-normal, normal);
277 font-weight: var(--font-weight-bold, 700);
278 line-height: var(--line-height-lg, 144%); /* 22.4px */
279 text-decoration-line: underline;
280 }
281
282
283 @media screen and (max-width: ${MAX_TABLET_WIDTH}px) {
284 .${rootCss} {
285 flex-direction: column;
286 gap: var(--space-sm, 16px);
287 padding-top: var(--space-md, 24px);
288 min-width: 296px;
289 }
290
291 .${rootCss} img {
292 height: 140px;
293 }
294
295 .${rootCss} .head .date {
296 font-size: 12px;
297 }
298
299 .${rootCss} .head .title {}
300
301 .${rootCss} .head .bar {
302 width: 18px;
303 margin: var(--space-xxs, 8px) 0 var(--space-sm, 16px) 0;
304 }
305
306 .${rootCss} .review-container {
307 font-size: var(--font-size-xxxs, 14px);
308 }
309 }
310 </style>
311 <script>
312 (function() {
313 const cards = document.querySelectorAll('.${rootCss}.card');
314
315 cards.forEach((card) => {
316 const cardLink = card.querySelector('a.news-card-of-interest-link');
317 const cardTitle = card.querySelector('.title');
318 cardLink.textContent = cardTitle.textContent;
319 });
320 })();
321 </script>
322 </#if>
323</#if>
Use our search to find what you are looking for
Do a search:
Search
Most searched
Fuel price
Pre-salt
Team Petrobras
Java method "com.liferay.journal.model.impl.JournalArticleImpl.getDocument()" threw an exception when invoked on com.liferay.journal.model.impl.JournalArticleImpl object "{\"mvccVersion\": 1, \"ctCollectionId\": 0, \"uuid\": \"e676f63b-3777-4c00-5a1d-7f604a04072c\", \"id\": 12613261, \"resourcePrimKey\": 10628951, \"groupId\": 10623376, \"companyId\": 20099, \"userId\": 873837, \"userName\": \"Gefersom Lima\", \"createDate\": \"Tue Oct 31 18:45:56 GMT 2023\", \"modifiedDate\": \"Fri Jan 26 22:15:39 GMT 2024\", \"externalReferenceCode\": \"7748054\", \"folderId\": 10628763, \"classNameId\": 0, \"classPK\": 0, \"treePath\": \"/10628763/\", \"articleId\": \"7748054\", \"version\": 1.3, \"urlTitle\": \"configuracao-de-rodape\", \"DDMStructureId\": 10628806, \"DDMTemplateKey\": \"\", \"defaultLanguageId\": \"pt_BR\", \"layoutUuid\": \"\", \"displayDate\": \"Tue Oct 31 18:43:00 GMT 2023\", \"expirationDate\": null, \"reviewDate\": null, \"indexable\": false, \"smallImage\": false, \"smallImageId\": 0, \"smallImageSource\": 1, \"smallImageURL\": \"\", \"lastPublishDate\": null, \"status\": 0, \"statusByUserId\": 873856, \"statusByUserName\": \"Wagner de Melo Reck\", \"statusDate\": \"Fri Jan 26 22:15:39 GMT 2024\"}"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign xmlArticle = article.getDocum... [in template "20099#20135#2683802" in function "extractFooterInfo" at line 30, column 3] - Reached through: @renderSacInfoDates entry, journalArt... [in template "20099#20135#2683802" at line 83, column 5] ----
1<#--
2Widget templates can be used to modify the look of a
3specific application.
4
5Please use the right panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7-->
8
9<#include "${templatesPath}/1975398" />
10
11<#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
12<#assign fileEntryService = staticUtil["com.liferay.document.library.kernel.service.DLFileEntryLocalServiceUtil"] />
13
14<#function extractFooterInfo curEntry journalArticleService fileEntryService >
15 <#if !curEntry?? >
16 <#return {}>
17 </#if>
18
19 <#assign article = journalArticleService.getLatestArticle(curEntry.getClassPK()) />
20 <#if !article??>
21 <#return {}>
22 </#if>
23
24 <#assign ddmStructure = article.getDDMStructure()>
25 <#if !ddmStructure??>
26 <#return {}>
27 </#if>
28
29 <#assign fieldList = getFieldListByStructure(ddmStructure) />
30 <#assign xmlArticle = article.getDocument().getRootElement() />
31
32
33 <#assign iconInformation = getMediaInfo(fieldList, xmlArticle, "Acesso à Informação - Imagem", fileEntryService) />
34 <#assign iconSac = getMediaInfo(fieldList, xmlArticle, "SAC Imagem", fileEntryService) />
35 <#assign sacLabel = getFieldValue(fieldList, xmlArticle, "SAC - Rótulo") />
36 <#assign sacNumber = getFieldValue(fieldList, xmlArticle, "SAC - Número") />
37 <#assign informationLabel = getFieldValue(fieldList, xmlArticle, "Acesso à Informação") />
38 <#assign transparencyLabel = getFieldValue(fieldList, xmlArticle, "Portal da Transparencia - Rótulo") />
39 <#assign transparencyLink = getFieldValue(fieldList, xmlArticle, "Portal da Transparencia - Link") />
40
41
42 <#return {
43 "iconInformation": iconInformation,
44 "iconSac" : iconSac,
45 "sacLabel" : sacLabel,
46 "sacNumber" : sacNumber,
47 "informationLabel": informationLabel,
48 "transparencyLabel": transparencyLabel,
49 "transparencyLink": transparencyLink
50 }>
51
52</#function>
53
54
55<#macro renderSacInfoDates entry journalArticleService fileEntryService >
56 <#assign info = extractFooterInfo(entry journalArticleService fileEntryService) />
57 <div class="footer-informations">
58 <div class="sac-information icons-container">
59
60 <img alt="${info.iconSac.alt}" src="${info.iconSac.url}"/>
61 <div class="icons-texts">
62 <p class="button-xs-regular" >${info.sacLabel}</p>
63 <p class="button-xs-bold">${info.sacNumber}</p>
64 </div>
65 </div>
66
67 <div class="logo-informations icons-container">
68 <img alt="${info.iconInformation.alt}" src="${info.iconInformation.url}"/>
69 <div class="icons-texts">
70 <p class="button-xs-regular">
71 ${info.informationLabel}
72 </p>
73 <a class="button-xs-bold" open="_blank"
74 href='${info.transparencyLink}'>
75 ${info.transparencyLabel}
76 </a>
77 </div>
78 </div>
79 </div>
80</#macro>
81
82<#if entry?has_content>
83 <@renderSacInfoDates entry journalArticleService fileEntryService />
84</#if>
85
86
87<style>
88
89 .footer-informations {
90 display: flex;
91 justify-content: center;
92 align-items: center;
93 }
94
95 .footer-informations .icons-container img {
96 width: 29px;
97 height: 29px;
98 margin: 5px 8px 0 0;
99 }
100
101 .footer-informations .icons-container {
102 color: var(--color-text-primary-default);
103 display: flex;
104 }
105
106 .footer-informations .logo-informations {
107 padding-left: calc(var(--space-lg)/2);
108 display: flex;
109 }
110
111 .footer-informations .icons-container .icons-texts * {
112 color: var(--color-text-primary-default);
113 }
114
115 .footer-informations .sac-information .icons-texts {
116 border-right: 1px solid var(--border-color-light);
117 }
118
119
120 .footer-informations .icons-container .icons-texts {
121 padding-right: calc(var(--space-lg)/2);
122 display: flex;
123 flex-direction: column;
124
125 }
126
127 @media screen and (max-width: 767px) {
128
129 .footer-informations {
130 flex-direction: column;
131 }
132
133 .footer-informations .icons-container {
134 margin-bottom: 16px !important;
135 }
136
137 .footer-informations .sac-information .icons-texts {
138 border-right: none;
139 }
140
141 .footer-informations .logo-informations {
142 margin-bottom: 16px;
143 padding: 0;
144 }
145
146 }
147
148</style>
- Press Office
- Categories
- Also access:
Java method "com.liferay.journal.model.impl.JournalArticleImpl.getDocument()" threw an exception when invoked on com.liferay.journal.model.impl.JournalArticleImpl object "{\"mvccVersion\": 1, \"ctCollectionId\": 0, \"uuid\": \"e676f63b-3777-4c00-5a1d-7f604a04072c\", \"id\": 12613261, \"resourcePrimKey\": 10628951, \"groupId\": 10623376, \"companyId\": 20099, \"userId\": 873837, \"userName\": \"Gefersom Lima\", \"createDate\": \"Tue Oct 31 18:45:56 GMT 2023\", \"modifiedDate\": \"Fri Jan 26 22:15:39 GMT 2024\", \"externalReferenceCode\": \"7748054\", \"folderId\": 10628763, \"classNameId\": 0, \"classPK\": 0, \"treePath\": \"/10628763/\", \"articleId\": \"7748054\", \"version\": 1.3, \"urlTitle\": \"configuracao-de-rodape\", \"DDMStructureId\": 10628806, \"DDMTemplateKey\": \"\", \"defaultLanguageId\": \"pt_BR\", \"layoutUuid\": \"\", \"displayDate\": \"Tue Oct 31 18:43:00 GMT 2023\", \"expirationDate\": null, \"reviewDate\": null, \"indexable\": false, \"smallImage\": false, \"smallImageId\": 0, \"smallImageSource\": 1, \"smallImageURL\": \"\", \"lastPublishDate\": null, \"status\": 0, \"statusByUserId\": 873856, \"statusByUserName\": \"Wagner de Melo Reck\", \"statusDate\": \"Fri Jan 26 22:15:39 GMT 2024\"}"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign xmlArticle = article.getDocum... [in template "20099#20135#2683780" in function "extractFooterInfo" at line 31, column 3] - Reached through: @renderConfigFooterDates entry, journ... [in template "20099#20135#2683780" at line 82, column 5] ----
1<#--
2Widget templates can be used to modify the look of a
3specific application.
4
5Please use the right panel to quickly add commonly used variables.
6Autocomplete is also available and can be invoked by typing "${".
7-->
8
9<#include "${templatesPath}/1975398" />
10
11<#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
12
13<#function extractFooterInfo curEntry journalArticleService >
14 <#if !curEntry?? >
15 <#return {} />
16 </#if>
17
18 <#assign article = journalArticleService.getLatestArticle(curEntry.getClassPK()) />
19 <#if !article??>
20 <#return {} />
21 </#if>
22
23 <#assign ddmStructure = article.getDDMStructure() />
24 <#if !ddmStructure??>
25 <#return {} />
26 </#if>
27
28 <#assign productCategories = [] />
29
30 <#assign fieldList = getFieldListByStructure(ddmStructure) />
31 <#assign xmlArticle = article.getDocument().getRootElement() />
32
33
34 <#assign cookiesLabel = getFieldValue(fieldList, xmlArticle, "Definições de Cookies - Rótulo") />
35 <#assign copyrightMessage = getFieldValue(fieldList, xmlArticle, "Mensagem de Copyright") />
36
37 <#assign linkItemGroupXMLList = getNodesByLabel(fieldList, xmlArticle, "Links do rodapé")>
38 <#assign linksAndLabels = []>
39 <#list linkItemGroupXMLList as linkItemGroupXML>
40 <#assign obj = {
41 "link": getFieldValue(fieldList, linkItemGroupXML, "Link"),
42 "label": getFieldValue(fieldList, linkItemGroupXML, "Rótulo")
43 } />
44 <#assign linksAndLabels = linksAndLabels + [obj] />
45 </#list>
46 <#return {
47 "linksAndLabels": linksAndLabels,
48 "cookiesLabel" : cookiesLabel,
49 "copyrightMessage": copyrightMessage
50 } />
51</#function>
52
53
54<#macro renderConfigFooterDates entry journalArticleService >
55 <#assign info = extractFooterInfo(entry journalArticleService) />
56
57
58 <div class="fragment-footer breakpoint" id="pet-fragment-footer">
59
60 <div class="petrobras-footer col-1-12 md-col-1-8 sm-col-1-4">
61 <div class="footer-other-links-container">
62 <div class="footer-links">
63 <a class="footer-menu-item button-sm-regular ot-sdk-show-settings" id="ot-sdk-btn" target="_blank" tabindex="0">${info.cookiesLabel} </a>
64 <#list info.linksAndLabels as link>
65 <a class="button-sm-regular footer-menu-item" open="_blank"
66 href='${link.link}'
67 tabindex="0">
68 ${link.label}
69 </a>
70 </#list>
71 </div>
72 <p class="footer_copyright button-sm-regular">${info.copyrightMessage}</p>
73 </div>
74 </div>
75
76
77 </div>
78
79</#macro>
80
81<#if entry?has_content>
82 <@renderConfigFooterDates entry journalArticleService />
83</#if>
84
85
86<style>
87
88
89 .petrobras-footer * {
90 margin: 0;
91 padding: 0;
92 }
93
94 .petrobras-footer {
95 display: flex;
96 justify-content: space-between;
97 font-family: var(--font-family-base);
98 width: 100%;
99 background: var(--color-background-default-level-02)
100 }
101
102
103 .petrobras-footer .footer-other-links-container {
104 display: flex;
105 justify-content: space-between;
106 gap: 16px;
107 width: 100%;
108 margin: var(--space-xl) 0 !important;
109 }
110
111 .petrobras-footer .footer-other-links-container .footer-links {
112 display: flex;
113 gap: var(--space-md);
114 }
115
116 .petrobras-footer .footer-other-links-container .footer-links p,
117 .petrobras-footer .footer-other-links-container .footer-links a {
118 color: var(--color-text-primary-default);
119 }
120
121 /*Cookies button*/
122 .petrobras-footer .footer-other-links-container .footer-links
123 #ot-sdk-btn.ot-sdk-show-settings, #ot-sdk-btn.optanon-show-settings {
124 color: var(--color-text-primary-default);
125 border: none;
126 padding: 0;
127 font-size: var(--font-size-xxxs);
128 line-height: var(--line-height-lg);
129 }
130
131 .petrobras-footer .footer-other-links-container .footer-links
132 #ot-sdk-btn.ot-sdk-show-settings:hover, #ot-sdk-btn.optanon-show-settings:hover {
133 background: transparent;
134 color: var(--color-neutral-800);
135 }
136
137
138 .petrobras-footer .footer-other-links-container .footer_copyright {
139 color: var(--color-neutral-dark-to-bright-300, var(--color-neutral-600));
140 }
141
142
143
144 @media (max-width: 1200px) {
145
146 .petrobras-footer .footer-other-links-container {
147 display: flex;
148 flex-direction: column;
149 margin: 48px auto 55px auto;
150 align-items: center;
151 text-align: center;
152 justify-content: flex-start;
153 gap: var(--space-md);
154 }
155
156 .petrobras-footer .footer-other-links-container p {
157 margin-left: 0;
158 }
159
160 .petrobras-footer .footer-other-links-container .footer-links {
161 display: flex;
162 flex-direction: column;
163 gap: var(--space-md);
164 }
165
166
167 .petrobras-footer .footer-other-links-container .footer-links a,
168 .petrobras-footer .footer-other-links-container .footer-links p {
169 margin-left: 0;
170 }
171
172 }
173
174 @media (max-width: 767px) {
175
176 .petrobras-footer .footer-other-links-container .footer_copyright {
177 padding-bottom: 25px;
178 }
179 }
180
181</style>
Canais
Idioma
Acessibilidade
Busca
Do a search:
Search
Most searched
Fuel price
Pre-salt
Team Petrobras