Gmaps – problem nezobrazi absolutne nic

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

caute snazim sa pouzit gmaps na vlozenie mapy na stranku

v presenteri si vytvorim komponentu

<?php
public function createComponentMapa()
    {
	$mapa = new \Gmaps();
	$mapa ->addMarker('Brno', 'Brno');
	return $mapa;

    }

?>

a problem je vtom, ze sqa mi na stranke nezobrazi nic…(ani ziadna chybova hlaska…)
samozrejme v latte volam vytvorenie komponenty

{control mapa}

jiri.pudil
Nette Blogger | 1032
+
0
-

Pošli kód té komponenty.

cujan
Člen | 410
+
0
-

no ved hore je… inac robil som to podla videa na youtube…

Editoval cujan (18. 12. 2012 12:55)

jiri.pudil
Nette Blogger | 1032
+
0
-

Hore je továrnička. Já myslel kód té třídy Gmaps.

cujan
Člen | 410
+
0
-

aha ten som stiahol z githubu

<?php
<?php

/**
 * This file is part of the Gmaps.
 *
 * Copyright (c) 2012 Vaclav Bohac
 */

use Gmaps\Marker,
    Gmaps\Directions,
    Gmaps\Polygon;



/**
 * Gmaps makes creating Google Maps easy.
 *
 * @author     Vaclav Bohac
 *
 * @property   string $maptype
 */
class Gmaps extends Nette\ComponentModel\Container implements \ArrayAccess
{

    /** Type of map. */
    const TYPE_ROAD = 'ROADMAP',
        TYPE_SAT = 'SATELLITE',
        TYPE_HYB = 'HYBRID',
        TYPE_TER = 'TERRAIN';

    /** @var array */
    private $defaultOptions = array(
        'type'      => self::TYPE_ROAD,
        'width'     => 600,
        'height'    => 600,
        'controls'  => FALSE,
        'zoom'      => 8,
        'center'    => 'Brno',
    );

    /** @var string */
    private $mapType;



    /**
     * @param  string
     * @return Gmaps  provides a fluent interface
     * @throws InvalidArgumentException
     */
    public function setMapType($maptype)
    {
        if (!is_string($maptype)) {
            throw new InvalidArgumentException("MapType must be string.");
        }

        $this->maptype = $maptype;

        return $this;
    }



    /**
     * @return string
     */
    public function getMapType()
    {
        return (string) $this->maptype ?: '';
    }



    /**
     * @param  string
     * @param  string|array
     * @param  string
     * @param  string|Html|Template
     * @return Gmaps  provides a fluent interface
     */
    public function addMarker($name, $destination, $title = NULL, $info = NULL)
    {
        $this[$name] = new Marker($destination, $title, $info);
        return $this;
    }



    /**
     * @return Nette\Iterators\InstanceFilter
     */
    public function getMarkers()
    {
        return $this->getComponents(True, '\Gmaps\Marker');
    }



    /**
     * @param  string
     * @param  string
     * @param  string
     * @param  string
     * @return Gmaps  provides a fluent interface
     */
    public function setDirections($name, $origin, $destination, $travelMode = NULL)
    {
        $this[$name] = new Directions($origin, $destination, $travelMode);
        return $this;
    }



    /**
     * @return Nette\Iterators\InstanceFilter
     */
    public function getDirections()
    {
        return $this->getComponents(True, '\Gmaps\Directions');
    }



    /**
     * @param  string
     * @param  array
     * @return Gmaps  provides a fluent interface
     */
    public function addPolygon($name, array $points = array())
    {
        $this[$name] = new Polygon($points);
        return $this;
    }



    /**
     * @return Nette\Iterators\InstanceFilterIterator
     */
    public function getPolygons()
    {
        return $this->getComponents(True, '\Gmaps\Polygon');
    }



    /**
     * @return Nette\Templating\FileTemplate
     */
    public function getTemplate()
    {
        $template = new Nette\Templating\FileTemplate;
        $template->registerFilter(new Nette\Latte\Engine);
        return $template;
    }



    /**
     * @param  array
     */
    public function render($params = array())
    {
        $options = array_merge($this->defaultOptions, $params);

        if (!array_key_exists("type", $params)) {
            $options['type'] = $this->mapType ?: self::TYPE_ROAD;
        }

        $template = $this->template;
        $template->setFile(__DIR__ . '/template.phtml');
        $template->basePath = Nette\Environment::getHttpRequest()->getUrl()->basePath;

        $template->markers = $this->markers;
        $template->directions = $this->directions;
        $template->polygons = $this->polygons;
        $template->options = $options;

        $template->render();
    }



    /**
     * Implementing ArrayAccess setter.
     * @param  string
     * @param  Nette\ComponentModel\IComponent
     */
    public function offsetSet($name, $component)
    {
        $this->addComponent($component, $name);
    }



    /**
     * Implementing ArrayAccess getter.
     * @return Nette\ComponentModel\IComponent
     */
    public function offsetGet($name)
    {
        return $this->getComponent($name, True);
    }



    /**
     * Tests if component exists.
     * @param  string
     * @return bool
     */
    public function offsetExists($name)
    {
        return $this->getComponent($name, False) !== NULL;
    }



    /**
     * Remove component.
     * @param  string
     */
    public function offsetUnset($name)
    {
        $component = $this->getComponent($name, False);
        if ($component !== NULL) {
            $this->removeComponent($component);
        }

    }

}


?>
cujan
Člen | 410
+
0
-

ale ono som rpave pozeral zdrojovy kod vygenerovanej stranky a ten script sa tam generuje…len…

zdroj

https://github.com/wopice/Gmaps

Editoval cujan (18. 12. 2012 13:14)

