2012-09-20 9 views
3

요구 사항은 다음과 같습니다.Asset Publisher 포틀릿에 나타나는 링크를 수정하는 방법은 무엇입니까?

새 웹 콘텐츠 (특정 구조에 해당)는 게시 될 때 Asset Publisher 포틀릿 (Asset Publisher의 기본 기능)에서 자동으로 업데이트되어야합니다.

기본적으로 웹 콘텐츠의 제목은 다른 웹 콘텐츠에 대한 애셋 게시자의 링크로 표시됩니다. 대신 구조 A의 요소 (이름)의 내용을 링크로 표시하려고합니다. 이 링크를 클릭하면 해당 웹 컨텐츠가 포함 된 합금 UI 팝업이 열립니다. 이를 위해

내가 새로운 '표시 스타일'후크를 사용하여 JSP를 만든 일이 ( abstracts.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 필요가 하드 코딩 할 :

는 이것을 .jsp에서 스크립틀릿을 썼다.

여기에 articleId을 가져오고 싶습니다. 새로운 웹 콘텐츠가 동적으로 게시 될 때입니다.

여기에 어떤 API를 사용해야합니까?

도움을 주시면 감사하겠습니다.

감사합니다.

답변

1

이 방법은 Liferay - Liferay 6.1.1 CE GA2의 최신 버전에서 작동하지만 이전 버전에서도 변경하지 않아도됩니다.

간단히 말해 AssetEntry 인스턴스의 getClassPK() 메소드를 사용할 수 있습니다. 디스플레이 JSP를 모두에서

당신이 요청 속성으로 자산 항목 수 :

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()); 

희망이 도움이됩니다.

+0

정말 대단히 도움이되었습니다 ... 내 도움이되었지만 다른 목적은 여전히 ​​해결되지 않았습니다. 링크를 클릭하면 열어야하는 웹 콘텐츠/기사가 필요합니다. url에서 나는 여전히 groupId, articleId, version이 필요할 것입니다. 어떻게해야합니까? – irene

+0

JournalArticle의 인스턴스를 얻었 으면 필요한 모든 항목을 얻을 수 있습니다. journalArticle.getGroupId(), journalArticle.getArticleId(), journalArticle.getVersion(). 작업에 사용하십시오. 성공하지 못했다면 다른 구체적인 질문을 만들어주십시오. 의견에 대답하기가 어려울 것입니다. –

+0

다시 고마워요. 그래.이게 또 다른 질문을 게시 할거야. 나 한테 도울 수 있으면 좋겠다. – irene