[Cartoweb-users] query tools with different icons
Valerio Noti
valerionoti at yahoo.it
Sun Feb 4 11:01:32 EST 2007
Oliver,
thank you for your reply.
I think this solution is too much complicated for me.
I can modify tables.tpl in order to open a certain php file instead of
display query results in the same map window.
My goal is to open a different php file (or the same with different
parameters) from tables.tpl depending on a previous choice.
I thought about a gif map and an hidden input form to retry in tables.tpl
but I haven't tried yet and maybe it's not possible.
What do you think about this? and is tables.tpl the right file to modify?
thanks
Valerio
----- Original Message -----
From: "Oliver Christen" <oliver.christen at camptocamp.com>
To: "Valerio Noti" <valerionoti at yahoo.it>;
<cartoweb-users at lists.maptools.org>
Sent: Friday, February 02, 2007 3:33 PM
Subject: Re: [Cartoweb-users] query tools with different icons
> Hi valerio
> this is certainly possible but also delicate.
>
> you will need to touch php client side and server side and also some
> javascript.
>
> concerning the tool itself:
>
> for the php, you will probably need to extend the query plugin and add new
> tools definition to the getTools() function.
>
> to help you a bit, new ToolDescription(self::TOOL_QUERY_BY_BBOX, true, 41)
> this will define a new tool, whose name will be defined by
> self::TOOL_QUERY_BY_BBOX (you can use a string like 'mynewquerytool' , the
> notation used here allow us to change the name without changing the code,
> but you dont need to use it).
> The name is important as it is the identifiant for that tool which will be
> used in the web interface and also in the javascript. The second parameter
> say if the tool has an icon or not. This is usually true. third is the
> weight, in other words, the place of the tool in the toolbar. There are
> other parameters (see client/ClientPlugin.php) but you probably dont need
> them.
>
> Now the javascript part. All tools action are handled by the dhtmlAPI.js,
> dhtmlFeatures.js and dhtmlInit.js.
> This is probably the less userfriendly part of cartoweb.
>
> What you need to do is, in a new javascript file, copy the existing
> properties and methodes of the existing query tool that meet the
> beahaviour you need (for exemple query_by_bbox).
>
> Since the behaviour is the same, you wont have to duplicate this,
> fortunately.
> You will have something like :
> Map.prototype.mynewquerytool = function(aDisplay) {
> this.selectionBox(aDisplay, 'Query.Perform');
> this.getDisplay(aDisplay).docObj.style.cursor = "help";
> };
>
> then include that javascript in your main template header, like the other
> javascript files.
>
> Thats only for "duplicating" a query tool.
>
> Now, for the database switch.... I will do some wild guess as I never had
> such problem before.
>
> If the database connection is set in the layers connection parameter, it
> means :
> either you have two layers and activate one or the other depending of the
> query tool selected,
> or you need to change the connection on-the-fly depending of the query
> tool selected.
>
> I must say i dont really see how to change the layer on which the query is
> done. Maybe with a filterPostRequest but I think the query plugin use the
> list of activated layers before the query, obtained from the layer plugin.
> And I wouldnt mess with that personally. Maybe someone else has a better
> idea...
>
> To change a layer parameter on-the-fly, you can do that on the server
> side, in the function handlepreDrawing with some use of mapOverlay plugin.
> This is done on the server side part of the query plugin, so you will need
> to extend this too.
> For that, first, enable the mapOverlay plugin in the server side
> yourproject.ini file (where the other plugins for server side are listed
> for activation)
>
> below is an exemple on how to change some layer properties:
>
> public function handlePreDrawing($request) {
> if (isset($this->selectid) && !empty($this->selectid)) {
> $layer = new LayerOverlay();
> $layer->name = "vue_recenter";
> $layer->data = "position FROM (SELECT * FROM vue_recenter WHERE
> filtre_id = ".$this->selectid.") as foo USING UNIQUE bien_id USING
> SRID=-1";
>
> $mapOverlay =
> $this->serverContext->getPluginManager()->mapOverlay;
> if ($mapOverlay == NULL) {
> throw new CartoserverException('Plugin MapOverlay must be
> activated!');
> }
> // update layer
> $mapOverlay->updateMap($layer);
>
> }
> }
>
> in this case we changed the DATA value from the layer vue_recenter, but
> you can probably do the same with the CONNECTION value.
> the important part is you need to pass some parameter from client side to
> server side to activate the change (in the "if" condition). So you need to
> modify a bit the buildRequest() function (client side) to pass that
> parameter (for exemple the name of the tool used) on the server side. on
> the server side, the paramter will be in $request, which directly is
> available in handlePreDrawing.
>
> This is certainly not easy but it is possible ;)
>
> Good luck
> Oliver
>
> ----- Original Message -----
> From: "Valerio Noti" <valerionoti at yahoo.it>
> To: <cartoweb-users at lists.maptools.org>
> Sent: Friday, February 02, 2007 10:37 AM
> Subject: [Cartoweb-users] query tools with different icons
>
>
>> Hello,
>> I'd like to duplicate a query tool in cartoweb interface in order to have
>> two buttons (different icons) with query functionality but with separate
>> tasks.
>> These separate tasks are not cartoweb-dependant (i.e. a different
>> database to connect).
>> So perhaps my problem it how to assign two different icons to the same
>> tool.
>>
>> Any help appreciated
>>
>> thanks in advance
>>
>> Valerio
>>
>> /*
>> Valerio Noti
>> valerionoti at yahoo.it
>> */
>> _______________________________________________
>> Cartoweb-users mailing list
>> Cartoweb-users at lists.maptools.org
>> http://lists.maptools.org/mailman/listinfo/cartoweb-users
>>
>
>
>
> --
> No virus found in this incoming message.
> Checked by AVG Free Edition.
> Version: 7.5.432 / Virus Database: 268.17.19/663 - Release Date: 01/02/07
> 14.28
>
>
More information about the Cartoweb-users
mailing list