Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]linki w zend
Forum PHP.pl > Forum > PHP > Frameworki
elmozaur
Witam.

Zrobilem prosta stronke, ktora obsluguje nastepujace adresy url (wpisywane z palca):
www.strona.pl
www.strona.pl/en
www.strona.pl/en/
www.strona.pl/content/tytul,30,20.htm
www.strona.pl/content/en/tytul,30,20.htm

pytanie:
w jaki sposob moge automatycznie generowac tego typu linki?
- interesuje mnie generowanie linkow w dynamicznym kontencie oraz w statycznym layoucie.

Najwiekszy problem mam z tym, ze w statycznym layoucie chcialem umiescic 3 flagi ktorymi przelaczalbym jezyki.
kazda flaga dodawalaby do urla zmienna lang lub zmieniala jej aktualna wartosc.

Routing zrobiony jest na regexach i wyglada tak:
  1. $route = new Zend_Controller_Router_Route_Regex (
  2. 'content/(?:([a-z]{2})/)?([a-z]+),([0-9]+),([0-9]+)\.htm',
  3. 'lang' => $lang,
  4. 'module' => 'default',
  5. 'controller' => 'content',
  6. 'action' => 'index'),
  7. 1 => 'lang',
  8. 2 => 'napis',
  9. 3 => 'id',
  10. 4 => 'kat'
  11. ),
  12. 'content/%s,%d,%d.htm'
  13. );
  14. $route = new Zend_Controller_Router_Route_Regex (
  15. '([a-z]{2})',
  16. 'lang' => $lang,
  17. 'module' => 'default',
  18. 'controller' => 'index',
  19. 'action' => 'index'
  20. ),
  21. 1 => 'lang'
  22. ),
  23. '%s'
  24. );


System postawiony jest na najnowszym Zendzie i Smarty3
Tak sie domyslam ze polaczenie ze smarty troche utrudnia gdyz nie moge uzyc $this->url(), ale oczywiscie moge sie mylic

czy ktos ma pomysl jak to ugryzc ?
mortus
Niedawno ktoś pytał o to samo. Rozwiązaniem jest plugin dla systemu Smarty.

Zresztą to właśnie Ty o to pytałeś. Uzyskałeś odpowiedź, więc po co drugi taki temat?
elmozaur
juz mowie dlaczego pisze

plugin faktycznie dziala (dzialal) z tym ze na podstawowym routerze i podstawowych routingach.
Jesli ja zdefiniowalem sobie nowe routy to zrobil sie klopot bo plugin ich nie rozpoznaje.

zrobilem wiec taki myk:
  1. if(isset($urlParams['route'])){
  2. $route_name = $urlParams['route'];
  3. $route = $router->getRoute($route_name);
  4. $droga = $route->assemble($urlParams, $route_name, $reset, $encode);
  5. } else {
  6. $droga = $router->assemble($urlParams, $route_name, $reset, $encode);
  7. }
  8.  
  9. return $droga;


dzieki temu uzyskalem dodatkowa zmienna ktora steruje routingiem.

niby jest dobrze i to o co mi chodzilo - ale to dziala tylko na stronie glownej np.: www.strona.com
wtedy linki ladnie i poprawnie sie generuja.
jesli natomiast jestem juz gdzies glebiej w serwisie np.: www.strona.com/content/en/tytul,30,20.htm to na takiej stronie link wyglada tak:
http://www.strona.com/content/en/content/e...tytul,32,30.htm a powinno http://www.strona.com/content/en/totytul,32,30.htm
http://www.strona.com/content/en/de a powinno http://www.strona.com/content/de

to tak jakby nowy adres byl doklejany do starego i nie wiem jak to obejsc reset mam ustawiony na true wiec niby powinno byc ok ($route->assemble($urlParams, $route_name, $reset, $encode)wink.gif
a nie jest...
melkorm
3 parametr url odpowiada za nazwę routera z którego korzystasz i do którego ma przypasować link.

Pokaż jak osadzasz link.

może slash na początku w atrybucie href ?
elmozaur
link w layoucie wstawiam tak:
  1. <a href="{zend_url lang="en" id="32" kat="30" napis="totytul" route="kontent" zend_url_reset="true" zend_url_encode="true"}">link</a>


i jesli ten kink ogladam z poziomu strony glownej (www.strona.co czyli default/index/index/) to link wyglada poprawnie

jesli klikne na link i jestem juz na stronie nie glownej (np: www.strona.com/content/tytul,30,20.htm czyli default/content/index/) to link dokleja sie do juz istniejacego i wyglada tak:
http://www.strona.com/content/en/content/e...tytul,32,30.htm a powinien tak: http://www.gengine3.studiogif.com/content/...tytul,32,30.htm
melkorm
Cytat
może slash na początku w atrybucie href ?
elmozaur
powiem tak:
po pierwsze primo nigdy bym sie nie spodziewal ze rozwiazanie moze byc takie proste ;-)

po drugie drugi sposob jaki znalazlem to sprawdzenie tablicy $urlParams w pluginie Smarty. Wywalenie zdublowanych kluczy i wartosci daje ten sam efekt.

po trzecie jesli ktos bedzie potrzebowal pluga do smarty w wersji obslugujacej rozne routy chetnie sie podziele

raz jeszcze dziekuje i pozdrawiam
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.