GpsPicker – formulářový prvek pro výběr GPS
- Vojtěch Dobeš
- Gold Partner | 1316
Addon, Github, vojtech-dobes/nette-forms-gpspicker (Composer)
- využívá Google Maps API v3
- avšak umožňuje mapová data stahovat i z Open Street Maps (vyhnutí se limitu u Googlu)
- negeneruje žádný javascript
- podporuje klientskou validaci (ne pro všechna pravidla)
- lze jej manuálně renderovat
{control coords}
- registrace jako
CompilerExtension
- možnost manuálně renderovat jednotlivá dílčí políčka pro nonJS/offline
- hledání v mapě podle adresy
use VojtechDobes\NetteForms\GpsPicker as Gps;
$brno = array(
'lat' => 40.995141,
'lng' => 86.572266,
);
$form->addGpsPicker('coords', 'Coordinates:', array(
'type' => Gps::TYPE_SATELLITE,
'zoom' => 1,
'size' => array(
'x' => '100%',
'y' => 350, // v pixelech
),
))
->setDefaultValue($brno)
->addRule(Gps::MAX_DISTANCE_FROM, 'Lokaci lze zvolit nejdál 20km od Brna.', array(20000, $brno));
Editoval vojtech.dobes (20. 11. 2012 1:19)
- Vojtěch Dobeš
- Gold Partner | 1316
Přidána možnost manuálně renderovat jednotlivá dílčí políčka pro nonJS/offline stav aplikace.
A také je možné celý doplněk zaregistrovat skrze
CompilerExtension
.
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('gpspicker', new VojtechDobes\NetteForms\GpsPickerExtension);
};
- Tomáš Votruba
- Moderator | 1114
Pěkné, doplnil bych ještě link na specifický js (http://maps.google.com/maps/api/js?…), demo a možnost určit polohu pouhým kliknutím, ne přetahováním z původní lokace (tak mi to funguje).
Ještě by mne zajímalo, jak moc se to liší od GMapFormControl, který již dělá to, co navhruji. Abych věděl, proč vybrat ten, či onen :)
Editoval Schmutzka (28. 8. 2012 9:52)
- Vojtěch Dobeš
- Gold Partner | 1316
To kliknutí ti přijde intuitivní? Já bych to nějak „přirozeně“ dělal poklepáním, ale to zase defaultně zoomuje. Každopádně podporu pro single-click můžu přidat.
Demo zatím příliš není v mých možnostech… ale pokud by někdo chtěl hostovat, poskytnu sandbox. Link na API doplním.
Liší se to kupříkladu tím, že to negeneruje zbytečný JS v šabloně,
lze to manuálně renderovat (což GMapFormControl nejde, protože v
getControl()
vrací šablonu. V issues mám rozepsané další
plány, hlavně podporu výběru oblasti (portuju to z mého
staršího kódu).
- Vojtěch Dobeš
- Gold Partner | 1316
Přidána podpora pro nastavení lokace jedním klepnutím do mapy (při dvojkliku se provede defaultní zoom a lokace se nenastaví). Upřímně by mě v tomto zajímal širší průzkum, co je očekávatelnejší a co je pohodlnější.
- Tomáš Votruba
- Moderator | 1114
Super, nastavitelnost ideální – čteš mi myšlenky :). Brzy to použiju hlouběji, tak doplním poznatky. JS validace skvělý plus. To by mohl být pěkný standard u všech doplňků.
Nabídku na sandbox jsem ti poslal.
- mkoubik
- Člen | 728
Přidej do bootstrap.php
:
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('gps', new \VojtechDobes\NetteForms\GpsPickerExtension);
};
viz dokumentace
- Vojtěch Dobeš
- Gold Partner | 1316
And it's there…
Přidána podpora pro hledání podle adresy. S možností vypnutí a s podporou manuálního renderování (při potřebě custom umístění vyhledávacího políčka).
- motorcb
- Člen | 552
Paráda, super doplnek. Funguje :)
Mám pár dotazu :-)
$form->addGpsPicker('coords')
->addRule(Gps::MIN_LAT, 'Minimal latitude must be %f.', 20)
->addRule(Gps::MIN_LNG, 'Minimal longitude must be %f.', 40)
->addRule(Gps::MAX_LAT, 'Maximum latitude must be %f.', 20)
->addRule(Gps::MAX_LNG, 'Maximum longitude must be %f.', 40)
->addRule(Gps::MIN_DISTANCE_FROM, 'Minimal distance from Prague must be %i m.', array(15000, array(
'lat' => 50.083,
'lng' => 14.423,
)));
- Jak nastavím velikost mapy? Ve starší verzi mi nefungovalo nastaveni v procentech.
- Nefunguji mi validacni pravidla… Kliknu kdekoliv na svete a bod se tam presune… Zadne upozorneni…
- Je mozne zobrazit na mape vice bodu?
- Je mozne pridat odesilaci tlacitko a odeslat souradnice bodu?
Diky za odpoved
- Vojtěch Dobeš
- Gold Partner | 1316
1)
$form->addGpsPicker('name', 'Label', array(
'size' => array(
'x' => '80%',
'y' => '80%',
),
));
- Validační pravidla tak chytrá nejsou (ačkoliv je to v plánu). Fungují jako ostatní validační pravidla, tudíž vyskočí alert s hláškou v okamžiku odeslání formuláře.
- Na mapě nelze zobrazit více bodů, nějaký
addMultiGpsPicker()
zatím neexistuje. - Nerozumím. Přesně o tom ten prvek je, ne? Samozřejmě aby se formulář
dal odeslat, je třeba do něj přidat
submit
:).
- motorcb
- Člen | 552
vojtech.dobes:
Diky za vysvetleni :)
- procenta mi nefunguji :( Vubec se nezobrazi mapa :(
$form->addGpsPicker('coords', 'Label', array(
'size' => array(
'x' => '80%',
'y' => '80%',
),
)
)
->addRule(Gps::MIN_LAT, 'Minimal latitude must be %f.', 20)
->addRule(Gps::MIN_LNG, 'Minimal longitude must be %f.', 1)
->addRule(Gps::MAX_LAT, 'Maximum latitude must be %f.', 60)
->addRule(Gps::MAX_LNG, 'Maximum longitude must be %f.', 40)
->addRule(Gps::MIN_DISTANCE_FROM, 'Minimal distance from Prague must be %i m.', array(15000, array(
'lat' => 50.083,
'lng' => 14.423,
)));
- Dalsi problem vidim v pravidle:
->addRule(Gps::MIN_DISTANCE_FROM, 'Minimal distance from Prague must be %i m.', array(15000, array(
'lat' => 50.083,
'lng' => 14.423,
)));
Ktere mi zobrazuje hlasku:
Minimal distance from Prague must be m.
Kde neni doplnena vzdalenost v metrech…
addMultiGpsPicker()
by byl perfektní doplněk :)- Nedari se mi ziskat hodnoty bodu. Formular odeslu( hodnoty jsou odeslany ):
$aValues = $form->getValues(TRUE);
print_r( $aValues );
Avsak nevim jak si pro ne sahnout:
echo $aValues->lat;
Nefunguje a vraci: Trying to get property of non-object
- Vojtěch Dobeš
- Gold Partner | 1316
- Ujistil bych se, že obalující prvek má nějakou šířku nastavenou. Mně to funguje.
- Moje chyba, má tam být
%d
. Opravím dokumentaci. - Je třeba přistupovat jako klasicky nejprve k prvku :). Takže
$form->values->coords->lat
etc. A btw, pokud chceš k hodnotám formuláře přistupovat objektově (->
), tak nepředávej metoděgetValues
toTRUE
.
Editoval vojtech.dobes (30. 8. 2012 10:23)
- Vojtěch Dobeš
- Gold Partner | 1316
@motorcb Ad addMultiGpsPicker()
, nebyl
by to takový problém implementovat, ale spíš mi jde o použitelnost. Nevím
jak pohodlné a hlavně pochopitelné by pro uživatele bylo nastavovat
v jedné mapce více frček… už hýbání s jednou za účelem nastavení
lokace bývá pro uživatele někdy jako z jiné planety :). Takže bych
spíše situaci řešil prostým přidáním více gpspickerů do formuláře.
V případě dynamického počtu pomocí addDynamic()
z Hosiplanova Kdyby
.
- Vojtěch Dobeš
- Gold Partner | 1316
@talpa tomu úplně nerozumím, co máš na mysli?
Tyto konstanty v GpsPicker.php
jsou.
- bazo
- Člen | 620
zdravim,
pokusam sa to rozbehnut, fixol som tam jednu chybicku v php, ale mam stale nejake javascriptove chyby. jedna na riadku 55, reportoval som na githube.
ked zakomentujem ten riadok tak na mna vyskoci:
TypeError: c is undefined
[Break On This Error]
…e=„forceredraw“,Ve=„staticmaploaded“,We=„panby“,Xe=„panto“,Ye=„insert“,Ze="remov…
na riadku 18 v main.js.
neviete kde moze byt chyba? v appke je pouzity twitter bootstrap, tak sa aj mapa nejak cudne zobrazuje
Editoval bazo (30. 9. 2012 10:54)
- Vojtěch Dobeš
- Gold Partner | 1316
Vydána verze 1.0.2, opravena chybička v manuálním renderování. Díky @bazo za report a opravu.
- David Ďurika
- Člen | 328
zdravim, moje mapa vyzera takto http://grab.by/gCfo
cela je nejaka cudne a na boku ten panel na zoom je uplne cudny, on tam sice je
ale ledva ho vydiet a je rozhodeny…
neviete ako to fixnut ?
- Vojtěch Dobeš
- Gold Partner | 1316
@achtan je to bug způsobený Twitter Bootstrapem. Přidej si do CSS tento kousek:
[data-nette-gpspicker] img {
max-width: none;
}
Viz https://github.com/…ker/issues/1. Časem chci do pickeru přidat, aby tenhle snippet CSSka aplikoval automaticky.
- Vojtěch Dobeš
- Gold Partner | 1316
Vydána verze 1.0.3, která přináší jednu feature:
- pokud je povoleno vyhledávání podle adresy a nějaká adresa je zadána,
přenáší se též na server a je přístupná jako property
address
– funkci je třeba povolit explicitním zavolánímenableSearch(TRUE)
(s tímTRUE
)
$form->addGpsPicker('coords')
->enableSearch(TRUE);
$values = $form->values;
$values->coords->address;
- Vojtěch Dobeš
- Gold Partner | 1316
Vydána verze 1.0.4. Doplňuje Javascriptové API pro snadnou manipulaci s pickery, provázání s Ajaxem atd.:
- dokumentace na Githubu
- přidán jQuery plugin
$.fn.gpspicker()
- metody
load()
ainitialize()
- konkrétní GpsPicker lze získat voláním
$el.data('gpspicker)
Editoval vojtech.dobes (14. 10. 2012 20:33)
- Vojtěch Dobeš
- Gold Partner | 1316
Vydána verze 1.0.5.
- k dispozici je demo
- zrušena závislost na Google mapách – doplněk stále využívá stejné Javascriptové knihovny, ale mapová data lze alternativně stahovat z projektu Open Street Maps (lze se tak vyhnout možnému vyčerpání limitu požadavků u Google map)
$form->addGpsPicker('coords', 'Coordinates:')
->disableGoogle();
- Vojtěch Dobeš
- Gold Partner | 1316
@Hafran Aktuálně lze zapnout, aby se na server posílala adresa zadaná do vyhledávacího políčka. Ostatní údaje plánuju podporovat též, ale chci to spojit i se serverovým fallbackem, a ještě jsem nevymyslel přesnou koncepci. De facto na to mám knihovničku, ale nevím, jestli ji mám tahat jako závislost.
- Vojtěch Dobeš
- Gold Partner | 1316
@mirdič Díky :). Ale není to pravda, prázdné návěstí rozšíření není do konfigurace třeba psát.
- Vojtěch Dobeš
- Gold Partner | 1316
@mirdič jakože pokud tu sekci zase smažeš, tak ti
to přestane fungovat a hlásí neznámou metodu addGpsPicker
?
- Vojtěch Dobeš
- Gold Partner | 1316
Zdravíčko, je to snadné:
$form->addGpsPicker('coords');
$form->setDefaults(array(
'coords' => array(
'lat' => 50.103245,
'lng' => 14.474691,
),
));
Doplním to i do dokumentace.
- Vojtěch Dobeš
- Gold Partner | 1316
Vydána verze 1.0.6.
- opraven bug způsobující nemožnost odeslat formulář v prohlížeči
Chrome (inputy s typem
number
musí mít atributstep="any"
, pokud má do nich být možné zapsat float)
- raketoplan2005
- Člen | 147
@vojtech.dobes: Ahoj, verze 1.0.8 vyžaduje v composeru Nette 2.0, plánuješ prosím release i pro 2.1? Děkuji
Edit:
Když si stáhnu aktuální verzi, upravím si
GpsPickerExtension.php
tak aby používal místo
Nette\Utils\PhpGenerator\ClassType
jen
Nette\PhpGenerator\ClassType
tak se mi doplněk rozběhne, mapa
vykreslí, ale při zpracování formu vrací jen nějaké defaultní GPS
souřadnice.
Stejně tak v těch souborech nikde nemůžu najít konstantu „DRIVER_SEZNAM“ která se používá v demu. Možná púořád stahuji špatnou verzi?
Díky
Editoval raketoplan2005 (27. 1. 2014 23:05)
- raketoplan2005
- Člen | 147
Listenery na onclick a up v javascriptu mi při klikání mapou vrací v lat a lng správné GPS souřadnice (zkoušeno alertem). Vyhledávání přes search funguje. Data se však z formu přdají jen ta výchozí (50.083,14.423).
- Vojtěch Dobeš
- Gold Partner | 1316
@raketoplan2005 Seznam mapy a další featury v demu jsem popravdě řečeno ještě nezveřejnil :). Podporu pro Nette 2.1 připravím co nejdřív.
- raketoplan2005
- Člen | 147
@vojtech.dobes: Díky moc, snažil jsem se to rozjet sám, ale ukázalo se že na to asi nemám :-)
- Maxell92
- Člen | 38
Ahoj, vyřešil prosím někdo ten problém se špatným zobrazením mapy, jak reportoval achtan?
Zkoušel jsem i postup zmíněný na konci https://github.com/…ker/issues/1, ale nefunguje mi to, stále musím zresizovat okno nebo otevřít FireBug, aby se mapa načetla celá :(
- Vojtěch Dobeš
- Gold Partner | 1316
Vydána verze 1.1.0!
- podpora pro Nette 2.1
- podpora pro Nokia mapy a Seznam mapy
- podpora pro různé typy map (záleží na zvoleném poskytovateli map, viz dokumentace v Readme)
- lze ponechat zobrazené inputy pro manuální zadání souřadnic
Editoval vojtech.dobes (3. 2. 2014 12:48)
- raketoplan2005
- Člen | 147
Díky moc za update. Je už trochu pozdě tak to může být tím, je ale možné že mi i nová verze vrací stále:
Nette\ArrayHash
coords => VojtechDobes\NetteForms\GpsPoint
lat private => 50.083
lng private => 14.423
address private => NULL
Děkuji