[Cartoweb-users] several shortcuts..
oliver.christen
oliver.christen at camptocamp.com
Thu Jan 26 13:03:29 EST 2006
Hi Valerio,
you cant do that directly in the location plugin, but it is quite easy to
extend that plugin to do what you want.
basically, you create a new plugin, lets call it MyProjectLocation
the template would look like this:
<?php
/**
* @package CorePlugins
* @version $Id: ClientMyProjectLocation.php,v 1.8 2005/02/23 11:52:43 Exp
$
*/
class ClientMyProjectLocation extends ClientLocation {
public function replacePlugin() {
return 'location';
}
// here redefine the function you need, most probably drawShortcuts()
/** * Draws shortcuts form * @return string */ protected
function drawShortcuts() { $this->smarty = new
Smarty_Plugin($this->getCartoclient(), $this); $shortcutValues =
array(-1); $shortcutLabels = array(''); $shortcuts =
$this->shortcuts; if (!is_array($shortcuts)) $shortcuts = array();
/* do what you want with the array containing the shortcuts, list spliting,
sorting, etc.... below is the original function code, allowing
to treat the shortcuts values and labels */ foreach ($shortcuts as
$key => $shortcut) { $shortcutValues[] = $key;
$shortcutLabels[] = I18n::gt($shortcut->label); }
/* now let say you cuted your shortcuts in 3 arrays (hence 3 for values and
3 for labels), you assign them to your template vis smarty */
/* below the original code */
$this->smarty->assign(array('shortcut_values' => $shortcutValues,
'shortcut_labels' => $shortcutLabels)); /* you would have to do
something like this */
$this->smarty->assign(array('shortcut_values_1' => $shortcutValues_1,
'shortcut_labels_1' => $shortcutLabels_1,
'shortcut_values_2' => $shortcutValues_2,
'shortcut_labels_2' => $shortcutLabels_2,
'shortcut_values_3' => $shortcutValues_3,
'shortcut_labels_3' => $shortcutLabels_3)); return
$this->smarty->fetch('shortcuts.tpl'); } /* you will also have to
redefine the function handleShortcuts, because only one input (select) can
have one id, so you need to tell the plugin to treat the value returned
by these inputs too */ protected function handleShortcuts($request,
$useDoit = true, $check =
false) { if (isset($this->getHttpValue($request, 'shortcut_id'))
{ $shortcut_id = isset($this->getHttpValue($request,
'shortcut_id'); } else if (isset($this->getHttpValue($request,
'shortcut_id1')){ $shortcut_id =
isset($this->getHttpValue($request, 'shortcut_id1'); } else if
(isset($this->getHttpValue($request, 'shortcut_id2')){
$shortcut_id = isset($this->getHttpValue($request,
ut_id2'); } else if (isset($this->getHttpValue($request,
'shortcut_id3')){ $shortcut_id =
isset($this->getHttpValue($request, 'shortcut_id3'); }
$shortcutDoit = $this->getHttpValue($request, 'shortcut_doit');
if (is_null($shortcut_id) || ($shortcutDoit != '1' && $useDoit))
{ return NULL; } if ($check) {
if (!$this->checkInt($shortcut_id, 'shortcut_id')) return
NULL; if (!array_key_exists($shortcut_id,
$this->shortcuts)) { $this->cartoclient->addMessage('Shortcut
ID not found'); return NULL; } }
$bboxRequest = new BboxLocationRequest(); $bboxRequest->bbox =
$this->shortcuts[$request['shortcut_id']]->bbox; $locationRequest =
new LocationRequest(); $locationRequest->locationType
= LocationRequest::LOC_REQ_BBOX;
$locationRequest->bboxLocationRequest = $bboxRequest; return
$locationRequest; }}?>
and in your shortcuts.tpl simply put the smarty variable $shortcut_values_1
$shortcut_labels_1 $shortcut_values_2 $shortcut_labels_2 $shortcut_values_3
$shortcut_labels_3 as needed
<select name="shortcut_id1" id="shortcut_id1"
onchange="javascript:document.carto_form.shortcut_doit.value=1;FormItemSelected();">
{html_options values=$shortcut_values_1 output=$shortcut_labels_1}
</select>
<select name="shortcut_id2" id="shortcut_id2"
onchange="javascript:document.carto_form.shortcut_doit.value=1;FormItemSelected();">
{html_options values=$shortcut_values_2 output=$shortcut_labels_2}
</select>
<select name="shortcut_id3" id="shortcut_id3"
onchange="javascript:document.carto_form.shortcut_doit.value=1;FormItemSelected();">
{html_options values=$shortcut_values_3 output=$shortcut_labels_3}
</select>
Finally, dont forget tp load your new plugin. In the file
client_conf/client.ini add it to the loadPlugins list
That should cover most of it.
All references are there:
http://www.cartoweb.org/doc_head/docbook/xhtml/dev.newplugin.html#dev.newplugin.adapting.extending
Regards,
Oliver Christen
Camptocamp SA
> Hi,
> is it possible to split shortcuts in two or more combo boxes (i.e. tows
> shortcuts and lakes shortcuts)?
> Do I have to modify php files or can I configure this in location.ini or
> similar?
>
>
> Thanks
>
> Valerio
> _______________________________________________
> Cartoweb-users mailing list
> Cartoweb-users at lists.maptools.org
> http://lists.maptools.org/mailman/listinfo/cartoweb-users
>
More information about the Cartoweb-users
mailing list