GMapFormControl
| Dátum verzie | 26.6.2011 |
|---|---|
| GitHub repozitár | https://github.com/JAM3SoN/GmapFormControl |
| Download | https://github.com/JAM3SoN/GmapFormControl/zipball/master |
| Demo | demo |
| Forum thread | http://forum.nette.org/cs/7824-gmapformcontrol-privetive-vyberatko-suradnic-bodu |
| Autor | Jakub Jarabica |
| Licence | MIT |
| Nette | 2.0 beta s namespaces |
Pre PHP 5.2 stačí z hlavičky GMapFormControl.php odkomentovať sekciu „use“
Čo to vie?
- používateľsky prívetivým spôsobom získať od používateľa súradnice bodu (napr. jeho polohy, miesta kde bol atď)
- vlastné validačné pravidlá pre zemepisnú šírku, dĺžku
- fallback na manuálne zadanie zem. šírky a dĺžky v prípade vypnutého Javascriptu
Požiadavky
- Komponenta vytvorená a testovaná na Nette 2.0 beta vo verzii pre PHP 5.3. Ľahko upraviteľná pre PHP 5.2 non-prefix.
Závislosti
- jQuery (testovaná verzia 1.4)
- Google Maps API V3 http://maps.google.com/maps/api/js?sensor=false (nevyžaduje kľúč ako V2)
Inštalácia
- nakopírovať obsah archívu do umiestnenia indexovateľného RobotLoader-om (zvyčajne libs)
- a) v bootstrap.php zavolať extension method
Nette\Forms\Container::extensionMethod('\Nette\Forms\Container::addGmap', array('GmapFormControl', 'addGmapFormControl'));
b) ak používaš vlastného spoločného predka všetkých formulárov(BaseForm), tak do neho pridať metódu
public function addGmap($name, $label, $options = NULL) {
return $this[$name] = new GMapFormControl($label, $options);
}
3. nezabudnuť splniť závislosti
Príklad použitia
protected function createComponentMapForm($name) {
$form = new Form($this, $name);
$form->addGmap('mapa', 'Mapa', array(
'width' => 500,
'height' => 250,
'center' => array(49.124936, 18.33017),
'zoom' => 14,
))
->setDefaultValue(array(
'latitude' => 49.398102864265695,
'longitude' => 18.706451738281203,
));
$form->addSubmit('ok', 'Send');
$form->onSuccess[] = function($form) {
dump($form->values);
die;
};
}
Validačné pravidlá:
Lambda funkcie fungujú len v PHP 5.3
// validacia zem. sirky
$form['mapa']->addRule(function($control) {
$latitude = $control->value['latitude'];
return is_array(Nette\Utils\Strings::match($latitude, '/([0-9.-]+).+?([0-9.-]+)/')) && $latitude >= -90 && $latitude <= 90;
}, 'Latitude must be valid!');
// validacia zem. dlzky
$form['mapa']->addRule(function($control) {
$longitude = $control->value['longitude'];
return is_array(Nette\Utils\Strings::match($longitude, '/([0-9.-]+).+?([0-9.-]+)/')) && $longitude >= -180 && $longitude <= 180;}, 'Longitude must be valid!');
Ostatné nastavenia
| zoom | číslo | počiatočný zoom mapy |
|---|---|---|
| width | číslo | šírka mapy |
| height | číslo | výška mapy |
| center | array(‚latitude‘ ⇒ {float}, ‚longitude‘ ⇒ {float}) | stredový bod mapy |
Vlastný template
Nakoľko komponenta vyžaduje sama o sebe dosť HTML a Javascriptu, všetko sa nachádza vo vlastnej šablóne. Komponenta disponuje metódou setTemplate. Predvolená šablóna template.latte obsahuje popis parametrov šablóny a aj bloky #map, #script ak nevyhovuje len časť skriptu(napríklad výsledný HTML výstup). Prepísanie je jednoduché:
definícia formulára:
$form['mapa']->setTemplate('custom');
custom.latte (nachádzajúci sa v priečinku s GmapFormControl.php)
{**
* Custom GMapFormControl template
*
* @param Nette\Web\Html $latitude latitude input
* @param Nette\Web\Html $longitude longitude input
* @param string $control_id unique identifier of current control
* @param array $marker central point of map
* @param array|FALSE $center current marker, may be empty
* @param array $options map options
*}
{extends 'template.latte'}
{block #map}<!-- Moj HTML kod -->{/block}
Metóda setTemplate má druhý nepovinný parameter $isPathFull = FALSE, ktorý umožňuje špecifikovať absolútnu cestu k šablóne.
