Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]problem z kilkoma zmiennymi w mod_rewrite
Forum PHP.pl > Forum > Przedszkole
colachips
Witam,

Probuje zrobic przyjazne linki na stronie. Czytalem kilka tutoriali o mod_rewrite dla kilku zmiennych, ale nie moge sobie poradzic z moim problemem

mam w .htaccess takie cos:

  1. RewriteRule ^([a-zA-Z-_0-9]+)/([a-zA-Z-_0-9]+)/?$ index.php?tid=$1&kid=$2 [L]

czyli chce zamienic kazde index.php?tid=$costam&kid=$costam
na
/nazwa-czegos-tam/nazwa-czegos-siam

nastepnie mam funkcje, ktora ma pobierac id z linku

  1. <?php
  2. function pobierz_parametr($id){
  3.  if(isset($_GET[$id])){
  4.     $id=$_GET[$id];
  5.  }else{
  6.     $id=false;
  7.  }
  8.  return $id;
  9. }
  10. ?>


teraz w pliku index.php robie:
1. includuje configa z powyzsza funkcja
2. includuje menu boczne (tam maja byc wlasnie te mile odnosniki)
3. odpalam wszystko

linki w menu wygladaja tak
  1. <a href="<?php echo $root_dir.$technologia['1'].'/'.$kategoria['1']; ?>">

gdzie $root_dir to moj katalog glowny "/moj-katalog/" a $technologia i $kategoria pobieram z tablicy, przypisujac do urla nazwy

niestety w index.php musze pobrac z tego menu kid i tid, ktore przeciez sa juz nazwami..

  1. <?php
  2. if (isset($_GET['tid']) && isset($_GET['kid'])) {
  3.  
  4.  $tid = $_GET['tid'];
  5.  $kid = $_GET['kid'];
  6.  
  7. ...
  8.  
  9. foreach ($dbquery->getByTidKid($tid, $kid) as $val) {
  10.  
  11. }
  12. }
  13. ?>


i chociaz po otwarciu index.php w menu wyswietlaja sie przyjazne linki, czyli:
/murowane/parter
zamiast
index.php?tid=1&kid=1
to nie wiem jak to ogarnac

foreach naturalnie wywala blad, bo przeciez nie ma tid ani kid..

pytanie:
w ktorym miejscu mam wstawic funkcje pobierz_parametr zeby to zadzialalo?
erix
Cytat
nastepnie mam funkcje, ktora ma pobierac id z linku

I na co? :| Wystarczy przecież prosta konstrukcja:
  1. <?php
  2. $z = empty($_GET['z']) ? '' : $_GET['z'];
  3. ?>

Nie trzeba pisać osobnej funkcji...

Cytat
czyli chce zamienic kazde index.php?tid=$costam&kid=$costam
na
/nazwa-czegos-tam/nazwa-czegos-siam

Chyba na odwrót...

Cytat
niestety w index.php musze pobrac z tego menu kid i tid, ktore przeciez sa juz nazwami..

Napultałeś trochę, ale spróbuję.

Podejrzewam, że namieszałeś z regułkami, spróbuj coś takiego:
Kod
RewriteRule ^([a-zA-Z\-_0-9]+)/([a-zA-Z\-_0-9]+)/?$ index.php?tid=$1&kid=$2 [L]
colachips
nie bardzo rozumiem, przeciez jak dam w menu.php taki link
  1. <?php
  2. <a href="index.php?tid=1&kid=1">
  3. ?>

to w pasku bedzie "index.php?tid=1&kid=1"
a jak dam
  1. <a href="<?php echo $root_dir.$technologia['1'].'/'.$kategoria['1']; ?>">

to owszem, w pasku jest "/murowane/parter", ale jak tu pobrac tid i kid z takiego adresu?
erix
To pójdź na kompromis, aby w URL przekazać również identyfikatory:
Kod
/murowane-1/parter-1

Pozostaje jeszcze wyciąganie z bazy po nazwie, ale IMHO lepiej przekazywać ID.
colachips
Zrobilem tak i dziala chociaz nie jestem przekonany czy to jest przyjazny dla oka link..
  1. <a href="<?php echo $root_dir; ?>1/1">


w pasku jest teraz "1/1"
foreach dziala, ale nie wiem dlaczego sypie mi sie caly css i nie pokazuje zadnych obrazkow.
poza tym zastanawiam sie jak teraz zrobic odwolanie do konkretnego wyniku. w .htaccess jest:

Kod
RewriteRule ^([a-zA-Z\-_0-9]+)/([a-zA-Z\-_0-9]+)/?$ index.php?tid=$1&kid=$2 [L]
RewriteRule ^([a-zA-Z\-_0-9]+)/([a-zA-Z\-_0-9]+)/?$ index.php?id=$1 [L]


i w linku jest np. "1/index.php?id=1" co oczywiscie nie dziala. a powinno byc np. "1/cieply"

//EDIT

poradzilem sobie z tym linkiem tak:

Kod
RewriteRule ^([a-zA-Z\-_0-9]+)/?$ index.php?id=$1 [L]


teraz kolejnosc wyglada tak:
1. index.php = 'www.bla/'
2. index.php?tid=1&kid=1 = 'www.bla/1/1'
3. index.php?id=20 = 'www.bla/20'

dziala, oprocz tego, ze takich linkow i tak nikt nie zrozumie oprocz moze google.. i nie wiem nadal co sie dzieje ze po wywolaniu pkt 2 caly css sie sypie i nie ma obrazkow?

css wraca do normy po wywolaniu pkt 3 (?)
erix
Cytat
caly css sie sypie i nie ma obrazkow?

Korzystaj ze ścieżek bezwzględnych, to będzie ok. Przeglądarka nie wie, że przepisujesz adresy i jak masz np. ścieżkę css/style.css, to wtedy klient szuka w przepisz-regule-1/pseudokatalog/css/style.css, która to ścieżka nie istnieje. winksmiley.jpg

Cytat
dziala, oprocz tego, ze takich linkow i tak nikt nie zrozumie oprocz moze google..

To zrób osobną, "olewany" wzorzec (który będzie przeszukiwany, ale go nie użyjesz, np: asdasdasd-1=>(.+)-([0-9]+).
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.