Nette Framework – Gmaps problem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Takeshi
Člen | 596
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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: ==>

  1. Stiahol som si subor ‚nette-forms-gpspicker-1.0‘ a vlozil ho do libs/nette/…
  2. 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
+
0
-

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
+
0
-

Š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
+
0
-

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
+
0
-

@Š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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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ář.

Základy a Frčky

Šaman
Člen | 2666
+
0
-

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
+
0
-

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 ;-)

Takeshi
Člen | 596
+
0
-

Dakujem … zase spravne … mal som zle nalinkovany JavaScript … nie si GURU pre nic za nic ;-)

Šaman
Člen | 2666
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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 ;-)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Nechápu, jak to přesně myslíš, jakou funkci?

Takeshi
Člen | 596
+
0
-

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
+
0
-

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
  });
?>