[mapserver-users] nquery template question
Steve Lime
Steve.Lime at dnr.state.mn.us
Mon Mar 2 11:02:27 PST 2009
There are two templating options in MapServer 5.2+. The first is the "classic" method that uses a series
of small template files to construct a result set. I believe it's like so:
1. web header
... for each layer
2. layer header
... for each feature in the layer
3. layer or class template
4. layer footer
5. web footer
In 5.2 there's a new option to use new template tags in combination with a new output format. (see
http://mapserver.org/development/rfc/ms-rfc-36.html). Here's an example:
The output format block:
OUTPUTFORMAT
NAME 'county_select_list'
DRIVER 'TEMPLATE'
MIMETYPE 'text/javascript'
FORMATOPTION 'ATTACHMENT=county_select_list.js'
FORMATOPTION 'FILE=/templates/county_select_list.js'
END
The template (county_select_list.js):
function updateCountyList(element) {
var option;
[resultset layer="counties"][feature]
option = new Option("[CTY_NAME]", "[shpext format="$minx,$miny,$maxx,$maxy" precision=0 expand="10%"]");
try {
element.add(option, null);
} catch(e) {
element.add(option);
}
[/feature][/resultset]
}
The tags to pay attention to are [resultset] and [feature]. The [resultset] tag is used to present a layer, the
[feature] tag is used to present 1 feature. So, in the above example if the layer "counties" has results then we'll
process the code between the [resultset][/resultset] block. And the for each feature in the layer we process the
code between the [feature][/feature] block. Works nice. You can choose which output format to use with the
qformat CGI variable. Here's the output generated through this template:
function updateCountyList(element) {
var option;
option = new Option("Clearwater", "304963,5219538,337550,5326697");
try {
element.add(option, null);
} catch(e) {
element.add(option);
}
option = new Option("Aitkin", "434591,5106383,498803,5213702");
try {
element.add(option, null);
} catch(e) {
element.add(option);
}
option = new Option("Chisago", "486969,5013450,529584,5066587");
try {
element.add(option, null);
} catch(e) {
element.add(option);
}
option = new Option("Blue Earth", "387528,4852924,441106,4904495");
try {
element.add(option, null);
} catch(e) {
element.add(option);
}
}
You certainly can have multiple layers in one template of this form. Hope this helps.
Steve
>>> On 2/24/2009 at 7:30 PM, in message
<200902250032.n1P0WocP031639 at atom.scu.edu.au>, Greg Luker <gluker at scu.edu.au>
wrote:
> Hi mapserver-users,
>
> How does nquery templating work?
> I'm trying to modify nquery result contents using javascript (I don't
> know much about javascript!). The best I have done so far is (nquery
> template):
>
> <html xmlns="http://www.w3.org/1999/xhtml">
> <head>
> </head>
> <body>
> <script language="Javascript" type="text/javascript">
> var Cell = window.document.all.A1;
> Cell.innerText = " ";
> </script>
> <form name="table1" method="post">
> <tr bgcolor=#FFFFD0>
> <td ID="A1">[site_code]</td>
> <td>[site_name]</td>
> <td>[featdesc_description]</td>
> <td>[feature_comment]</td>
> <td>[genderaccess_description]</td>
> </tr>
> </form>
> </body>
> </html>
>
> Which blanks the first [site_code] returned, but I want to blank
> repeating [site_code] in the nquery result table. Any ideas
> gratefully accepted!
>
> Thanks,
> Greg.
>
>
> Greg Luker
> GIS Lab Manager, Southern Cross University
> Lismore, AUSTRALIA.
> gluker at scu.edu.au
> phone 61 2 66203026
>
>
>
> _______________________________________________
> mapserver-users mailing list
> mapserver-users at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-users
More information about the MapServer-users
mailing list