/o//commerce-media/accounts/-1/images/30069177?download=false

Content Card Collection
Low-Code
Experience Management
30069107

The Content Card Collection is a set of fragments designed to present textual content with flexible styling options. It includes Primary and Secondary Card containers, each with a drop zone that applies its own CSS styling when a Card Content fragment is placed inside. This approach allows the content to remain unchanged while giving you the ability to switch between different visual treatments simply by choosing a container. Originally based on the Dialect theme, the fragment has been updated for compatibility with Classic, and the CSS can be further adjusted depending on the theme in use.

DEVELOPER

开发者


Publisher Date

August 19, 2025


Deployment Method

Liferay Self-Hosted

Liferay PaaS

Liferay SaaS


App Type

Low Code Configuration

版本

1.0.0

支持的版本

2025 Q2

Standard Price

Free

Help and Support


共享链接

DEVELOPER
25-8-19 下午5:50
Published date
25-8-19 下午5:50
Published Date
25-8-19 下午5:50
SUPPORTED OFFERINGS
Liferay PaaS
Supported Versions
处理模板时发生错误。
The following has evaluated to null or missing:
==> channel.items  [in template "3192443#3192485#null" at line 18, column 30]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
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 channelId = channel.items[0].id  [in template "3192443#3192485#null" at line 18, column 9]
----
1<#if themeDisplay?has_content> 
2	<#assign scopeGroupId = themeDisplay.getScopeGroupId() /> 
3</#if> 
4 
5<#if currentURL?has_content> 
6	<#if currentURL?contains('web')> 
7		<#assign 
8			index = 2 
9			partsUrl = currentURL?split('/') 
10			siteName = partsUrl[index..index]?join('/') 
11		/> 
12	</#if> 
13</#if> 
14 
15<#assign channel = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?accountId=-1&filter=name eq 'Marketplace Channel' and siteGroupId eq '${scopeGroupId}'") /> 
16 
17<#if channel?has_content> 
18	<#assign channelId = channel.items[0].id /> 
19</#if> 
20 
21<#if (CPDefinition_cProductId.getData())??> 
22	<#assign productId = CPDefinition_cProductId.getData() /> 
23</#if> 
24 
25<#assign 
26	product = restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/"+ channelId +"/products/"+ productId +"?accountId=-1&nestedFields=productSpecifications&productSpecifications.pageSize=-1") 
27	specifications = product.productSpecifications![] 
28/> 
29 
30<div> 
31	<#if specifications?has_content> 
32		<#assign 
33			liferayVersionSpecification = specifications?filter(item -> stringUtil.equals(item.specificationKey, "liferay-version")) 
34		/> 
35 
36		<#if liferayVersionSpecification?has_content> 
37		 	<#list liferayVersionSpecification as liferayVersion> 
38				<#assign liferayVersionValue = liferayVersion.value /> 
39 
40				<#if liferayVersionValue?has_content> 
41					${liferayVersionValue}<#if liferayVersion?has_next>,</#if> 
42				</#if> 
43		  </#list> 
44		</#if> 
45	</#if> 
46</div> 
Resource Requirements
Edition
PRICE
Free
help & support
SHARE LINK
Copy & Share

HTML Example

A paragraph is a self-contained unit of a discourse in writing dealing with a particular point or idea. Paragraphs are usually an expected part of formal writing, used to organize longer prose.