Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Smarty, JavaScript i Googlemaps
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
SpiderPL
Witam

Mam stronę w php na smarty. Na tej stronie ma pojawiać się mapka Google.

Skrypt z mapką przekazuję do szablonu:

  1. <?php
  2. $smarty -> assign('mapa', '
  3. <script src="http://maps.google.com/maps?file=api&v=2&key=ABQIAAAAidKehL1XT37W 3u9twGNbQhTmxHkKhONJMDc0GcPTIhwzPsWj-BRI9na2-SUQUQ2mCHlQJNEWpqu0DQ" type="text/javascript"></script>
  4. <script type="text/javascript">
  5. //<![CDATA[
  6. function load() {
  7. if (GBrowserIsCompatible()) {
  8. var map = new
  9. GMap2(document.getElementById("map"));
  10. map.addControl(new GLargeMapControl());
  11. var point = new GLatLng('.$row['mapa'].');
  12. var marker = new GMarker(point);
  13. var MapTypes = map.getMapTypes();
  14. MapTypes[0].getName= function() { return "Mapa";}
  15. MapTypes[1].getName = function() { return "Satelitarna";}
  16. MapTypes[2].getName = function() { return "Hybrydowa";}
  17. map.addControl(new GMapTypeControl());
  18. map.setCenter(new GLatLng('.$row['mapa'].'), 15);
  19. map.addOverlay(marker);
  20. }
  21. }
  22. //]]>
  23. </script>');
  24. ?>


W tych liniach:

var point = new GLatLng('.$row['mapa'].');
map.setCenter(new GLatLng('.$row['mapa'].'), 15);

$row['mapa'] są to współrzędne mapy pobrane z bazy danych.

Skrypt wstawiłem w nagłówku szablonu w HEAD:

  1. <?php
  2. {$mapa}
  3. ?>


Wszystko idealnie działało i mapa wyświetlała się prawidłowo.
Wstawiłem w nagłówku kolejny skrypt do ukrywania divów:

  1. {literal}
  2. <script language="JavaScript" type="text/javascript">
  3. var ostatni = '';
  4. function chowaj(nazwa)
  5. {
  6. document.getElementById(nazwa).style.display='none';
  7. }
  8.  
  9. function pokaz(nazwa)
  10. {
  11. if(ostatni)
  12. chowaj(ostatni)
  13. ostatni = nazwa;
  14. document.getElementById(nazwa).style.display='block';
  15. }
  16. {/literal}


Od tego momentu skrypt z mapą nie działa prawidłowo (nie pokazuje właściwej pozycji na mapie), natomiast drugi skrypt działa prawidłowo.
Gdzie tkwi błąd? Próbowałem już na wszystkie sposoby np. zamieniałem skrypty miejscami, zmieniałem nazwy zmiennych w drugim skrypcie i też nic.
c3zi
Spróbuj pierwszy skrypt wstawić "natywnie" w js. Tylko zmienne użyte przekaż za pomocą assign (w sumie chyba tylko $row['mapa'] będziesz musiał przekazać).
SpiderPL
Myślałem już, żeby tak zrobić. Potrafię przekazać zmienną z php do JavaScript, jednak zupełnie nie wiem jak przekazać ją z php do szablonu smarty. Jeśli przypisuję ją zwyczajnie poprzez $smarty ->assign('zmienna', $costam); to w obrębie skryptu JavaScript wstawionego w szablonie ta zmienna po prostu nie działa. Z tego właśnie powodu osadziłem skrypt w php, a następnie przekazałem do szablonu.
Obawiam się jednak, że to chyba nie jest powodem, bo mapa po usunięciu tego drugiego skryptu działa poprawnie. Po jego wstawieniu też częściowo działa, gdyż marker ustawiany jest na właściwej pozycji, tylko mapa nie wiadomo dlaczego przesunięta jest nieco w prawo o jakieś 150 pikseli i marker ginie poza obrębem okienka mapy.
ucho
Przecie wszystko jest jasno opisane na stronach manuala Smarty opisujących {literal} -Smarty nie przetwarza w ogóle tego bloku,więc takżę nie podstawi zmiennych - musisz zrobić kilka takich bloków - "{/literal}{$zmienna}{literal}" i wszystko będzie działać. Alternatywnie dać wszystkie funkcje z blokach literal a tylko ich wywołania poza - przy braku "{}" nie będzie to się gryzło ze smarty.
SpiderPL
Już tak robiłem. Wstawiałem w miejscu zmiennej $row['mapa'] wartość przekazaną do szablonu z php i to dokładnie w taki sposób jak opisałeś. {/literal}{$zmienna}{literal} itd.
To nie działało wcale, dlatego zdecydowałem się osadzić skrypt gdzieś indziej. Teraz działa, ale tylko częściowo, gdyż tak jak wcześniej napisałem - marker ustawiony jest na właściwej pozycji, natomiast mapa nie zostaje wycentrowana tam gdzie trzeba, tylko jest przesunięta i to dość sporo.
300 stronnicowy manual w postaci książki leży tu obok mnie i pomimo, że są tam opisane wszystkie zaawansowane właściwości smarty, to jednak na temat JavaScript we współpracy ze smarty informacje są lakoniczne. Przeryłem go od deski do deski i niczego tam nie znalazłem, dlatego pytam tutaj.

Próbowałem przed chwilą umieścić tą mapkę gdzieś indziej, ale z tym samym nagłówkiem (czyli przy ładowaniu strony wywoływane są obydwa skrypty) i na tej innej podstronie mapka wyświetla się prawidłowo, więc chyba skrypty nie gryzą się ze sobą. Kompletnie nie wiem już o co chodzi... Czyżby to miało związek z jakimś atrybutem w linkach do ukrywania i pokazywania divów?questionmark.gif

Link wygląda tak:
  1. <a href="javascript:pokaz('costam')">Costam</a>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.