Foros de discusión
Getting Journal Article content without the XML in Liferay 6.1
Jonny Olliff-Lee, modificado hace 12 años.
Getting Journal Article content without the XML in Liferay 6.1
Junior Member Mensajes: 48 Fecha de incorporación: 25/01/11 Mensajes recientes
Hi all,
I'm working on a custom portlet part of which I need to output the content of journal articles to a file on a schedule. To accomplish this I've been trying to use the following methods:
where journalArticle is a JournalArticle object from the database. However all I get back from both of these methods is:
instead of
Can anyone shed some light on a) Why this isn't working, and / or b) how to retrieve just the pure content of a Journal Article without the XML wrapper.
Thank you!
p.s. I'm using Liferay 6.1 EE plugin-SDK
I'm working on a custom portlet part of which I need to output the content of journal articles to a file on a schedule. To accomplish this I've been trying to use the following methods:
journalArticle.getContentByLocale("en_US")
and journalArticle.getContent()
where journalArticle is a JournalArticle object from the database. However all I get back from both of these methods is:
<root available-locales="en_US" default-locale="en_US">
<static-content language-id="en_US">The content would be here....</static-content>
</root>
instead of
The content would be here.....
Can anyone shed some light on a) Why this isn't working, and / or b) how to retrieve just the pure content of a Journal Article without the XML wrapper.
Thank you!
p.s. I'm using Liferay 6.1 EE plugin-SDK
Alain Dresse, modificado hace 12 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
Junior Member Mensajes: 95 Fecha de incorporación: 18/07/11 Mensajes recientes
You need to use SAXReaderUtil to parse the xml.
Take a look at this post: http://www.liferay.com/community/forums/-/message_boards/message/12470206.
Best,
Alain
Take a look at this post: http://www.liferay.com/community/forums/-/message_boards/message/12470206.
Best,
Alain
Jonny Olliff-Lee, modificado hace 12 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
Junior Member Mensajes: 48 Fecha de incorporación: 25/01/11 Mensajes recientes
Thanks Alain, I will check that out!
Can anyone from Liferay explain why we can't use the API get the contents of a JournalArticle in Java code (not on a JSP), or if you can how? Thanks!
Can anyone from Liferay explain why we can't use the API get the contents of a JournalArticle in Java code (not on a JSP), or if you can how? Thanks!
Gabriel Lana, modificado hace 11 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
New Member Mensaje: 1 Fecha de incorporación: 25/02/13 Mensajes recientesJonny Olliff-Lee:
Thanks Alain, I will check that out!
Can anyone from Liferay explain why we can't use the API get the contents of a JournalArticle in Java code (not on a JSP), or if you can how? Thanks!
it should work
JournalArticle article = JournalArticleServiceUtil.getArticle(groupId, defaultArticleId);
Hitoshi Ozawa, modificado hace 11 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
Liferay Legend Mensajes: 7942 Fecha de incorporación: 24/03/10 Mensajes recientesJournalArticle article = JournalArticleServiceUtil.getArticle(groupId, defaultArticleId);
This will only get the JournalArticle. I think you meant getArticleContent() which return a String.
neda esmaeili, modificado hace 9 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
New Member Mensajes: 12 Fecha de incorporación: 14/12/13 Mensajes recientes
hi
I am using Saxutilclass and output is one!.
content: /image/journal/article?img_id=14128&t=1398579524945
but in xml file 2 picture exist!
<root available-locales="en_US" default-locale="en_US">
<dynamic-element name="activeIndex" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[0]]></dynamic-content>
</dynamic-element>
<dynamic-element name="timeInterval" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[0.75]]></dynamic-content>
</dynamic-element>
<dynamic-element name="maxImageHeight" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[254]]></dynamic-content>
</dynamic-element>
<dynamic-element name="maxImageWidth" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[600]]></dynamic-content>
</dynamic-element>
<dynamic-element name="image" index="0" type="image" index-type="keyword">
<dynamic-element name="linkUrl" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US" id="14128">/image/journal/article?img_id=14128&t=1398579524945</dynamic-content>
</dynamic-element>
<dynamic-element name="image" index="1" type="image" index-type="keyword">
<dynamic-element name="linkUrl" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US" id="14129">/image/journal/article?img_id=14129&t=1398579525025</dynamic-content>
</dynamic-element>
</root>
please help me
I am using Saxutilclass and output is one!.
content: /image/journal/article?img_id=14128&t=1398579524945
but in xml file 2 picture exist!
<root available-locales="en_US" default-locale="en_US">
<dynamic-element name="activeIndex" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[0]]></dynamic-content>
</dynamic-element>
<dynamic-element name="timeInterval" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[0.75]]></dynamic-content>
</dynamic-element>
<dynamic-element name="maxImageHeight" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[254]]></dynamic-content>
</dynamic-element>
<dynamic-element name="maxImageWidth" index="0" type="text" index-type="">
<dynamic-content language-id="en_US"><![CDATA[600]]></dynamic-content>
</dynamic-element>
<dynamic-element name="image" index="0" type="image" index-type="keyword">
<dynamic-element name="linkUrl" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US" id="14128">/image/journal/article?img_id=14128&t=1398579524945</dynamic-content>
</dynamic-element>
<dynamic-element name="image" index="1" type="image" index-type="keyword">
<dynamic-element name="linkUrl" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US" id="14129">/image/journal/article?img_id=14129&t=1398579525025</dynamic-content>
</dynamic-element>
</root>
please help me
Marek Palenik, modificado hace 9 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
Junior Member Mensajes: 32 Fecha de incorporación: 2/05/13 Mensajes recientes
Hi
try to use JournalContentUtil
String content = JournalContentUtil.getContent( themeDisplay.getPortletGroupId(), articleId, null, locale, themeDisplay );
try to use JournalContentUtil
String content = JournalContentUtil.getContent( themeDisplay.getPortletGroupId(), articleId, null, locale, themeDisplay );
neda esmaeili, modificado hace 9 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
New Member Mensajes: 12 Fecha de incorporación: 14/12/13 Mensajes recientes
thnks marek,
This time, the entire template with content that!
I just want to be separated from the Edit :-(
This time, the entire template with content that!
I just want to be separated from the Edit :-(
Mahbub Alam, modificado hace 7 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
New Member Mensaje: 1 Fecha de incorporación: 22/12/15 Mensajes recientes
i have a xml content like below:
<?xml version="1.0"?>
<root available-locales="en_US" default-locale="en_US">
<dynamic-element name="Name" index="0" type="text_area" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[Multiple Text Title]]></dynamic-content>
</dynamic-element>
<dynamic-element name="loop_counter" index="0" type="ddm-decimal" index-type="keyword">
<dynamic-element name="Slide_Name" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider one]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Slide_Body" index="0" type="text_area" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider one]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Photo" index="0" type="image" index-type="keyword">
<dynamic-content language-id="en_US" id="47849">/image/journal/article?img_id=47849&t=1468315029409</dynamic-content>
</dynamic-element>
<dynamic-element name="Documents_and_Media9999" index="0" type="document_library" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[/documents/46706/0/karlin/09c9491f-3c3d-4320-898f-98d88fa4a630?t=1468314920873]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Link_to_Page9999" index="0" type="link_to_layout" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[2@public@46706]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US"><![CDATA[0.0]]></dynamic-content>
</dynamic-element>
<dynamic-element name="loop_counter" index="1" type="ddm-decimal" index-type="keyword">
<dynamic-element name="Slide_Name" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider two]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Slide_Body" index="0" type="text_area" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider two]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Photo" index="0" type="image" index-type="keyword">
<dynamic-content language-id="en_US" id="47849">/image/journal/article?img_id=47849&t=1468315029506</dynamic-content>
</dynamic-element>
<dynamic-element name="Documents_and_Media9999" index="0" type="document_library" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[/documents/46706/0/Kessel/edd702b2-78dc-44c8-96f6-bdeed2e10ed0?t=1468315018794]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Link_to_Page9999" index="0" type="link_to_layout" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[1@public@46706]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US"><![CDATA[1.0]]></dynamic-content>
</dynamic-element>
</root>
now problem is <dynamic-element> can have many child like <dynamic-element><dynamic-element><dynamic-element>
and i don't know how much child will add. I have created one java method but is able to parse <root><dynamic-element><dynamic-content> only.
java method is:
private static List<Map<String,Object>> parseXMLContent(long siteId,String articleId, String languageId)throws DocumentException, IOException, PortalException, SystemException {
List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
JournalArticle article= JournalArticleLocalServiceUtil.getArticle(siteId, articleId);
if (Validator.isNotNull(article.getContent())) {
Document doc = SAXReaderUtil.read(article.getContent());
Node root = doc.getRootElement();
List<Node> pointNodes = root.selectNodes("/root/dynamic-element");
for (int i = 0; i < pointNodes.size(); i++) {
Node pointNode = pointNodes.get(i);
Element element = (Element) pointNode;
Map<String,Object> data = new HashMap<String,Object>();
data.put("name", element.attributeValue("name"));
data.put("index", element.attributeValue("index"));
data.put("type", element.attributeValue("type"));
data.put("indexType", element.attributeValue("index-type"));
boolean tip = hasTip(siteId, articleId, languageId, element.attributeValue("name"));
data.put("tip", tip);
Node content = pointNode.selectSingleNode("//dynamic-element[@name='"+element.attributeValue("name")+"']/dynamic-content[@language-id='"+languageId+"']");
if (Validator.isNull(content)) {
if (languageId.equalsIgnoreCase("en_US")) {
languageId = "nl_NL";
content = pointNode.selectSingleNode("//dynamic-element[@name='"+element.attributeValue("name")+"']/dynamic-content[@language-id='"+languageId+"']");
}else if (languageId.equalsIgnoreCase("nl_NL")) {
languageId = "en_US";
content = pointNode.selectSingleNode("//dynamic-element[@name='"+element.attributeValue("name")+"']/dynamic-content[@language-id='"+languageId+"']");
}
}
if (Validator.isNotNull(content)) {
data.put("contentData", content.getText());
if (languageId.equalsIgnoreCase("en_US")) {
data.put("languageId","en");
}else if (languageId.equalsIgnoreCase("nl_NL")) {
data.put("languageId","nl");
}
}
result.add(data);
}
return result;
}
return null;
}
Where i need to modify it please help me.
<?xml version="1.0"?>
<root available-locales="en_US" default-locale="en_US">
<dynamic-element name="Name" index="0" type="text_area" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[Multiple Text Title]]></dynamic-content>
</dynamic-element>
<dynamic-element name="loop_counter" index="0" type="ddm-decimal" index-type="keyword">
<dynamic-element name="Slide_Name" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider one]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Slide_Body" index="0" type="text_area" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider one]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Photo" index="0" type="image" index-type="keyword">
<dynamic-content language-id="en_US" id="47849">/image/journal/article?img_id=47849&t=1468315029409</dynamic-content>
</dynamic-element>
<dynamic-element name="Documents_and_Media9999" index="0" type="document_library" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[/documents/46706/0/karlin/09c9491f-3c3d-4320-898f-98d88fa4a630?t=1468314920873]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Link_to_Page9999" index="0" type="link_to_layout" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[2@public@46706]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US"><![CDATA[0.0]]></dynamic-content>
</dynamic-element>
<dynamic-element name="loop_counter" index="1" type="ddm-decimal" index-type="keyword">
<dynamic-element name="Slide_Name" index="0" type="text" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider two]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Slide_Body" index="0" type="text_area" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[slider two]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Photo" index="0" type="image" index-type="keyword">
<dynamic-content language-id="en_US" id="47849">/image/journal/article?img_id=47849&t=1468315029506</dynamic-content>
</dynamic-element>
<dynamic-element name="Documents_and_Media9999" index="0" type="document_library" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[/documents/46706/0/Kessel/edd702b2-78dc-44c8-96f6-bdeed2e10ed0?t=1468315018794]]></dynamic-content>
</dynamic-element>
<dynamic-element name="Link_to_Page9999" index="0" type="link_to_layout" index-type="keyword">
<dynamic-content language-id="en_US"><![CDATA[1@public@46706]]></dynamic-content>
</dynamic-element>
<dynamic-content language-id="en_US"><![CDATA[1.0]]></dynamic-content>
</dynamic-element>
</root>
now problem is <dynamic-element> can have many child like <dynamic-element><dynamic-element><dynamic-element>
and i don't know how much child will add. I have created one java method but is able to parse <root><dynamic-element><dynamic-content> only.
java method is:
private static List<Map<String,Object>> parseXMLContent(long siteId,String articleId, String languageId)throws DocumentException, IOException, PortalException, SystemException {
List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
JournalArticle article= JournalArticleLocalServiceUtil.getArticle(siteId, articleId);
if (Validator.isNotNull(article.getContent())) {
Document doc = SAXReaderUtil.read(article.getContent());
Node root = doc.getRootElement();
List<Node> pointNodes = root.selectNodes("/root/dynamic-element");
for (int i = 0; i < pointNodes.size(); i++) {
Node pointNode = pointNodes.get(i);
Element element = (Element) pointNode;
Map<String,Object> data = new HashMap<String,Object>();
data.put("name", element.attributeValue("name"));
data.put("index", element.attributeValue("index"));
data.put("type", element.attributeValue("type"));
data.put("indexType", element.attributeValue("index-type"));
boolean tip = hasTip(siteId, articleId, languageId, element.attributeValue("name"));
data.put("tip", tip);
Node content = pointNode.selectSingleNode("//dynamic-element[@name='"+element.attributeValue("name")+"']/dynamic-content[@language-id='"+languageId+"']");
if (Validator.isNull(content)) {
if (languageId.equalsIgnoreCase("en_US")) {
languageId = "nl_NL";
content = pointNode.selectSingleNode("//dynamic-element[@name='"+element.attributeValue("name")+"']/dynamic-content[@language-id='"+languageId+"']");
}else if (languageId.equalsIgnoreCase("nl_NL")) {
languageId = "en_US";
content = pointNode.selectSingleNode("//dynamic-element[@name='"+element.attributeValue("name")+"']/dynamic-content[@language-id='"+languageId+"']");
}
}
if (Validator.isNotNull(content)) {
data.put("contentData", content.getText());
if (languageId.equalsIgnoreCase("en_US")) {
data.put("languageId","en");
}else if (languageId.equalsIgnoreCase("nl_NL")) {
data.put("languageId","nl");
}
}
result.add(data);
}
return result;
}
return null;
}
Where i need to modify it please help me.
Enrique Valdes Lacasa, modificado hace 9 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
Junior Member Mensajes: 92 Fecha de incorporación: 29/07/14 Mensajes recientes
By "without the XML" I suppose that you mean to display the web content in plain HTML, right? If that is your goal, then this Java call should be of help:
groupId is the Id of the site, you can use:
articleId, the id String of the JournalArticle object corresponding to the web content that you want to display.
templateId, the String of the Id of the template that you are using (if any).
The other two are simply the themeDisplay object and its locale value.
Regards.
String content = JournalContentUtil.
getContent(groupId, articleId, templateId, themeDisplay.getLocale().toString(), themeDisplay);
groupId is the Id of the site, you can use:
long groupId = themeDisplay.getLayout().getGroupId();
articleId, the id String of the JournalArticle object corresponding to the web content that you want to display.
templateId, the String of the Id of the template that you are using (if any).
The other two are simply the themeDisplay object and its locale value.
Regards.
Gabor Hajba, modificado hace 9 años.
RE: Getting Journal Article content without the XML in Liferay 6.1
New Member Mensaje: 1 Fecha de incorporación: 29/01/15 Mensajes recientesEnrique Valdes Lacasa:
String content = JournalContentUtil. getContent(groupId, articleId, templateId, themeDisplay.getLocale().toString(), themeDisplay);
When I change themeDisplay.getLocale().toString() to Locale.GERMANY.toString() I always get the default en_US translations of my content. When I use article.getContentByLocale("de_DE") I get the content XML of the German translation -- but it is an XML which is not the content provided by the JournalContentUtil.
I would like to get the German translation of the article as a String when I do some display -- even if the user has en_US (or some other language) set.
Thanks in advance.