MAGNOLIA CMS - 使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 链接无法正确显示并且无法将日期转换为可读格式

Posted

技术标签:

【中文标题】MAGNOLIA CMS - 使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 链接无法正确显示并且无法将日期转换为可读格式【英文标题】:MAGNOLIA CMS - When using cmsu:simpleSearch and cmsu:searchResultSnippet links are not displayed properly and can't convert date into readable format 【发布时间】:2011-09-15 14:36:46 【问题描述】:

使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 链接无法正确显示。

这是我的代码:

<c:if test="$!empty param.contentSearchPattern">
    <h1>xx results for "$fn:escapeXml(param.contentSearchPattern)"</h1>
    <ol>
        <cmsu:simpleSearch query="$param.contentSearchPattern" var="results" startLevel="1" />
        <c:if test="$empty results">
            <p>No results</p>
        </c:if>
        <c:forEach var="node" items="$results">
            <li>
                <h2><a href="$pageContext.request.contextPath$node.handle.html">$node.title</a></h2>
                <p class="pageResultUrl">drintranet-testdev$node.handle.html</p>
                <p><cmsu:searchResultSnippet query="$param.contentSearchPattern" page="$node" chars="120"/></p>
            </li>
        </c:forEach>
    </ol>
</c:if>

假设我有一个匹配搜索模式的页面,如果这只是文本,它将正确显示 sn-p。但是,如果与模式匹配的文本是链接,它将显示 sn-p,例如“”,不再链接。

我希望能够保持相同的格式。 IE。如果文本也是链接,则显示带有链接的文本。


另外,当使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 时,我想显示页面/文章的创建日期。

代码如下:

<c:if test="$!empty param.contentSearchPattern">
    <h1>xx results for "$fn:escapeXml(param.contentSearchPattern)"</h1>
    <ol>
        <cmsu:simpleSearch query="$param.contentSearchPattern" var="results" startLevel="1" />
        <c:if test="$empty results">
            <p>No results</p>
        </c:if>
        <c:forEach var="node" items="$results">
            <li>
                <h2><a href="$pageContext.request.contextPath$node.handle.html">$node.title</a></h2>
                <p class="pageResultUrl">drintranet-testdev$node.handle.html</p>
                <p><cmsu:searchResultSnippet query="$fn:escapeXml(param.contentSearchPattern)" page="$node" chars="120"/></p>
                <p>Creation Date: $node.metaData.creationDate</p>
            </li>
        </c:forEach>
    </ol>
</c:if>

但它返回创建日期行:

创建日期: java.util.GregorianCalendar[time=1307354223649,areFieldsSet=true,areAllFieldsSet=true,lenient=false,zone=sun.util.calendar.ZoneInfo[id="GMT+01:00",offset=3600000,dstSavings=0, useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2011,MONTH=5,WEEK_OF_YEAR=23,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=157,DAY_OF_WEEK =2,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=57,SECOND=3,MILLISECOND=649,ZONE_OFFSET=3600000,DST_OFFSET=0]

我正在尝试使用这种类型的代码将此日期转换为人类可读的格式:

  <cms:ifNotEmpty nodeDataName="date">
    <cms:out nodeDataName="date" datePattern="MM/dd/yyyy hh:mm a" var="eventDate"/>
  </cms:ifNotEmpty>

但这不起作用,因为 pageDate 不是我假设的 nodeDataName,知道如何正确处理吗?

【问题讨论】:

【参考方案1】:

改用&lt;p&gt;Creation Date: $node.metaData.creationDate.time&lt;/p&gt;,但我不知道这是否可行。 node.metaData.creationDate 是 java.util.Calendar 类型,而不是 java.util.Date。 首先进行从日历到日期的转换。

【讨论】:

感谢您的回答。很抱歉无法检查您的答案,这个问题已经很老了,我现在正在做其他事情。 A.【参考方案2】:

SearchResultSnippetTag 故意使 HTML 中性化,因为它不想让您处于显示前 120 个字符中的 标记而不显示 标记(可能也可能不显示)的位置位于前 120 个字符中)。为了让它以您想要的方式工作,您需要重写该类,跟踪在前 120 个字符中打开的所有标签,以便您可以确保相应的关闭标签也得到输出.

对于日期问题,根据维基上的this page,看起来您应该能够像这样使用 标记:

【讨论】:

以上是关于MAGNOLIA CMS - 使用 cmsu:simpleSearch 和 cmsu:searchResultSnippet 链接无法正确显示并且无法将日期转换为可读格式的主要内容,如果未能解决你的问题,请参考以下文章

Magnolia CMS:对话框太宽

Magnolia CMS 和 Spring MVC

Magnolia cms Gmail 配置?

使用社交媒体帐户(即 Facebook)注册/登录到 magnolia cms

Magnolia Cms Oracle 持久性

Magnolia CMS - 集成第三方系统