Umbraco xslt搜索如何排除结果中显示的umbracoRedirect项目

时间:2012-12-11 06:44:30

标签: xslt umbraco

如何在xsltSearch结果中显示使用“umbracoRedirect”重定向到其他页面的页面?

<xsl:variable name="possibleNodes" select="$items/descendant-or-self::*[
     @isDoc
     and string(umbracoNaviHide) != '1'
     and name() != 'ImageGalleryPhoto'
     and string(umbracoRedirect) != '1' <!-- How to hide umbracoRedirect from search ?? -->
     and count(attribute::id)=1
     and (umbraco.library:IsProtected(@id, @path) = false()
     or umbraco.library:HasAccess(@id, @path) = true())
]"/>

2 个答案:

答案 0 :(得分:1)

不是在XSLT中放置逻辑,更好的方法是防止具有属性umbracoRedirect(以及任何其他非必需项)的项目首先被索引。这样你就不必计算宏中的逻辑了。

如果您使用某个事件,则可以捕获正在编制索引的项目,如果已​​设置该属性,则取消该过程。

void indexer_GatheringNodeData(object sender, IndexingNodeDataEventArgs e)
{
    if (e.IndexType == IndexTypes.Content)
    {
        var node = e.Node;
        var redirectElement = node.Element("umbracoRedirect");

        if (redirectElement != null && redirectElement.Value == "1")
            return;
    }
}

实现事件处理程序的方式在最后几个版本中略有改变,因此值得查看文档以了解特定版本的更改。有关标准方法,请参见此处an example

答案 1 :(得分:0)

感谢Umbraco论坛上的Chriztian Steinmeier:

<xsl:variable name="possibleNodes" select="
        $items//*[@isDoc]
        [not(umbracoNaviHide = 1)]
        [not(self::ImageGalleryPhoto)]
        [not(normalize-space(umbracoRedirect))]
        [not(umbraco.library:IsProtected(@id, @path)) or umbraco.library:HasAccess(@id, @path)]
" />