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

Newsletter DXP 7.4 by ZYLK
DXP App
Analytics and Optimization Utility
27181302

We present the new improved Newsletter plugin update developed by ZYLK for Liferay DXP 7.4.
The plugin is perfectly integrated on a functional level with the new features present in this version of Liferay and presents a new interface according to the new Liferay menu design to provide the best user experience.

This is a plugin created by ZYLK for Liferay that allows a newsletter system fully integrated into the portal, can include any content hosted on the portal (forum, blog, articles...) and allows to fully customize its appearance.
It is also possible to schedule the sending of the newsletters so that this process is done automatically.

Features

Powerful template engine. The template engine is integrated into the Liferay template system, so it is possible:

It gives the opportunity to fully customize the appearance of the newsletters.
Include any portal content (blog post, forum, ...) in the newsletters.

Subscribe/unsubscribe system (with email confirmation). Users can subscribe to the newsletters from a page created for this purpose in the portal. It is also possible to manage subscribers from the plugin's administration panel.
I18n. The plugin is translated into several languages, and provides support for newsletter translation.
Multi-site support. Each site can manage its own newsletters, and management can be done independently on each site.
Programmer. Newsletters can be scheduled (daily, weekly, monthly...) to be sent automatically.
Category management. Different categories can be managed so that users can subscribe to different topics.
Import of users from CSV. So you can import existing users in external systems.
Shipping history. From the Mailing (history) section you can check all the information of the emails already sent

DEVELOPER
处理模板时发生错误。
The following has evaluated to null or missing:
==> publisePages.items  [in template "3192443#3192485#null" at line 36, column 38]

----
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 publisePage = publisePages.items  [in template "3192443#3192485#null" at line 36, column 17]
----
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=catalogName eq '${catalogName}'" ) /> 
33	<#assign redirectPath="https://marketplace-uat.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
24-12-10 下午4:05
Published date
24-12-10 下午4:05
Published Date
24-12-10 下午4:05
SUPPORTED OFFERINGS
Liferay Self-Hosted
Supported Versions
2023 Q3, 2023 Q4
Resource Requirements
Edition
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.