[Chameleon] costum query
Alberto Cavalli
alberto.cavalli at sintranet.it
Thu Aug 12 11:50:41 EDT 2004
Hi dear, I've found this interesting post about custom query and I tried it,
but it doesn't work. I replaced the code in my query.phtml file but the
result of query remain the same. I've 6 field in my dbf (info_id, info,
num_foglio; num_part;area; espr1) and I'd like to see in my query only 3 of
them
Can someone hel me?
thanks
Alberto
http://lists.maptools.org/pipermail/chameleon/2004-May/000842.html
THIS IS MY CODE
<?php
*
****************************************************************************
*/
// include the global preferences
include_once( "./globprefs.php" );
/*
============================================================================
* HTTP_FORM_VARS array contains the HTTP GET or POST parameters
* =========================================================================
*/
$http_form_vars = count( $_POST ) > 0 ? $_POST :
( count($_GET) > 0 ? $_GET : array("")
);
//DEBUG
/*foreach ($http_form_vars as $key => $value)
{
echo "Key: $key; Value: $value<br>\n";
}
/*
============================================================================
* Re-instate the previous map state
* =========================================================================
*/
// determine previous state key
if ( isset( $http_form_vars["PrevStateKey"] ) )
$szPrevStateKey = $http_form_vars["PrevStateKey"];
else
$szPrevStateKey = "";
// restore the previous state
$oMapSession->restoreState( $szPrevStateKey, MAPFILE );
/*
============================================================================
* Run query
* =========================================================================
*/
// only process if coordinates are given
if ( isset( $http_form_vars["INPUT_COORD"] ) &&
strlen( trim( $http_form_vars["INPUT_COORD"] ) ) > 0 )
{
// initalize vars
$gaszWMSResults = array();
// process coordinates
$aszMinMax = explode(";", $http_form_vars["INPUT_COORD"]);
$adMin = explode(",", $aszMinMax[0]);
$adMax = explode(",", $aszMinMax[1]);
// loop through all layers and add to list of layers to query
// NOTE: Layers will only have results generated for them if they
// have a "template" value set. The template value does not have
// to be valid, it could be as simple as "ttt".
$aszLayers = array();
$oMap = $oMapSession->oMap;
$nCount = $oMap->numlayers;
for ( $i=0; $i<$nCount; $i++ )
{
// get layer name
$oLayer = $oMap->getLayer( $i );
// only add if on
if ( $oLayer->status == MS_ON || $oLayer->status == MS_DEFAULT )
array_push( $aszLayers, $oLayer->name );
}
// commit
$oMapQuery->setQueryLayersByName( $aszLayers );
// execute query
if ( is_numeric( $adMax[0] ) && is_numeric( $adMax[1] ) )
$oResultSet = $oMapQuery->executeRectQuery( $adMin[0],
$adMin[1],$adMax[0], $adMax[1] );
else
$oResultSet = $oMapQuery->executePointQuery( $adMin[0],
$adMin[1] );
// format the query results
$szResults = formatQueryResults( $oResultSet, $aszLayers );
}
else
$szResults = "Nessun Risultato";
/**
* This function takes the query result set object and processes all result
* sets and formats them into a single html table string.
*
* @param $oResultSet object - The result set object to read.
* @return string - An html table of result values.
**/
function formatQueryResults( $oResultSet, $aszLayers )
{
global $gaszWMSResults;
// initialize the variables
$szReturnValue = "";
$aszNoResults = array();
// loop through each result set and return
$nCount = $oResultSet->nNumResults;
for ( $i=0; $i<$nCount; $i++ )
{
// process each result set
$aRows = $oResultSet->getResultSet( $i );
// check if single or multiple results were returned
if ( is_array( $aRows ) )
{
// build title rows
$szReturnValue .= "<tr>\n";
$szReturnValue .= "<td>\n";
$szReturnValue .= "<table bgcolor=\"#c1d8e3\" width=\"100%\"
border=\"0\" cellspacing=\"1\" cellpadding=\"2\">\n";
$szReturnValue .= "<tr>\n";
$szReturnValue .= "<td colspan=".count($aRows[0])."
bgcolor=\"C1D8E3\"><font face=\"Arial, Helvetica, sans-serif\"
size=\"2\"><u><b>".$aszLayers[$i]."</b></u></font></td>\n";
$szReturnValue .= "</tr>\n";
$szReturnValue .= "<tr>\n";
########### NEW CODE
// loop and use key for titles
foreach ($aRows[0] as $key => $value)INFO_ID; INFO;
NUM_FOGLIO;NUM_PART; AREA;
{
$szReturnValue .= "<td class=\"PARTICELLE\"><p>>
class=\"text\">".$key."</p></td>\n";
}
$szReturnValue .= "</tr>\n";
// loop through the results and format each row
foreach ( $aRows as $aRow )
{
// add a row for each
$szReturnValue .= "<tr>\n";
// loop and add a cell for each result
foreach ( $aRow as $xCell )
{
$szReturnValue .= "<td
class=\"subContentArea1\"><p class=\"text\">". $xCell."</p></td>\n";
}
$szReturnValue .= "</tr>\n";
}
// loop and use key for titles
foreach ($aRows[0] as $key => $value)
{
if (strcasecmp($key, "espr1") == 0 ||
strcasecmp($key, "num_foglio") == 0)
continue;
$szReturnValue .= "<td class=\"subContentArea2\"><p
class=\"text\">".$key."</p></td>\n";
}
$szReturnValue .= "</tr>\n";
// loop through the results and format each row
foreach ( $aRows as $aRow )
{
// add a row for each
$szReturnValue .= "<tr>\n";
// loop and add a cell for each result
foreach ( $aRow as $key => $xCell )
{
if (strcasecmp($key, "espr1") == 0 ||
strcasecmp($key, "num_foglio") == 0)
continue;
$szReturnValue .= "<td class=\"subContentArea1\"><p
class=\"text\">". $xCell."</p></td>\n";
}
$szReturnValue .= "</tr>\n";
}
##################### ENDING MY CODE
// close the table
$szReturnValue .= "</table>\n";
$szReturnValue .= "</td>\n";
$szReturnValue .= "</tr>\n";
}
else
{
// check if wms
if ( substr( $aRows, 0, 26 ) == "No results found for layer" )
array_push( $aszNoResults, $aszLayers[$i] );
else
{
$nTmpCount = count( $gaszWMSResults );
$gaszWMSResults[$nTmpCount][0] = $aRows;
$gaszWMSResults[$nTmpCount][1] = $aszLayers[$i];
}
}
// end loop of layers
}
// add the list of layer that return no results
$nCountNoResults = count( $aszNoResults );
if ( $nCountNoResults > 0 )
{
$szReturnValue .= "<tr>\n";
$szReturnValue .= "<td>\n";
$szReturnValue .= "<table bgcolor=\"#999999\" width=\"100%\"
border=\"0\" cellspacing=\"1\" cellpadding=\"2\">\n";
$szReturnValue .= "<tr>\n";
// $szReturnValue .="<th align=\"LEFT\" width=\"50%\">\n";
$szReturnValue .= "<td bgcolor=\"#C1D8E3\"><font face=\"Arial,
Helvetica, sans-serif\" size=\"2\"><b>I seguenti layer non hanno fornito
alcun risultato:</b></font></td>\n";
//$szReturnValue .="</th>\n";
$szReturnValue .= "</tr>\n";
$szReturnValue .= "<tr>\n";
$szReturnValue .= "<td bgcolor=\"E2EFF5\"><font face=\"Arial,
Helvetica, sans-serif\" size=\"2\">";
for ($i=0; $i<$nCountNoResults; $i++)
{
$szReturnValue .= $aszNoResults[$i];
if ( $i < $nCountNoResults - 1) $szReturnValue .= ", ";
}
$szReturnValue .= "</font></td>\n";
$szReturnValue .= "</tr>\n";
$szReturnValue .= "</table>\n";
$szReturnValue .= "</td>\n";
$szReturnValue .= "</tr>\n";
}
// return the formated string
return $szReturnValue;
// end formatQueryResults function
}
?>
<html>
<head>
<title>Query Results</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<body bgcolor="#ebebeB" leftmargin="0" topmargin="0" marginwidth="0"
marginheight="0">
<table bgcolor="#ebebeB" border="0" width="100%">
<tr>
<th align="LEFT" width="50%">
<h1><font color="#005de8" size="6"><b>COMUNE DI SAN
GIORGIO P.no</b></font></h1>
<h1><font color="#005de8" size="2"><b>Piazza Torrione,
4 - Tel. 0523.370711</b></font></h1>
</th>
<th align="right" width="50%">
<h1><A HREF="http://www.sintranet.it"><IMG
SRC="http://devserver/testsite/maplab213/projects/gmf_apps/SGiorgio_cadastra
l/images//Stemma.gif" WIDTH="80" HEIGHT="120" BORDER="0" ></A></h1>
</th>
</tr>
</table>
<form name="main">
<table bgcolor="#FFCC99" border=0 cellspacing=10 cellpadding=0>
<?php
// process wms layers first
$nCountWMS = count( $gaszWMSResults );
if ( $nCountWMS > 0 )
{
// add a warnning message for WMS layers
echo "<tr>\n";
echo "<td>\n";
echo "<table bgcolor=\"#999999\" width=\"100%\" border=\"0\"
cellspacing=\"1\" cellpadding=\"2\">\n";
echo "<tr>\n";
echo "<td bgcolor=\"ffffff\"><font face=\"Arial, Helvetica, sans-serif\"
size=\"2\" color=\"999999\">Note: WMS layers can only be queried as a point.
If a rectangle query is used, the center of the rectangle will be used as
the query location.</font></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</td>\n";
echo "</tr>\n";
// loop
for ( $i=0; $i<$nCountWMS; $i++ )
{
// add header
echo "<tr>\n";
echo "<td>\n";
echo "<table bgcolor=\"#999999\" width=\"100%\" border=\"0\"
cellspacing=\"1\" cellpadding=\"2\">\n";
echo "<tr>\n";
echo "<td bgcolor=\"C1D8E3\"><font face=\"Arial, Helvetica,
sans-serif\"
size=\"2\"><u><b>".$gaszWMSResults[$i][1]."</b></u></font></td>\n";
echo "</tr>\n";
// begin new row
echo "<tr>\n";
echo "<td bgcolor=\"#E2EFF5\"><pre>\n";
// read URL
readfile( $gaszWMSResults[$i][0] );
// close row
echo "</pre></td>\n";
echo "</tr>\n";
echo "</table>\n";
echo "</td>\n";
echo "</tr>\n";
}
}
// display the rest if the query results
echo $szResults;
?>
</table>
</form>
</body>
</html>
More information about the Chameleon
mailing list