如何在Liferay应用程序显示模板(ADT)中访问“链接到页面”类型的字段?

时间:2016-01-12 13:53:14

标签: liferay liferay-6 freemarker

我有一个网页内容结构(WCM),其字段类型为“链接到页面”(ddm-link-to-page)。然后,我创建了一个资产发布者模板(ADT),以显示Web内容页面的链接。

<#assign journalArticle = assetRenderer.getArticle() />
<#assign document = saxReaderUtil.read(journalArticle.getContentByLocale(locale.toString())) />
<#assign URLnode = document.selectSingleNode("/root/dynamic-element[@name='Link_To_Page']/dynamic-content") />
<#assign getURL = URLnode.getText() />

<a href="${getURL}">Go to page</a>

问题是显示的值是对元素的引用而不是链接的值(它显示/348@public@9246542)所以 URLnode.getText() 无效。

所有其他实地工作。

PS。我也试过了URLnode.getStringValue()

2 个答案:

答案 0 :(得分:2)

UrlNode中@之前的第一个数字是页面布局ID。您可以使用此方法使用以下方法从ADT中获取friendlyURL:

...
<#list rootElement.elements() as dynamicElement>
    <#if "URLnode" == dynamicElement.attributeValue("name")>
        <#assign getURL = dynamicElement.element("dynamic-content").getData() />

        <#-- split the string to just get the page layout id , groupID and if its a private layout-->
        <#list page_link_data?split("@") as item>
            <#if item_index == 0>
                <#assign linkPageId = item?number>
            </#if>
            <#if item_index == 1>
                <#if item == "private">
                    <#assign linkPrivate = true>
                <#else>
                    <#assign linkPrivate = false>
                </#if>
            </#if>
            <#if item_index = 2>
                <#assign linkGroupId = item?number>
            </#if>
        </#list>

        <#-- get layout -->
        <#assign layoutLocalService = staticUtil["com.liferay.portal.service.LayoutLocalServiceUtil"]>
        <#assign pageLayout = layoutLocalService.getLayout(linkGroupId, linkPrivate, linkPageId)>

        <#-- get Friendly URL -->
        <#assign portalUtil = staticUtil["com.liferay.portal.util.PortalUtil"]>
        <#assign friendly_page_link = portalUtil.getLayoutFriendlyURL(pageLayout, themeDisplay)>

    </#if>
</#list>

${friendly_page_link}

一些方便的参考资料让我走上正轨: https://web.liferay.com/community/forums/-/message_boards/message/50293771 Programmatically get the url of a page in liferay

答案 1 :(得分:2)

最后是工作速度示例:

#if (!$entries.isEmpty())
    #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( $link = $renderer.getURLViewInContext($renderRequest, $renderResponse, '') )
            #set( $xPathSelector = $saxReaderUtil.createXPath("dynamic-element[@name='Link_to_Page']") )
            #set( $Link_to_Page = $xPathSelector.selectSingleNode($rootElement).getStringValue().trim() )
            #set( $at = "@" )
            #set( $issueUrl_Array = $Link_to_Page.split($at) )
            #set( $layoutLocalService = $serviceLocator.findService('com.liferay.portal.service.LayoutLocalService') )
            #set( $val = 0 )
            #set( $group = $val.parseInt($issueUrl_Array.get(2)) )
            #set( $layout = $val.parseInt($issueUrl_Array.get(0)) )
            #set( $pageLayout = $layoutLocalService.getLayout($group, false, $layout) )
            #set( $Link_to_Page_Url = $pageLayout.getFriendlyURL() )

            <p>$Link_to_Page_Url</p>
        #end
    #end
#end
相关问题