如何在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())
]"/>
答案 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)]
" />