[mapserver-users] Template for No Records?
Frank Koormann
frank.koormann@intevation.de
Thu, 24 Oct 2002 11:27:25 +0200
--r5Pyd7+fXNt84Ff3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Matthew, David, all,
* Matthew Hatcher <MJHatcher@space.qinetiq.com> [021022 10:16]:
>
> Unfortunately, these URLs are simply forwarded to and are not treated as
> templates, so you can't include the usual template tags, but it's still
> possible to make things look much better than the old error messages.
>
I'd once implemented an enhancement for mapserver version 3.5, introducing
a EMPTY_TEMPLATE tag for the mapfile. This does what you are asking for.
You may find the attached patch usefull although it is an untested port
from the 3.5 to 3.6 series.
Regards,
Frank
--
Frank Koormann <frank.koormann@intevation.de>
Professional Service around Free Software (http://intevation.net/)
FreeGIS Project (http://freegis.org/)
--r5Pyd7+fXNt84Ff3
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="mapserver-3.6-empty.patch"
diff -uNr mapserver-3.6.3.orig/map.h mapserver-3.6.3/map.h
--- mapserver-3.6.3.orig/map.h Tue Oct 8 05:50:17 2002
+++ mapserver-3.6.3/map.h Thu Oct 24 11:14:37 2002
@@ -326,6 +326,8 @@
char *header, *footer;
char *empty, *error; /* error handling */
+ char *empty_template; /* show error message with a template */
+
rectObj extent; /* clipping extent */
double minscale, maxscale;
char *mintemplate, *maxtemplate;
diff -uNr mapserver-3.6.3.orig/mapfile.c mapserver-3.6.3/mapfile.c
--- mapserver-3.6.3.orig/mapfile.c Fri Oct 4 23:44:19 2002
+++ mapserver-3.6.3/mapfile.c Thu Oct 24 11:14:37 2002
@@ -2788,7 +2788,7 @@
web->extent.minx = web->extent.miny = web->extent.maxx = web->extent.maxy = -1.0;
web->template = NULL;
web->header = web->footer = NULL;
- web->error = web->empty = NULL;
+ web->error = web->empty = web->empty_template = NULL;
web->mintemplate = web->maxtemplate = NULL;
web->minscale = web->maxscale = -1;
web->log = NULL;
@@ -2804,6 +2804,7 @@
msFree(web->footer);
msFree(web->error);
msFree(web->empty);
+ msFree(web->empty_template);
msFree(web->maxtemplate);
msFree(web->mintemplate);
msFree(web->log);
@@ -2816,6 +2817,8 @@
{
fprintf(stream, " WEB\n");
if(web->empty) fprintf(stream, " EMPTY \"%s\"\n", web->empty);
+ if(web->empty_template) fprintf(stream, " EMPTY_TEMPLATE \"%s\"\n",
+ web->empty);
if(web->error) fprintf(stream, " ERROR \"%s\"\n", web->error);
if(web->footer) fprintf(stream, " FOOTER \"%s\"\n", web->footer);
if(web->header) fprintf(stream, " HEADER \"%s\"\n", web->header);
@@ -2838,6 +2841,9 @@
case(EMPTY):
if((web->empty = getString()) == NULL) return(-1);
break;
+ case(EMPTY_TEMPLATE):
+ if((web->empty_template = getString()) == NULL) return(-1);
+ break;
case(EOF):
msSetError(MS_EOFERR, NULL, "loadWeb()");
return(-1);
@@ -2901,6 +2907,10 @@
case(EMPTY):
msFree(web->empty);
web->empty = strdup(value);
+ break;
+ case(EMPTY_TEMPLATE):
+ if(web->empty_template) msFree(web->empty);
+ web->empty_template = strdup(value);
break;
case(ERROR):
msFree(web->error);
diff -uNr mapserver-3.6.3.orig/mapfile.h mapserver-3.6.3/mapfile.h
--- mapserver-3.6.3.orig/mapfile.h Mon Apr 29 20:04:21 2002
+++ mapserver-3.6.3/mapfile.h Thu Oct 24 11:14:37 2002
@@ -158,4 +158,6 @@
#define MINBOXSIZE 1133
#define MAXBOXSIZE 1134
+#define EMPTY_TEMPLATE 1140
+
#endif /* MAPFILE_H */
diff -uNr mapserver-3.6.3.orig/maplexer.l mapserver-3.6.3/maplexer.l
--- mapserver-3.6.3.orig/maplexer.l Wed Sep 18 17:14:17 2002
+++ mapserver-3.6.3/maplexer.l Thu Oct 24 11:14:37 2002
@@ -111,6 +111,7 @@
<INITIAL,OBJECT_STRING>data { return(DATA); }
<INITIAL,OBJECT_STRING>dump { return(DUMP); }
<INITIAL,OBJECT_STRING>empty { return(EMPTY); }
+<INITIAL,OBJECT_STRING>empty_template { return(EMPTY_TEMPLATE); }
<INITIAL>end { return(END); }
<INITIAL,OBJECT_STRING>error { return(ERROR); }
<INITIAL,OBJECT_STRING>expression { return(EXPRESSION); }
diff -uNr mapserver-3.6.3.orig/mapserv.c mapserver-3.6.3/mapserv.c
--- mapserver-3.6.3.orig/mapserv.c Thu Jun 27 21:10:39 2002
+++ mapserver-3.6.3/mapserv.c Thu Oct 24 11:17:57 2002
@@ -83,8 +83,17 @@
exit(0);
}
- if((ms_error->code == MS_NOTFOUND) && (msObj->Map->web.empty)) {
- msRedirect(msObj->Map->web.empty);
+ if((ms_error.code == MS_NOTFOUND)
+ && (Map->web.empty || Map->web.empty_template)) {
+ if (Map->web.empty_template) {
+ /* set to mode to something other than QUERY so that writeError
+ * is not called recursively. */
+ Mode = BROWSE;
+ printf("Content-type: text/html%c%c", 10, 10);
+ returnPage(Map->web.empty_template, BROWSE);
+ } else {
+ redirect(Map->web.empty);
+ }
} else {
if(msObj->Map->web.error) {
msRedirect(msObj->Map->web.error);
--r5Pyd7+fXNt84Ff3--