我正在处理的存储库的一个要求是从用户界面获得Advanced Search
选项。从DSpace 4开始,Discovery分面/过滤搜索&默认情况下,如here所述启用浏览,我只是在导航中添加一个链接,指向Advanced Search
链接到http://myrepository.org/discover
。现在,我的目标是在用户点击Advanced Search
链接时取消搜索结果。
如何覆盖搜索结果,如果没有查询字符串(例如,如果用户直接进入/discover
页面并且未选择任何方面),它将仅显示在图片中下面没有搜索结果和Now showing items ...
以及分页div。
我正在使用 DSpace版本5.3幻影2主题
这就是我的尝试:
<xsl:template match="dri:list[@id='aspect.discovery.SimpleSearch.list.search-results-repository']">
<xsl:variable name="query-string" select="/dri:document/dri:meta/dri:pageMeta/dri:metadata[@element='request'][@qualifier='queryString']"/>
<xsl:if test="$query-string!=''">
<xsl:apply-templates />
</xsl:if>
</xsl:template>
上面的代码总是会抑制搜索结果,无论我是否有查询字符串。
修改
我在答案中使用的模板匹配有问题。排序选项的样式已被删除。
有人可以帮助我改进我的代码,以便它不会删除排序选项的样式吗?默认排序选项应如下所示:
我想知道为什么使用该模板匹配删除了排序选项的样式。如果我使用<xsl:apply-templates/>
或<xsl:apply-templates select="."/>
代替<xsl:copy-of select="."/>
,则不会返回我想要实现的结果。
任何建议都将不胜感激。提前谢谢。
答案 0 :(得分:1)
经过多次尝试template match
,我终于实现了我想要展示的内容。这是我用来实现目标的template match
。
<xsl:template match="dri:div[@id='aspect.discovery.SimpleSearch.div.search-results']">
<xsl:if test="contains(@pageURLMask,'query') or contains(@pageURLMask,'filter')">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:template>
我不知道,也不确定这是否是万无一失的。我直接转到/discover
页面时对此进行了测试,未显示搜索结果,我也尝试点击搜索按钮而不在搜索表单中输入任何值。
这个答案有点问题。请参阅我上面的更新帖子。
这是解决我在排序选项样式方面存在问题的代码。
<xsl:template match="dri:div[@id='aspect.discovery.SimpleSearch.div.search-results']">
<xsl:choose>
<xsl:when test="contains(@pageURLMask,'query') or contains(@pageURLMask,'filter')">
<xsl:apply-templates select="dri:div[@id='aspect.discovery.SimpleSearch.div.masked-page-control']/node()"/>
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="no-search-results"/>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="no-search-results" match="dri:div[@id='aspect.discovery.SimpleSearch.div.masked-page-control']"/>