Nette Framework – Gmaps problem
- Takeshi
- Člen | 596
Neviete mi niekto poradit ako dam Gmaps do nette?
1– stiahol som si potrebne vecico boli na stranke k tomu dal to do
libs
2– do Bootsrap som si pridal na zaciatok riadok
<?php
Nette\Forms\Container::extensionMethod('\Nette\Forms\Container::addGmap', array('GmapFormControl', 'addGmapFormControl'));
?>
, tak ako bolo pisane na stranke, ale stale mi nieco chyba … any idea? Dik.
- frosty22
- Člen | 373
No určitě by to chtělo upřesnit tvůj problém – co ti chybí?
Tohle je tedy formulářový prvek, kterým lze přes GMap nabrat souřadnice a přenést je do formuláře, čili jsi rozšířil objekt Forms\Container o metodu addGmap ..
Tu když nyní zavoláš nad formulářem:
<?php
$form = new Form($this, $name);
$form->addGmap('mapa', 'Mapa', array(
'width' => 500,
'height' => 250,
'center' => array(49.124936, 18.33017),
'zoom' => 14,
))
...
?>
Tak co se stane? Vyhodí ti to chybu? nebo se ti nevykresluje ta mapa ve formuláři? Pokud se nevykresluje, tak máš přidané JS závislosti, jak tam uvádí tj. jQuery a knihovnu Google Maps API V3
- Takeshi
- Člen | 596
Takze presnejsie:
pise mi ze nemoze najst triedu Nette\Gmaps… teda s najvacsou pravdepodobnostou by som potreboval vediet ake dalsie subory si mam stiahnut, aby mi gmaps fungoval a velmi dolezite … vediet kam ich dat …
konkretne mi vyhadzuje chybu ‚Class 'Nette\Gmaps\Gmaps‘ not found'
v mojom presenteri mam nasledovne:
<?php
use Nette\Gmaps\Gmaps;
class MapaPresenter extends BasePresenter
{
public function renderDefault()
{
$this->template->anyVariable = 'any value';
}
public function createComponent($name)
{
switch($name){
case 'Gmaps':
$Gmaps = new Gmaps($this, $name);
$Gmaps->addMarker('Brno','Brno on hover','More informations about Brno');
return $Gmaps;
break;
}
}
}
rad by som to doplnil ...
ked zmazem use Nette\Gmaps\Gmaps
tak mi zacne hlasit chybu
<?php
Argument 1 passed to Gmaps::__construct() must be an instance of Nette\IComponentContainer, instance of MapaPresenter given, called in C:\Program Files (x86)\EasyPHP-12.1\www\JPF web-page\app\presenters\MapaPresenter.php on line 16 and defined
?>
?>
Editoval Takeshi (1. 9. 2013 8:32)
- Myiyk
- Člen | 321
Když si přečteš co píše chyba, že dáváš nesprávný první parametr
v konstruktoru Gmaps.
Dáváš tomu Presenter, ale ono to chce něco s interface
Nette\IComponentContainer.
Ta třída je zastaralá, používá interface, které už neexistuje (není
to v API).
Respektive to interface bylo rozděleno na dva
Takže se mrkni, odkud jsi tu třídu vzal, jak to je s aktuálností.
A můžeš sem hodit odkaz na ni.
--edit–
IComponentContainer a IContainer jsou stejné, takže kdybys v konstruktoru
u prvního paramteru ve třídě Gmaps přepsal typ na IContainer, tak by to
mohlo fungovat.
Editoval Myiyk (1. 9. 2013 12:23)
- Vojtěch Dobeš
- Gold Partner | 1316
S pokorou doporučuju použít můj doplněk dělající to samé: nette-forms-gpspicker
.
Instalace se provádí takto.
- Takeshi
- Člen | 596
vojtech.dobes napsal(a):
S pokorou doporučuju použít můj doplněk dělající to samé:
nette-forms-gpspicker
. Instalace se provádí takto.
So … v prvom rade dik za obe rady. Skusil som teda tu tvoju verziu ‚vojtech.dobes‘, lenze neviem stale kde robim chybu a to som sa snazil robit vsetko podla navodu. Teda postupoval som presne takto: ==>
- Stiahol som si subor ‚nette-forms-gpspicker-1.0‘ a vlozil ho do libs/nette/…
- Ako script som si pridal nasledovne …
<?php
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=places&sensor=false"></script>
<script type="text/javascript" src="{$basePath}/libs/nette.gpsPicker.js"></script>
?>
3. Do bootstrap.php som pridal riadok … na miesto pod … configurator->createRobotLoader
<?php
$configurator->createRobotLoader()
->addDirectory(__DIR__)
->addDirectory(__DIR__ . '/../libs')
->register();
$configurator->onCompile[] = function ($configurator, $compiler) {
$compiler->addExtension('gpspicker', new VojtechDobes\NetteForms\GpsPickerExtension);
};
?>
4. Potrebny presenter ma nasledovny obsah
<?php
<?php
use Nette\Application\UI\Form;
class MapaPresenter extends BasePresenter
{
public function renderDefault()
{
$this->template->anyVariable = 'any value';
$form = new Form;
$form->addGpsPicker('coords', 'Coordinates:');
$form->addGpsPicker('coords', 'Coordinates:', array(
'type' => VojtechDobes\NetteForms\GpsPicker::TYPE_SATELLITE,
'zoom' => 1, // something like whole planet I guess
'size' => array(
'x' => 411,
'y' => 376,
),
));
}
}
?>
5. a do www/js som pridal script ‚nette.gpsPicker.js‘
… kedze mi to nejde, stopro robim niekde chybu, len zistit kde … (do sablony som zatial nic nedaval, kedze mi nejde ani samoty presenter
… diky moc za opravu!
BTW … ukazuje mi chybu …
<?php
Call to undefined method Nette\Application\UI\Form::addGpsPicker().
?>
Editoval Takeshi (1. 9. 2013 18:15)
- Šaman
- Člen | 2666
Podle mého v tom návodu na instalaci chybí registrace nového prvku formuláře, tedt to, co je jako bod 7 v tomto doplňku.
- Takeshi
- Člen | 596
Šaman napsal(a):
Podle mého v tom návodu na instalaci chybí registrace nového prvku formuláře, tedt to, co je jako bod 7 v tomto doplňku.
Ok a teda nemoze mi niekto poslat funkcny mini projekt, kde bude gmaps? staci nacitanie mapy … alebo ja uz neviem … skusal som gmaps na rozne sposoby, ale nic mi neslo … a nikde sa neviem dopatrat chybe … alebo doplnit informacie …
- Šaman
- Člen | 2666
Zkus počkat na Vojtu, ten ti určitě poradí. Zatím ti jen od boku můžu poradit zkusit přidat do onoho formuláře tuto metodu:
<?php
/**
* Přidá možnost vytvářet input GpsPicker
*
* @param string control name
* @param string label
* @param array options
* @return GpsPicker
*/
public function addGpsPicker($name, $label = NULL, $options = NULL)
{
$control = new GpsPicker($label, $options);
return $this[$name] = $control;
}
?>
Samozřejmě si doplň namespace
use VojtechDobes\NetteForms\GpsPicker;
Tuto metodu přidej do nějakého BaseFormu, pokud takový používáš, nebo pokud formuláře vytváříš dědědím, tak přímo do třídy tvého formuláře.
Editoval Šaman (1. 9. 2013 20:04)
- David Matějka
- Moderator | 6445
@Šaman: ta registrace se deje v GpsPositionPicker::register(), ktery se vola pri inicializaci containeru (viz extension).
@Takeshi: zkusil si smazat cache?
EDIT: zkusil jsem to nainstalovat a jede to OK, takze chyba nebude v tom doplnku
Editoval matej21 (1. 9. 2013 20:18)
- Takeshi
- Člen | 596
matej21 napsal(a):
@Šaman: ta registrace se deje v GpsPositionPicker::register(), ktery se vola pri inicializaci containeru (viz extension).
@Takeshi: zkusil si smazat cache?
EDIT: zkusil jsem to nainstalovat a jede to OK, takze chyba nebude v tom doplnku
Ok Matej … poprosimta povedz mi Presne, co si kde dal … ktore subory kam atd … dik, lebo skusam skusam a furt nic … dik
… a teda aj co si kde napisal .. do presenteru …
Editoval Takeshi (1. 9. 2013 20:24)
- David Matějka
- Moderator | 6445
jen jsem to testoval, takze jsem to nahazel, tak, aby to proste fungovalo – ty soubory, aby na ne videl robot loader a do presenteru nic dulezityho, jen jsem zkusil pridat ten prvek.
pokud ti ale nerve nette uz ve chvili, kdy se snazi zaregistrovat extension, tak to mas asi na spravnem miste. koukni se do temp/cache/_Nette.Configurator/…php (do nejnovejsiho, jestli jich je tam vic). v te tride si najdi metodu initialize a koukni, jestli je tam tenhle radek kodu.
jo a co mas za verzi nette?
Editoval matej21 (1. 9. 2013 20:30)
- Takeshi
- Člen | 596
matej21 napsal(a):
V subore 'temp/cache/_Nette.Configurator/…php ' mam nasledovne
<?php
public function initialize()
{
date_default_timezone_set('Europe/Prague');
Nette\Caching\Storages\FileStorage::$useDirectories = TRUE;
$this->getService("session")->exists() && $this->getService("session")->start();
header('X-Frame-Options: SAMEORIGIN');
}
?>
a nette mam to najnovsie … tusim ze to niekedy zo zaciatku augusta co vyslo
… a ked ti to islo, neda sa ten projekt poslat na mail?
Editoval Takeshi (1. 9. 2013 20:37)
- David Matějka
- Moderator | 6445
a zkousel jsi smazat tu cache, jak jsem psal v #10?
jestli jo a porad to tam neni, tak je neco divny :) kdyztak muzes ten radek
hodit primo do bootstrapu
VojtechDobes\NetteForms\GpsPositionPicker::register();
btw, stav se na jabber chat, tam to muzem vyresit rychlejc :)
- Takeshi
- Člen | 596
Dakujem vsetkym za pomoc … asi som privela skusal a uz sa mi to aj v kode aj v inych veciach pomotalo. Teraz som si povedal, ze si vytvorim uplne novy projekt … len na toto a podaval som tam podla navodu vsetko ako ma byt … teraz to uz IDE.
Funguje … ale aj tak by som sa spytal … na uz iba doplnujucu informaciu
…
… podla kodu, co som dal vyssie , mi zobrazi len Nadpis Coordinates + dva
textBoxy pre X a Y … ako ale zobrazim samotnu len samotnu mapu a dam jej len
nejake suradnice? Povedzme ze na tej mape chcem mat lokalizovanu Bansku Bystricu
… diky moc
Presenter:
<?php
public function renderDefault()
{
$form = new Form;
$form->addGpsPicker('coords', 'Coordinates:', array(
'type' => VojtechDobes\NetteForms\GpsPicker::TYPE_SATELLITE,
'zoom' => 1, // something like whole planet I guess
'size' => array(
'x' => 411,
'y' => 376,
),
));
$this->template->form = $form;
}
?>
Sablona default.latte
<?php
{$form}
?>
A zobrazuje sa mi to nasledovne … skusobna stranka http://www.trajan.php5.sk/www/
Editoval Takeshi (1. 9. 2013 21:12)
- Vojtěch Dobeš
- Gold Partner | 1316
Takeshi Chápu to dobře, že už ti to jede, jo? Good :).
Ad samotná mapa s pár frčkama – nejlepší je nastudovat si Google Maps API pro Javascript – není to vůbec těžké! Pak můžeš dělat jakékoliv triky… určitě bych pro takový účel nepoužíval GpsPicker, stejně jako pro výpis informací nepoužiješ formulář.
- Šaman
- Člen | 2666
Takeshi napsal(a):
Funguje … ale aj tak by som sa spytal … na uz iba doplnujucu informaciu …
… podla kodu, co som dal vyssie , mi zobrazi len Nadpis Coordinates + dva textBoxy pre X a Y
Takhle se to chová, pokud máš zakázaný javascript. Zkontroluj, že máš správně přilinkované scripty a že je más v prohlížeči povolené. (Bez scriptů se mapa nezobrazí, tak máš aspoň možnost vyplnit ty souřadnice.)
Editoval Šaman (1. 9. 2013 21:16)
- Takeshi
- Člen | 596
vojtech.dobes napsal(a):
:-) Ja sa tu trapim, aby som dal mapu google do nette, ty mi poradis tvoju verziu, a teraz ked mi to po dlhom dlhom case funguje mi napises, ze by si ju ani ty nepouzil? Do sa mi zda byt usmevne :-D
… aby si ma spravne pochopil … nestazujem sa, len mi to pride dost vtipne … OK teda … skusim teda tu verziu pre JavaScript … BTW … kukni si koment nad tebou … uvidis ako som co napisal a ako mi to zobrazuje … dkiky zatial ;-)
- Šaman
- Člen | 2666
Myslím, že jste se s Vojtou nepochopili. On si to přečetl ještě
dřív, než jsi poslal ukázku toho nefunkčního pickeru. A snaží se ti
vysvětlit, že tohle je PICKER, tedy formulářový prvek pro nějaký vstup od
uživatele. A on to asi pochopil tak, že chceš SAMOTNOU MAPU, na což tohle
není dělané. A že to by řešil jinak, než formulářovým prvkem.
Jinak tenhle doplněk je povedený a teď jsem ho viděl po delší době a
pěkně se mu rozšířily možnosti (třeba jiné zdroje, než GoogleMaps), tak
věř tomu, že se o něj Vojta stará a rozšiřuje ho podle potřeb.
Editoval Šaman (1. 9. 2013 21:28)
- Takeshi
- Člen | 596
Tak mi funguje oboje teda. Akurat mam jednu pripomienku … neviem od kial sa beru tie mapy, lebo ked priblizim mapu na urcitu vzdialenost, tak mi pise, ze snimky daneho miesta nie su k dispozicii …
a ked si najdem dane miesto na origos google mape
… tak mi to priblizi … teda v tom meste su aj 3D objekty …
Editoval Takeshi (1. 9. 2013 21:55)
- Vojtěch Dobeš
- Gold Partner | 1316
Je dost možné, že Google nabízí různé zdroje pro svou vlastní aplikaci a pro aplikace, které jen využívají jeho API. Nabízejí vodu, ale doma pijí víno :).
- Takeshi
- Člen | 596
vojtech.dobes napsal(a):
Je dost možné, že Google nabízí různé zdroje pro svou vlastní aplikaci a pro aplikace, které jen využívají jeho API. Nabízejí vodu, ale doma pijí víno :).
:-D To mas asi pravdu … aspon nieco … ale nevies, ci k tej vode mozem dostat funkciu, ktora mi oznaci miesto, ktore si zadam pomocou suradnic? … hned by lepsie chutia ;-)
- Takeshi
- Člen | 596
vojtech.dobes napsal(a):
Nechápu, jak to přesně myslíš, jakou funkci?
Ospravedlnujem sa … uz sa mi to pletie … myslim dopre … napisem inak … proste prikaz, ktory ti miesto/bod, ktory si si zvolil na zaklade suradnic, oznaci nejako … povedzme panakom, trojuholnikom, krizikom … proste hocijako ....... BTW tie 3D zobrazenia funguju ! :-) … musis ale presunut panaka na mapu a nie zoomovat az na koniec (na original mapach to funguje aj s tym zoomovanim) … mozes skusit na docasnej stranke http://www.trajan.php5.sk/www/
Editoval Takeshi (1. 9. 2013 22:21)
- Takeshi
- Člen | 596
vyriesene pomocou kodu …
<?php
var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
var image = 'http://localhost/JPF web-page/www/images/gmaps-pointer.png';
var myLatLng = new google.maps.LatLng(48.776258, 18.608347);
var beachMarker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image
});
?>