eXist-db在.xq数据中包含html模板

时间:2014-01-10 11:09:19

标签: html templates xquery exist-db

我有一个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文件时使用此模板?

提前致谢。

1 个答案:

答案 0 :(得分:7)

默认情况下,eXist-db的模板框架对文件扩展名为.html的文件的请求进行操作,而不是.xq个文件。正如您所发现的,模板框架将非.html文件的结果传递给未更改的文件。 (如果您打开应用程序集合中的.html文件,您将看到controller.xql文件的特殊处理。)因此,请将表单提交给{ksearch.xq,而不是.html。 {1}}文件,它使用模板框架的约定来调用XQuery代码,例如

<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代码的地方。