2017-07-21 9 views
1

Liferay DXPでは、Asset Publisherポートレットを使用してWebコンテンツ構造のエントリ(この場合はスタッフ)のリストを表示しています。メンバーのWebコンテンツ構造には、Webコンテンツテンプレートを作成する必要がありました。アプリケーションの表示テンプレートからWebコンテンツ構造テンプレートにアクセスするには

しかし、私のWebコンテンツテンプレートは現在、空のテンプレートになっています。なぜなら、Asset Publisherポートレットがスタッフのリストを表示するために使用するアプリケーション表示テンプレートからアクセスする方法がわからないからです。

は自分のアプリケーションの表示テンプレートは、現在、次のようになります。

<#if entries?has_content> 
    <div class="staff-members"> 
     <div class="container"> 
      <h3>Our staff</h3> 
      <div class="row offs"> 
       <#list entries as curEntry> 
        <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) /> 
        <#assign name = docXml.valueOf("//dynamic-element[@name='name']/dynamic-content/text()") /> 
        <#assign photo = docXml.valueOf("//dynamic-element[@name='photo']/dynamic-content/text()") /> 
        <#assign bio = docXml.valueOf("//dynamic-element[@name='bio']/dynamic-content/node()") /> 
        <div class="col-md-3 col-sm-6 wow fadeIn animated" data-wow-duration="2s" data-wow-delay="0.2s" style="visibility: visible; animation-duration: 2s; animation-delay: 0.2s; animation-name: fadeIn;"> 
         <div class="thumbnail"> 
          <img src="${photo}" alt="${name}"> 
          <div class="caption"> 
           <h5> 
            <a href="#">${name}</a> 
           </h5> 
           <p>${bio}</p> 
          </div> 
         </div> 
        </div> 
       </#list> 
      </div> 
     </div> 
    </div> 
</#if> 

あなたが見ることができるように、私は追加のマークアップとスタッフのマークアップブロックをラップする必要があります。そのため、私は、Application Display Templateを表示するためにAsset Publisherを使用しています。

このセットアップでは、Liferayに空のWebコンテンツテンプレート(Staffメンバー構造用)を追加する必要があります。私がしたいのは、そのWeb Contentテンプレート内の繰り返し可能なマークアップを定義し、ADTのテンプレートを参照することです。そうですね:

<#if entries?has_content> 
    <div class="staff-members"> 
     <div class="container"> 
      <h3>Our staff</h3> 
      <div class="row offs"> 
       <#list entries as curEntry> 
        <#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) /> 
        <#assign name = docXml.valueOf("//dynamic-element[@name='name']/dynamic-content/text()") /> 
        <#assign photo = docXml.valueOf("//dynamic-element[@name='photo']/dynamic-content/text()") /> 
        <#assign bio = docXml.valueOf("//dynamic-element[@name='bio']/dynamic-content/node()") /> 

        <!-- 
          CALL WEB CONTENT TEMPLATE HERE PASSING IN DATA 
          FOR THIS PARTICULAR WEB CONTENT ITEM. 
         --> 
       </#list> 
      </div> 
     </div> 
    </div> 
</#if> 

これはどのように達成できますか?

答えて

0

ありがとう@gonzalezalo、しかし、私は関与していない他の場所や特別なサーバー構成を見つけることができました。

他の誰かがこの質問に対する回答を探している場合は、ここに投稿しています。

我々は(asset-displayモジュールを呼び出す)Liferayのliferay_uiタグを使用して、それにAssetRendererへの参照と、我々が公開する記事(curEntry)を渡す場合は、Liferayは関連付けられたテンプレートを見つけることの重労働を行いますコンテンツに挿入して現在の記事をページに戻します。

<#if entries?has_content> 
    <div class="staff-members"> 
     <div class="container"> 
      <h3>Our staff</h3> 
      <div class="row offs"> 
       <#list entries as curEntry> 
        <#assign assetRenderer = curEntry.getAssetRenderer() /> 

        <@liferay_ui["asset-display"] 
         assetEntry=curEntry 
         assetRenderer=assetRenderer 
         showExtraInfo=false /> 
       </#list> 
      </div> 
     </div> 
    </div> 
</#if> 
1

この場合、SAXでデータを抽出する必要はありません。その実施例に見てみましょう:あなたが見ることができるように

<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 

<#if entries?has_content> 
    <#list entries as curEntry> 
     <#assign article = curEntry.getAssetRenderer().getArticle() /> 
     ${journalArticleLocalService.getArticleContent(article, article.getDDMTemplateKey(), "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)} 
    </#list> 
</#if> 

、我々は予約変数(のServiceLocatorとobjectUtil)のカップルを使用していますので、そのスニペットを使用する前に、サーバーでそれらを有効にする必要があります。

私はDXPではなくLiferay 7コミュニティで作業していますが、とにかく動作するはずです。

関連する問題