Juntos fazendo o varejo do Rio crescer. 
Há mais de cinco décadas, a ASSERJ desenvolve o setor com capacitação, inovação e representatividade.

Notícias em Destaque

Quem se informa sai na frente!
Um erro ocorreu enquanto processava o modelo.
The following has evaluated to null or missing:
==> configuration  [in template "76143552151047#20120#140471" at line 58, column 59]

----
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 badgeClass = "badge-" + (conf...  [in template "76143552151047#20120#140471" at line 58, column 25]
----
1<#assign 
2  assetEntryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") 
3	groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") 
4	groupFriendlyURL = groupLocalService.getGroup(themeDisplay.getSiteGroupId()).getFriendlyURL() 
5/> 
6 
7<#--  <#function getJournalFieldValue key locale=locale> 
8    <#local field = DDMFormFieldsReferencesMap[key].name /> 
9    <#return DDMFormFieldValuesMap[field][0].getValue().getString(locale)!"" /> 
10</#function>  --> 
11<#function getJournalFieldValue key locale=locale> 
12    <#attempt> 
13        <#local field = DDMFormFieldsReferencesMap[key].name /> 
14        <#return DDMFormFieldValuesMap[field][0].getValue().getString(locale)!"" /> 
15    <#recover> 
16        <#return "" />  
17    </#attempt> 
18</#function> 
19 
20<div class="latest-news-carosel-template swiper carousel py-1 pb-md-5 pb-4 pb-md-0"> 
21	<div class="swiper-wrapper py-4" id="swiperWrapper"> 
22		<#if entries?has_content> 
23			<#list entries as entry> 
24				<#assign 
25					asset = assetEntryLocalService.getEntry(entry.getClassName(), entry.getClassPK()) 
26					categoriesNames = asset.getCategories()?map(c -> c.getTitle(locale)) 
27					assetRenderer = asset.getAssetRenderer() 
28					DDMFormFieldValuesMap = assetRenderer.getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValuesMap() 
29					DDMFormFieldsReferencesMap = assetRenderer.article.DDMStructure.DDMForm.getDDMFormFieldsReferencesMap(true) 
30 
31					title = entry.getTitle(locale) 
32					subtitle = getJournalFieldValue("subtitle", locale) 
33					displayPageURL = "/web" + groupFriendlyURL + "/w/" + assetRenderer.getUrlTitle() 
34					imageJSON = jsonFactoryUtil.createJSONObject(getJournalFieldValue("image", locale)!"{}") 
35					imageUrl = imageJSON.url 
36					imageAlt = imageJSON.alt 
37				  	category = "" 
38				/> 
39 
40				<#if entry.getCategories()?has_content> 
41                    <#assign  
42                        category = entry.getCategories()[0]  
43                        categoryTitle = category.getTitle(locale) 
44                        rawDescription = (category.getDescription(locale, true))!"" 
45                    /> 
46                     
47                    <#if !rawDescription?has_content> 
48                        <#assign rawDescription = (category.getDescriptionCurrentValue())!"" /> 
49                    </#if> 
50                    <#assign cleanedDescription = rawDescription?replace(r"(?is)<[^>]*>", "", "r")?trim /> 
51                    <#assign classFromDesc = cleanedDescription?replace(r"[^A-Za-z0-9_\- ]", "", "r")?trim /> 
52 
53                    <#if categoryTitle?lower_case == "minuto asserj"> 
54                        <#assign badgeClass = "badge-minuto-asserj" /> 
55                    <#elseif classFromDesc?has_content> 
56                        <#assign badgeClass = classFromDesc /> 
57                    <#else> 
58                        <#assign badgeClass = "badge-" + (configuration.badgeColor!"primary") /> 
59                    </#if> 
60                <#else> 
61                    <#assign category = "" /> 
62                    <#assign categoryTitle = "" /> 
63                    <#assign badgeClass = "" /> 
64                </#if> 
65 
66				<div class="swiper-slide"> 
67					<div class="cover-card position-relative h-100 w-100 rounded-xxl overflow-hidden"> 
68						<a href="${displayPageURL}"> 
69							<img class="position-absolute h-100 w-100" 
70								src="${imageUrl}" 
71								alt="${imageAlt}" 
72							/> 
73							<div class="h-100 w-100 p-4 card-content d-flex flex-column justify-content-between"> 
74								<#if category?has_content && category != ""> 
75									<span class="badge ${badgeClass}"> 
76										<p>${category.getTitle(locale)}</p> 
77									</span> 
78								</#if> 
79								<div class="d-flex flex-column mt-auto"> 
80									<h5 class="text-white"> 
81											${title} 
82									</h5> 
83								</div> 
84							</div> 
85						</a> 
86					</div> 
87				</div> 
88			</#list> 
89		</#if> 
90	</div> 
91 
92	<div class="swiper-pagination"></div> 
93	<div class="swiper-button-prev d-md-none d-none"></div> 
94	<div class="swiper-button-next d-md-none d-none"></div> 
95</div> 
96 
97<style> 
98 
99	.badge-minuto-asserj { 
100		background-color: #FFC0CB !important;  
101		color: #C71585 !important;            
102
103 
104	.latest-news-carosel-template .cover-card { 
105		height: 28rem !important; 
106
107 
108	.latest-news-carosel-template .cover-card .card-content h5 { 
109		-webkit-line-clamp: 5; 
110
111	 
112	.latest-news-carosel-template .swiper-pagination-bullet { 
113	  background: var(--white) !important; 
114		opacity: unset; 
115		height: 1rem; 
116		width: 1rem; 
117
118	 
119	.latest-news-carosel-template .swiper-pagination-bullet-active { 
120	  background: #0E7DC2 !important; 
121
122	 
123	.latest-news-carosel-template .swiper-pagination-bullet { 
124		width: 1rem !important; 
125		height: 1rem !important; 
126
127 
128	.latest-news-carosel-template .swiper-pagination-bullet-active { 
129		width: 2rem !important; 
130		height: 1rem !important; 
131		border-radius: 1rem !important; 
132
133</style> 
134 
135<script> 
136	(async function () { 
137		const Global = await import("Global"); 
138		const templateElement = document.querySelector( 
139			".latest-news-carosel-template" 
140		); 
141 
142		// Remove news that already exists in the featured grid 
143		const existingTitles = new Set(); 
144		document 
145			.querySelectorAll(".news-highlight-grid .cover-card h5") 
146			.forEach((el) => { 
147				const text = el.textContent.trim().toLowerCase(); 
148				if (text) existingTitles.add(text); 
149			}); 
150 
151		const slides = templateElement.querySelectorAll(".swiper-slide"); 
152 
153		slides.forEach((slide) => { 
154			const titleElement = slide.querySelector(".cover-card h5"); 
155			const titleText = titleElement?.textContent?.trim().toLowerCase(); 
156 
157			if (!titleText) return; 
158 
159			if (existingTitles.has(titleText)) { 
160				slide.remove(); 
161
162		}); 
163 
164		let swiper = new Global.Swiper(templateElement, { 
165			slidesPerView: 4, 
166			spaceBetween: 30, 
167			loop: true, 
168			pagination: { 
169				el: ".latest-news-carosel-template .swiper-pagination", 
170				clickable: true, 
171			}, 
172			breakpoints: { 
173				0: { slidesPerView: 1, spaceBetween: 10 }, 
174				768: { slidesPerView: 2, spaceBetween: 15 }, 
175				992: { slidesPerView: 3, spaceBetween: 20 }, 
176				1200: { slidesPerView: 4, spaceBetween: 30 }, 
177			}, 
178		}); 
179	})(); 
180</script> 

Revista Super Negócios

Edição #85 • Agosto 2026

Edição #83 • Junho 2026

Principais Editorias

Ícone da editoria

MATÉRIA DE CAPA

Compras com menos impulso e mais escolhas inteligentes

Pág. 12

Ícone da editoria

SUPER PAPO

Insights sobre o futuro do varejo na ótica de Lucas Daibert

Pág. 28

Ícone da editoria

BOAS VENDAS

Copa do Mundo Feminina no Brasil: tendências e expectativas de vendas para 2027

Pág. 86

Ícone da editoria

CADERNO ESPECIAL

O poder das marcas próprias para os supermercados

Pág. 44

Baixe a última edição agora!

Principais Editorias

Ícone da editoria

MATÉRIA DE CAPA

Supermercadistas, vocês têm a mídia nas mãos!

Pág. 10

Ícone da editoria

Super papo

IA, hiperpersoanlização e loja física

Pág. 20

Ícone da editoria

BOAS VENDAS

Bebidas zero álcool quebraram tabus

Pág. 70

Ícone da editoria

CADERNO ESPECIAL

Investir em Gerenciamento de Categoria é preciso

Pág. 36

Baixe a última edição agora!

90

K

Leitores mensais

15

Anos de Mercado

Em média

1000000

Impressões/mês

Soluções da ASSERJ

Acesso, visibilidade e relacionamento direto com quem decide no varejo. Tudo começa por aqui.

Já é associado?

Visite a página de benefícios e começa a usufruir de tudo.

Associe-se à ASSERJ

Aponte a câmera para o QR Code e fortaleça seu negócio.

Escola ASSERJ

Uma plataforma completa para capacitar e desenvolver os times dos associados, aprimorando competências e elevando a qualidade dos serviços no varejo supermercadista.

Depoimentos dos Nossos Associados

Assista aos relatos de empresários que fazem parte da nossa comunidade
YouTube Thumbnail
Depoente

Júnior Andrade

Grupo Terê Frutas
YouTube Thumbnail
Depoente

Cíntia Viegas

Casa do Arroz
YouTube Thumbnail
Depoente

Fábio Ferreira

Jeito Caseiro

Faça Parte da Nossa Comunidade

Junte-se a mais de 1.200 empresários que já fazem parte da maior
associação de supermercados do Estado do Rio de Janeiro