jiri.pudil
Nette Blogger | 1032
+
0
-

zdroj

Díky, už jsem si to stihnul vygooglit… :)

Konzole nikde nehlásí chybu v JS? A ten skript máš tam, kde má být, tj. {$basePath}js/gmaps.min.js?

cujan
Člen | 410
+
0
-

no konzola nehlasi nic a vsetko mam podla pokynov v app/components/gmaps…

jiri.pudil
Nette Blogger | 1032
+
0
-

podla pokynov …

Takže podle tohoto?

  • copy gmaps source files to your component folder in your project

    $ cp -r ./gmaps ~/www/<your-nette-project>/app/components/

Ovšem součástí té komponenty je JS soubor. Ten musí být ve veřejně přístupné části webu (což by složka app v žádném případě být neměla).

cujan
Člen | 410
+
0
-

hej podla tohoto…

cujan
Člen | 410
+
0
-

kurnik ide…len mam sedepozadie zatial…js subory som nakopiroval do www/js/

cujan
Člen | 410
+
0
-

cau nevies mi poradit s tym problemom, ze sa mi zobrazi namiesto mapy sede pozadie…marker na miesto sa mi zobrazi…

wopice
Člen | 21
+
0
-

Opravil jsem narychlo aspoň základní funkce Gmaps (vytvoření mapy, přídání značky). Zkuste aktualizovat na novější verzi. Nestihnu teď dopoledne opravit vše (chybí directions a polylines). Chyby a náměty na zlepšení pokud možno reportujte do issues.

Prosím, nezapomeňte překopírovat znovu gmap.js do adresáře www/js.

cujan
Člen | 410
+
0
-

diky moc idem to skusit, inac suprova praca…vdaka

skopcil som a zas sa mi mapa nezobrazila :-) uz ani seda oblast ale mozno niekde je to moja chyba…idem hladat…

Editoval cujan (19. 12. 2012 12:08)

wopice
Člen | 21
+
0
-

cujan napsal(a):
skopcil som a zas sa mi mapa nezobrazila :-) uz ani seda oblast ale mozno niekde je to moja chyba…idem hladat…

Zapomněl jsem zmínit, že Gmaps je nyní závislé na jQuery. Ve chvíli, kdy se Gmaps spouští, ještě jQuery nemusí být načtené, takže je potřeba script tag s jQuery přesunout do hlavičky stránky.

cujan
Člen | 410
+
0
-

ups tak jquery ja nenacitavam asi vobec :-) ako nato? :) dikes

ups tu je celkom dobry navod pre tych co to nevedia tak ako ja :)

http://www.itnews.sk/…ework-jquery

Editoval cujan (19. 12. 2012 12:20)

cujan
Člen | 410
+
0
-

super vsetko funguje tak jak ma

vdaka

jiri.pudil
Nette Blogger | 1032
+
0
-

Jen bych doporučil načítat jQuery z nějaké CDN, třeba od Googlu. (Přináší to několik výhod.)

Editoval jiri.pudil (19. 12. 2012 16:28)

cujan
Člen | 410
+
0
-

Caute, potrebujem cez Gmaps vlozit znacku, a to tak, ze si z db vytiahnem GPS suradnice, ako nato?
presnejsie, viem ze znacka sa vklada v presenteri, len mi nie je jasne ako tam natiahnem gps suradnice…

Editoval cujan (27. 12. 2012 15:19)

wopice
Člen | 21
+
0
-

cujan napsal(a):

Caute, potrebujem cez Gmaps vlozit znacku, a to tak, ze si z db vytiahnem GPS suradnice, ako nato?
presnejsie, viem ze znacka sa vklada v presenteri, len mi nie je jasne ako tam natiahnem gps suradnice…

Asi nejkratší (byť zcela ignoruje existenci modelu) by bylo:

class HomepagePresenter extends BasePresenter
{

    private $places;

    public function beforeRender()
    {
        $this->places = $this->context->places; // Nette\Database\Table\Selection
    }

    public function createComponentMap()
    {
        return new Gmaps\Gmaps();
    }

    public function renderDefault()
    {
        $map = $this['map'];

        foreach ($this->places as $place) {
            $map->addMarker($place->id, array($place->latitude, $place->longitude), $place->name);
        }
    }

}
cujan
Člen | 410
+
0
-

super pomohlo, a este jedna vec potrebujem v latte spojit dva premenne – zemepisnu sirku a dlzku aby som ju mohol nastavit ako center

daco take ale funkcne …

<?php
{control mapa, center => $nalezisko -> zemepisnaSirka  $nalezisko -> zemepisnaDlzka }
?>
jiri.pudil
Nette Blogger | 1032
+
0
-

Pole.

cujan
Člen | 410
+
0
-

??? fak nechapem :-)

jiri.pudil
Nette Blogger | 1032
+
0
-

Jestli je „mapa“ instancí Gmaps z doplňku od @wopice, pak by asi mělo fungovat něco takového:

{control mapa, ['center' => ['lat' => $nalezisko->zemepisnaSirka, 'lng' => $nalezisko->zemepisnaDlzka]]}
cujan
Člen | 410
+
0
-

je to ta instancia a nefunguje… :-)

Editoval cujan (27. 12. 2012 20:24)

cujan
Člen | 410
+
0
-

resp. tak sa spytam takto..ako sa daju menit defaultOptions v presenteri?

vdaka

wopice
Člen | 21
+
0
-

cujan napsal(a):

resp. tak sa spytam takto..ako sa daju menit defaultOptions v presenteri?

vdaka

Co se středu mapy týče, tak se dá nastavit pomocí volání metody setCenter():

Např.:

$map->setCenter('Brno');
// ... nebo ...
$map->setCenter(49.9048, 16.447);