【问题标题】:How to add asset publisher configuration options in LifeRay 6.2如何在 LifeRay 6.2 中添加资产发布者配置选项
【发布时间】:2014-09-24 20:15:38
【问题描述】:

使用资产发布者时,您可以在资产发布者配置面板中更改显示设置。如果您选择摘要显示模板,您可以使用一个新选项(Abstract Length)。如何将这样的选项添加到我的应用程序显示模板 (ADT) 中?

摘要模板示例:

我的自定义模板示例(抽象长度不可用):

【问题讨论】:

  • 您可以在模板中直接限制摘要的长度。
  • 感谢您的评论,但这里的想法是添加配置选项以便用户可以执行此操作。抽象长度就是一个例子。
  • 根据您的显示模板的值,您想要一个额外的配置选项吗?那你可以试试 Asset Publisher 的 configuration.jsp 上的 JSP hook,应该没问题。

标签: liferay liferay-6


【解决方案1】:

您可以创建 JSP 挂钩来自定义 Asset Publisher 配置。

原始配置由 /html/portlet/asset_publisher/configuration.portal.jsp 呈现。

在您的钩子中,您可以包含原始 jsp,然后添加您自己的首选项。

例子:

<%-- Include the original Asset Publisher configuration JSP. --%>
<%@include file="/html/portlet/asset_publisher/configuration.portal.jsp"%>

<%-- Read current value from portlet preferences. --%>
<% String abstractLength = portletPreferences.getValue("abstractLength", "100"); %>

<%-- Hidden div with custom input fields. --%>
<div id="customPreferences" style="display: none;">
    <aui:fieldset label="fieldset.abstractLength">
        <aui:input name="abstractLength" label="abstractLength" value="<%= abstractLength %>">
            <aui:validator name="number"/>
            <aui:validator name="min">1</aui:validator>
        </aui:input>
    </aui:fieldset>
</div>

<%-- JS code to place custom preferences at the end of Display Settings tab. --%>
<%-- It uses jQuery, but it's not a requirement. --%>
<script>
    $(document).ready(function () {
        // find div with custom preferences
        var $customPreferences = $("#customPreferences");
        // find the last fieldset on Display Settings tab
        var displaySettingsLastFieldset = $(".nav-tabs:eq(1)").siblings("div:eq(1)").children().filter("fieldset").last();
        // insert custom preferences after the last fieldset on Display Settings tab
        $customPreferences.insertAfter(displaySettingsLastFieldset);
        // show custom preferences
        $customPreferences.show();
    });
</script>

这是扩展原始 JSP 的好方法 - 即。包括原件,然后进行定制。这样,就很有可能轻松更新到 Liferay 的下一个版本。

有关如何实现 JSP 挂钩的一般指南,请参阅 Liferay Developer's Guide

【讨论】:

    【解决方案2】:

    如果您创建自己的 ADT,那么最好的方法是在 ADT 中管理内容长度,而不是不必要地挂钩 AP jsp。

    【讨论】:

      【解决方案3】:

      您可以使用以下方法获取资产发布者 ADT 可用的所有可用 portletPreference 值的列表:

      <#list portletPreferences?keys as prop >
          <li>
              ${prop}
          </li>
      </#list>
      

      因此,对于您的示例,您可以使用以下方法获取用户设置的抽象长度值:

      abstractLength: ${portletPreferences.abstractLength[0]}
      

      【讨论】:

        【解决方案4】:

        您可以在为新闻资产发布者构建的 ADT 内编写的速度代码中使用子字符串,检查下面的代码以仅显示关于我们页面的 100 个字符

        #if (!$entries.isEmpty())
        <div class="news">
        #foreach ($entry in $entries)
            #set($renderer = $entry.getAssetRenderer() )
            #set($className = $renderer.getClassName() )
            #if( $className == "com.liferay.portlet.journal.model.JournalArticle" )
                #set( $journalArticle = $renderer.getArticle() )
                #set( $document = $saxReaderUtil.read($journalArticle.getContent()) )
                #set( $rootElement = $document.getRootElement() )
        
                #set( $xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='country-portal-image']") )
                #set( $countryPortalImage = $xPathSelector.selectSingleNode($rootElement).getStringValue() )
        
                #set( $xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='country-portal-title']") )
                #set( $countryPortalTitle = $xPathSelector.selectSingleNode($rootElement).getStringValue() )
        
                #set( $xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='country-flag-icon']") )
                #set( $countryFlagIcon = $xPathSelector.selectSingleNode($rootElement).getStringValue() )
        
                #set( $xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='country-portal-about-us']") )
                #set( $countryPortalAboutUs = $xPathSelector.selectSingleNode($rootElement).getStringValue().substring(0,100) )
        
        
                #set( $link = $renderer.getURLViewInContext($renderRequest, $renderResponse, '') )
                #set( $viewURL = $assetPublisherHelper.getAssetViewURL($renderRequest, $renderResponse, $entry))
        
                #set($news-summary =$entry.getSummary($locale))
                 #set($date = $dateTool.format("dd/MM/yyyy hh:mm:ss", $dateTool.toDate( "EEE, dd MMM yyyy hh:mm:ss Z" , $entry.getPublishDate())))
                <div class="new">
                    <h1 class="title">$entry.getTitle($locale)</h1>
                    $date
                         <img src="$countryFlagIcon"/> 
                        <img src="$countryPortalImage"/> 
                        <h3 class="sub-title">$countryPortalAboutUs</h3>
                    <p class="read-more">
                        <a href="$viewURL">Read More</a>
                    </p>
                </div>
            #end
        #end
        </div>
        #end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-01
          • 2018-07-11
          • 2018-01-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-14
          • 2015-04-24
          相关资源
          最近更新 更多