3

要件は次のとおりです。

新しいWebコンテンツ(特定の構造に対応する、たとえばA)が公開されると、Asset Publisherポートレット(Asset Publisherのデフォルト機能)で自動的に更新されます。

デフォルトでは、Webコンテンツのタイトルは、さまざまなWebコンテンツのアセットパブリッシャーにリンクとして表示されるものです。これの代わりに、構造Aの要素(名前など)のコンテンツをリンクとして表示したいと思います。このリンクをクリックすると、対応するWebコンテンツを含むAlloyUIポップアップが開きます。

これを実現するために、フックを使用して新しい「表示スタイル」 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新しいWebコンテンツが公開されたとき、つまり動的にここを取得したいと思います。

ここではどの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 に答える