Unless you have some crazy old version of Geoserver, you do NOT need to create 
a template on the server side. Just make the infoformat parameter “JSON” to get 
back GeoJSON rather than text/html.
I’ve accomplished what you are trying to do on several projects. Keep in mind 
that the GeoExt popup inherits from Ext.Window so you should configure the 
contents just as you would for that.

What I do is:
1. create XTemplates, either in hidden markup or in a separate js file
2. key the templates by the featureType (either as the div id or as a 
javascript object key) 
3. apply the appropriate template for each feature returned
4. create a GeoExt popup with the HTML created in step 3 inserted in the 
correct place

So your GFI handler would be something like this:

> getfeatureinfo: function(e) {
if(e.features && e.features.length){
var results = {};
//Loop through the different features, apply templates, and store results in a 
featureType keyed object
Ext.each(e.features,function(feat){
   var type = feat.fid.split(‘.’)[0];
   if(!results[type]){results[type]=[]}
   results[type].push(MyTemplates[type].apply(feat.attributes));
});
var popItems = [];
//Loop through returned featureTypes and create a panel for each one to put 
into the 
//popup’s accordion layout
Ext.iterate(results,function(ftype,vals){
   var panel = {
      title:ftype,
      html:’<div>’+vals.join(‘</div><div>’)+’</div>’,
      width:400}
   popItems.push(panel)
});
> new GeoExt.Popup({
> title: "Position:
> "+mappanel.map.getLonLatFromPixel(e.xy).transform(epsg900913, epsg4326),
> width: 400,
> autoHeight: true,
> layout: 'accordion',
> bodyStyle: 'background-color:#FFF;,font-size:14px;',
> autoScroll: true,
> maximizable: true,
> map: mappanel.map,
> lonlat: mappanel.map.getLonLatFromPixel(e.xy),
> unpinnable:true,
> anchored: true,
> shadow: true,
items:popItems,
> listeners: {
> close: function() {
> // closing a popup destroys it, but our reference
> is
> truthy
> popup = null;
> }
> }
> }).show();
> }

I wrote this on the fly, so beware of typos and not quite complete logic, but 
that should at least get you started on the right path

Matt Priour
Kestrel Computer Consulting

From: Hugo 
Sent: Thursday, July 21, 2011 6:19 AM
To: Robert Buckley 
Cc: users@geoext.org 
Subject: Re: [Users] control which fields are displayed in my Geoext popups

Hi Robert, 

What you can do in fact is:

- Make a geoserver template that will return your data in JSON format
- Then, process the data as you wish on the client side (this is, using GeoExt)

Below you can find an example of content.ftl that is returning the data in JSON 
format.

[{
<#assign i = 0 />
<#list type.attributes as attribute>
<#if (i >= 0) && (!attribute.isGeometry)>
"${attribute.name}":
<#list features as feature>
<#assign k = 0 />
<#list feature.attributes as attribute>
<#if (k = i) && (!attribute.isGeometry)>
"${attribute.value}"
</#if>
<#assign k = k+1 />
</#list>
<#if attribute_has_next>
,
</#if>
</#list>
</#if>
<#assign i = i+1 />
</#list>
}]

hope this helps.
Cheers,

Hugo

On Thu, Jul 21, 2011 at 12:15 PM, Robert Buckley <robertdbuck...@yahoo.com> 
wrote:

  Hi,


  Standard format... text/html as defined in the Parameter tab in Firebug.


  I have read that if the format is changed, then the attributes can be 
manipulated ie fields can be left out. I haven´t seen any code fór it though.


  I have tried with the content.ftl file in the geoserver workspaces, but the 
results are pretty grim! I would rather do it in javascript so that everything 
is kept in my app and not spread around different applications.


  yours,


  Rob






------------------------------------------------------------------------------
  Von: "d...@inlet.geol.sc.edu" <d...@inlet.geol.sc.edu>
  An: Robert Buckley <robertdbuck...@yahoo.com>
  CC: users@geoext.org
  Gesendet: Donnerstag, den 21. Juli 2011, 12:24:24 Uhr
  Betreff: Re: [Users] control which fields are displayed in my Geoext popups


  What is the format of the data coming back from the WMSGetFeatureInfo?

  > Hi,
  >
  > I would like to do the following and after several hours of trying and
  > googling
  > will have to admit that I haven´t got far.
  >
  > I want to ...
  >
  > 1. Restrict the fields displayed in my popup window so that I can control
  > which
  > fields are displayed. I don´t want to show fid, objectid etc
  >
  > 2. Ideally I would like to use the accordion layout for when there is more
  > than
  > one queryable layer, but I can´t find any code to implement this. I have
  > seen it
  > on Bryan Mcbrides explorer, but apart from that can´t find any
  > documentation.
  >
  > currently I have a popup designed like this...
  >
  >
  > // create the popup
  > var featureInfo = new OpenLayers.Control.WMSGetFeatureInfo({
  > queryVisible: true,
  > highlightOnly: true,
  > maxFeatures: 5,
  > layers: [layer_wea_wms,EnMap_SG_WEA_f]
  > });
  >
  > featureInfo.events.on({
  >    getfeatureinfo: function(e) {
  >        new GeoExt.Popup({
  >            title: "Position:
  > "+mappanel.map.getLonLatFromPixel(e.xy).transform(epsg900913, epsg4326),
  >            width: 400,
  > autoHeight: true,
  > layout: 'accordion',
  > bodyStyle: 'background-color:#FFF;,font-size:14px;',
  >            autoScroll: true,
  >            maximizable: true,
  >            map: mappanel.map,
  >            lonlat: mappanel.map.getLonLatFromPixel(e.xy),
  >            html:'<p style="font-size:10px;">Attributen</p><br>'+e.text,
  > unpinnable:true,
  > anchored: true,
  > shadow: true,
  > listeners: {
  >                    close: function() {
  >                        // closing a popup destroys it, but our reference
  > is
  > truthy
  >                        popup = null;
  >                    }
  > }
  >        }).show();
  >    }
  > });
  >
  > map.addControl(featureInfo);
  > featureInfo.activate();
  >
  >
  >
  >
  > thanks for any help_______________________________________________
  > Users mailing list
  > Users@geoext.org
  > http://www.geoext.org/cgi-bin/mailman/listinfo/users
  >




  _______________________________________________
  Users mailing list
  Users@geoext.org
  http://www.geoext.org/cgi-bin/mailman/listinfo/users





-- 
Hugo Martins
LabNT - ISEGI UNL
Campus de Campolide
1070-312 Lisboa
N 38°43'56.84", W 9°9'35.74"



--------------------------------------------------------------------------------
_______________________________________________
Users mailing list
Users@geoext.org
http://www.geoext.org/cgi-bin/mailman/listinfo/users
_______________________________________________
Users mailing list
Users@geoext.org
http://www.geoext.org/cgi-bin/mailman/listinfo/users

Reply via email to