Search code examples
liferayliferay-6portletliferay-themeliferay-aui

How to add structure and template for new journal article from my custom portlet?


When a new journal article is dropped into the page,:

  • I have to show a link "select design" in the journal article.
  • When user click on the link it needs to open a popup.
  • In that popup I have to show list of all templates.
  • When any of template is selected, then for the journal article it has to append the structure Id and template Id( template which I have chosen).

This is my requirement( like when we drop the web-content display portlet into the page, on the on click of the add button, it will open a page and shows options choose structure, when we select the choose structure, it will append the structure id and template id associated with the structure id, to the journal article).

How to achieve this ?


Solution

  • You can refer following code snippet to add structure and template to the web content in your custom portlet

    ThemeDisplay themeDisplay = (ThemeDisplay)actionRequest.getAttribute(WebKeys.THEME_DISPLAY);
                    Long parentFolderId = DLFolderConstants.DEFAULT_PARENT_FOLDER_ID;
                    DDMStructure ddmStructure=DDMStructureLocalServiceUtil.getDDMStructure(11515);
                    DDMTemplate ddmTemplate=DDMTemplateLocalServiceUtil.getDDMTemplate(11517);
                    Map<Locale,String> titleMap=new HashMap<Locale,String>();
                    titleMap.put(themeDisplay.getLocale(), "First Record");
                    String content=
                            "<root available-locales='en_US' default-locale='en_US'>"
                                    +"<dynamic-element dataType='string' indexType='keyword' name='Title' readOnly='false' repeatable='false' required='false' showLabel='true' type='text' width='small'>"
                                        +"<dynamic-content>FirstRecord</dynamic-content>"
                                    +"</dynamic-element>"
                                    +"<dynamic-element dataType='string' indexType='keyword' name='Description' readOnly='false' repeatable='false' required='false' showLabel='true' type='textarea' width='small'>"
                                    +"  <dynamic-content>This the first one doing by programatically</dynamic-content>"
                                    +"</dynamic-element>"
                                    +"<dynamic-element dataType='image' fieldNamespace='wcm' indexType='keyword' name='DamImage' readOnly='false' repeatable='false' required='false' showLabel='true' type='wcm-image' width=''>"
                                    +"  <dynamic-content>http://localhost:8080/documents/10184/0/welcome_community/0dc0adb1-b565-409a-b766-96d1e42b04fb?t=1459163274526</dynamic-content>"
                                    +"</dynamic-element>"
                                    +"<dynamic-element dataType='string' indexType='keyword' name='UserIdExcel' readOnly='false' repeatable='false' required='false' showLabel='true' type='text' width='small'>"
                                    +"  <dynamic-content>458155</dynamic-content>"
                                    +"</dynamic-element>"
                                    +"<dynamic-element dataType='string' indexType='keyword' name='Username' readOnly='false' repeatable='false' required='false' showLabel='true' type='text' width='small'>"
                                    +"  <dynamic-content>LaxmanDeepak</dynamic-content>"
                                    +"</dynamic-element>"
                                    +"<dynamic-element dataType='date' fieldNamespace='ddm' indexType='keyword' name='DateFromExcel' readOnly='false' repeatable='false' required='false' showLabel='true' type='ddm-date' width='small'>"
                                    +"<dynamic-content>03/29/2016</dynamic-content>"
                                    +"</dynamic-element>"
                                +"</root>";
                    ServiceContext serviceContext = new ServiceContext();
                    serviceContext.setScopeGroupId(themeDisplay.getScopeGroupId());
                    serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);
    
                    JournalArticleLocalServiceUtil.addArticle(themeDisplay.getUserId(), themeDisplay.getScopeGroupId(), parentFolderId, titleMap, null, content, ddmStructure.getStructureKey(), ddmTemplate.getTemplateKey(), serviceContext);