3

要求如下,

当发布新的 Web 内容(对应于特定结构,例如 A)时,它应该在 Asset Publisher portlet 上自动更新(Asset Publisher 的默认功能)。

默认情况下,Web 内容的标题是在 Asset Publisher 上显示为不同 Web 内容的链接。而不是这个,我希望结构 A 的元素(比如名称)的内容显示为链接。单击此链接应打开一个包含相应 Web 内容的Alloy UI 弹出窗口。

为此,我使用钩子创建了一个新的“显示样式” jsp(调整了abstracts.jsp)。

在以下位置编写了此脚本.jsp

<%
String personName=null;
JournalArticle journalArticle=null;
String myContent=null;
Document document = null;
Node node=null;
Node node1=null;
Node node2=null;
Node node3=null;
int noOfWords=0;
String pic=null;
String aboutMe=null;

double version=0;

try {
    version=JournalArticleLocalServiceUtil.getLatestVersion(assetRenderer.getGroupId(), "14405");
    journalArticle = JournalArticleLocalServiceUtil.getArticle(assetRenderer.getGroupId() , "14405",version);

    myContent = journalArticle.getContent();    

    document = SAXReaderUtil.read(new StringReader(myContent));        
    node = document.selectSingleNode("/root/dynamic-element[@name='personName']/dynamic-content"); 

    if (node.getText().length() > 0) {            
        personName = node.getText();        
    }    

    node1 = document.selectSingleNode("/root/dynamic-element[@name='pic']/dynamic-content");
    if (node1.getText().length() > 0) {         
        pic = node1.getText();
    }

    node2 = document.selectSingleNode("/root/dynamic-element[@name='noOfWords']/dynamic-content");
    if (node2.getText().length() > 0) {
        noOfWords = Integer.parseInt(node2.getText());        
    }

    node3 = document.selectSingleNode("/root/dynamic-element[@name='aboutMe']/dynamic-content");
    if (node3.getText().length() > 0) {            
        aboutMe = node3.getText(). substring(0,noOfWords)+"....";        
    }
} catch (PortalException e) {
    e.printStackTrace();
} catch (DocumentException e) {
    e.printStackTrace();
}
%>

但是这里articleId需要硬编码。

我想在articleId发布新的网络内容时获取这里,即动态发布。

这里应该使用哪个 API?

任何帮助表示赞赏。

谢谢。

4

1 回答 1

1

这种方法在 Liferay 的最新版本 - Liferay 6.1.1 CE GA2 上适用于我,但我认为它也应该在没有任何更改的情况下对以前的版本有效。

简而言之,您可以使用 AssetEntry 实例的 getClassPK() 方法。

在所有显示 jsps 中,您将资产条目作为请求属性:

AssetEntry assetEntry = (AssetEntry)request.getAttribute("view.jsp-assetEntry");

然后获取与资产条目相关联的最新版本的期刊文章,而不是使用:

double version = 
        JournalArticleLocalServiceUtil.getLatestVersion(assetRenderer.getGroupId(),
        articleId);
JournalArticle journalArticle = 
        JournalArticleLocalServiceUtil.getArticle(assetRenderer.getGroupId(), 
        articleId, version);

你可以写:

JournalArticle journalArticle = 
        JournalArticleLocalServiceUtil.getLatestArticle(assetEntry.getClassPK());

希望这可以帮助。

于 2012-09-24T16:40:21.813 回答