1

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

<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())
]"/>
4

2 回答 2

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;
    }
}

事件处理程序的实现方式在最近几个版本中发生了非常轻微的变化,因此值得查看文档以了解您的特定版本的更改。有关标准方法的示例,请参见此处。

于 2012-12-11T07:54:30.913 回答
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)]
" />
于 2012-12-11T23:33:16.497 回答