/o//commerce-media/accounts/-1/images/18409282?download=true

Webstar-Newsletter
DXP App
Data Modeling, Process & Business Logic
18409139
Webstar Newsletter portlet is a feature rich, open source product that was created with the aim of meeting the requirements of a standard newsletter module.

Features include:
Built-in Liferay tag support.
Built-in Liferay localization support.
Built-in newsletter template system (header/content/footer).
Support for saving draft newsletters.
User/subscriber management.
Newsletter content is generated from existing web content.
Newsletter category management.
Subscription is possible for individual categories.
Admin can send newsletters to subscribers of several categories at the same time.
E-mail confirmation to several categories can be done in a single step.
Registered (Liferay) users don’t need to confirm their e-mail addresses.
If a subscriber of a newsletter registers on the page (becomes a Liferay user), his/her user account retains previous subscription preferences.

The project was created from scratch with Maven portlet archetype, uses Maven Service-builder plugin, and the latest PrimeFaces and Liferay Faces framework currently available.

Bug report and suggestions for improvements are welcome. Webstar Newsletter portlet is a feature rich, open source product that was created with the aim of meeting the requirements of a standard newsletter module.

Features include:
Built-in Liferay tag support.
Built-in Liferay localization support.
Built-in newsletter template system (header/content/footer).
Support for saving draft newsletters.
User/subscriber management.
Newsletter content is generated from existing web content.
Newsletter category management.
Subscription is possible for individual categories.
Admin can send newsletters to subscribers of several categories at the same time.
E-mail confirmation to several categories can be done in a single step.
Registered (Liferay) users don’t need to confirm their e-mail addresses.
If a subscriber of a newsletter registers on the page (becomes a Liferay user), his/her user account retains previous subscription preferences.

The project was created from scratch with Maven portlet archetype, uses Maven Service-builder plugin, and the latest PrimeFaces and Liferay Faces framework currently available.

Bug report and suggestions for improvements are welcome.
DEVELOPER
テンプレート処理中にエラーが発生しました。
The following has evaluated to null or missing:
==> product.catalogName  [in template "3192443#3192485#null" at line 28, column 21]

----
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: catalogName = product.catalogName  [in template "3192443#3192485#null" at line 28, 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") 
27	productSpecifications = product.productSpecifications![] 
28	catalogName=product.catalogName 
29/> 
30 
31<#if catalogName?has_content> 
32	<#assign publisePages=restClient.get("/c/publisherdetailses?filter=publisherName eq '${catalogName}'" ) /> 
33	<#assign redirectPath="https://marketplace.liferay.com/e/publisher-details/29282497"/> 
34	 
35	<#if publisePages?has_content> 
36		<#assign publisePage=publisePages.items /> 
37			<#if publisePage?has_content> 
38						<#assign publisherDetail=publisePage[0]/> 
39			</#if> 
40	</#if> 
41</#if> 
42 
43<div> 
44	<#if productSpecifications?has_content> 
45		<#assign developerNames = productSpecifications?filter(item -> stringUtil.equals(item.specificationKey, "developer-name")) /> 
46 
47		<#if developerNames?has_content> 
48			<#list developerNames as developerName> 
49				<#if publisherDetail?has_content> 
50					<a class="bg-neutral-8" href="${redirectPath}/${publisherDetail.id}"> 
51						${developerName.value} 
52					</a> 
53				<#else> 
54					<a class="bg-neutral-8" 	href="/?developer-name=${developerName.value}"> 
55						${developerName.value} 
56					</a> 
57				</#if> 
58			</#list> 
59		</#if> 
60	</#if> 
61</div> 
DEVELOPER
13/10/11 0:00
Published date
13/10/11 0:00
Published Date
13/10/11 0:00
SUPPORTED OFFERINGS
Liferay PaaS, Liferay Self-Hosted
Supported Versions
Resource Requirements
Edition
CE, EE
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.