我有一个index.html数据,其中包括模板,通过:

<div xmlns="http://www.w3.org/1999/xhtml" data-template="templates:surround" data-template-with="templates/page.html" data-template-at="content">

在索引html站点上,我包含了一个关键字搜索表单,我的想法是,当我单击搜索按钮时,它应该调用一个.xq文件来请求搜索结果:
<form method="GET" action="ksearch.xq">

提交表单时,将打开ksearch.xq页面,但即使我包含与上面相同的模板div:
<div xmlns="http://www.w3.org/1999/xhtml" data-template="templates:surround" data-template-with="templates/page.html" data-template-at="content">

ksearch.xq页没有应用模板。
当我调用一个.xq文件时,模板似乎不被应用,但是当我调用一个普通的html文件时,模板被应用。
所以问题是如何在.xq文件的输出中也使用这个模板?
提前谢谢。

最佳答案

默认情况下,exist db的模板框架对文件扩展名为.html的文件的请求进行操作,而不是对.xq的文件进行操作。正如您所发现的,模板化框架将非-.html文件的结果传递给unchanged。(如果在应用程序集合中打开.html文件,您将看到对controller.xql文件的特殊处理。)因此,让表单将搜索参数提交到使用模板化框架的约定调用xquery代码的ksearch.xq文件,而不是.html,例如,

<div xmlns="http://www.w3.org/1999/xhtml" data-template="templates:surround" data-template-with="templates/page.html" data-template-at="content">
    <div class="app:show-search-results"/>
</div>

这个app:show-search-results类(我创建的)将指向app模块(在/db/apps/myapp/modules/app.xqm中)中名为show-search-results()的函数,模板函数中其他地方使用的是常规参数。这是您放置搜索xquery代码的地方。

关于html - eXist-db在.xq数据中包含html模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21042783/

10-09 10:09