Komponenta pro GoogleMap API
- besir
- Člen | 170
Ahoj,
řešil jsem ted situaci kdy jsem na webu v různých obměnách potřeboval
googleMap. Napadlo mě, žebych pro to udělal nějakou sofistikovanou
komponentu. Jen si chci předem ujasnit co vše a jak by to mohlo umět.
Přemýšlím od základním zobrazení jednoho bodu a více bodů.
Je pár bodů u kterých si ovšem nejsem jist s best way.
Např.
- Je samozřejmé že potřebuju JS, jenže vykreslovat JS v komponentě není zrovna cool a hezké řešení. Tím pádem by to chtělo posílat někam do hlavičky a ideálně do bloku head, ale co když ho někdo nebude používat? Jsem schopen to zjistit v komponentě? Pak by se měl vygenerovaný soubor nalinkovat v místě komponenty.
2)
Má se konfigurace jako třeba API key tahat přímo z konfigu, nebo předávat
v parametrech komponenty a obstarávat tak presenterem. (Podle mě
to druhé)
- Co vše by v ideálním případě mělo být konfigurovatelné? Mám dělat konfiguraci pro jednotlivé body pomocí Associativního pole nšco ve stylu:
$markers = array(
‚icon‘ ⇒ ‚default‘,
‚lat‘ ⇒ ‚12.8787‘,
‚lng‘ ⇒ ‚26.86567‘,
‚dragable‘ ⇒ true
);
Nebude to pak moc zbytečně robustní, ošetřovat všechny stavy atd.
…)
Pojďte o tom udělat brainstorming. Myslím si, že takovouto věc by mohlo dost lidí využít.
Díky, uvítám podporu :-)
- OK3
- Člen | 91
Mně to tedy přijde skoro zbytečné z toho dělat Nette komponentu. Je to spíš na nějakou JS komponentu nebo jQ widget – většina potřebného kódu bude stejně na klientu a v PHP ho budeš jen duplikovat. Navíc, pokud to správně chápu, chceš pomocí Nette generovat JS? To mi nepřijde vůbec hezké. Já bych to napsal čistě v JS a jediný, co by tuhle komponentu zajímalo by byla URL, ze které si načte JSON s daty, které má zobrazit.
Ale nechci tě od toho odrazovat, píšu svůj názor :)
- Vojtěch Dobeš
- Gold Partner | 1316
Kašli na komunitu, udělej to podle svého nejlepšího vědomí a svědomí :).
Ad 1) to bych moc neřešil. Určitě bych žádný Javascript negeneroval,
ale napsal bych unobtrusive skript, který by si uživatel prostě musel ručně
nalinkovat. Brzy už se možná objeví řešení, jak tohle přilinkování
zautomatizovat v libovolném Nette addonu (vedou se nějaké diskuse), takže
řešit to specificky pro tvoji komponentu, to by mohla být zbytečná
práce.
Taky by se skripty měly linkovat spíš před koncem
</body>
, aby nezdržovaly načítání stránky.
- besir
- Člen | 170
Co se týká toho generování:
Když chci vykreslit více bodů, tak musím sestavit JS array s objekty
Markerů (bodů na mapě). No a jak to udělat jinak aby to nemuselo strašit
v kodu třeba při každé smyčce vykreslení objektu. Proto mě napadlo ten
JS vygenerovat. Samozřejmě, mohu to vygenerovat mimo a do toho kodu pak jen
předat ono pole, ale pořád se o to budu muset nějak postarat. A do
výslednýho outputu se to dostat musí. Takže pro moje oči je to zatím
stále jediná možnost jak to udělat co možná nejlépe :-)
- Vojtěch Dobeš
- Gold Partner | 1316
Nejvhodnější způsob je využít datové atributy
(data-something=" ... "
), do kterých můžeš narvat cokoli,
třeba ten json. A ten si pak v obslužném skriptu vyzvedneš pomocí
$('#map').data('something');
.
- Vojtěch Dobeš
- Gold Partner | 1316
No tak myslel jsem, že ten datový atribut by samozřejmě generovala ta tvoje komponenta. Asi máme trochu jiné představy o výsledku :). Proto říkám, neraď se s komunitou, ale tvoř :).
- vvoody
- Člen | 910
besir napsal(a):
..kam by se sestavilo to pole s daty…
Stále si nie som istý ako to myslíš. Z toho čo píšeš mi vychádza, že nevieš o existencii funkcie json_encode ktorá preformátuje akékoľvek php pole do JS objektu/pola a vdaka Context-Aware Escaping tu funkciu ani volať nemusis, v šablóne to za teba spraví latte.
- Aearsis
- Člen | 57
Něco takového jsem si udělal. Unobtrusive to celý udělat nejde, Nette komponentový model se docela osvědčil. Mapa je v podstatě kontejner, do který si přidávám další komponenty – body, trasy. Všechno je vykreslitelné, a komponenty „vykreslují“ javascript – není to sice pěkné, ale může to umět všechno. Duplikaci kódu se nevyhneš – buď budeš PHP přepisovat na javascript, a nebo budeš mít v tom javascriptu spoustu ošetřování různejch data-* featur z HTML.
Já sem to měl ještě složitější v tom, že mapa musí být přepínací mezi google/seznam mapou, tím pádem mám ještě nějaké js rozhraní skrz které ovládám teprve API map. Pomysli i na tohle.
A ohledně sestavení pomocí json_encode
– nedokáže
zpracovat volání funkcí. Takže stejně pak budeš muset souřadnice
přeměnit do LatLng objektu atd. V případě map mi tedy nepřipadá
generování js nic tak strašnýho.
Plus to umožňuje snadno přidat například formulářovou komponentu pro zadání bodu – předá se jí instance mapy, ona si v ní sama vytvoří marker, a u klienta zařídí přenášení souřadnic do textovýho pole.