Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ustawienie przyjaznych URL'i dla CMS'a
Forum PHP.pl > Forum > PHP
RaRu
Witam,

na swoich stronach do tworzenia przyjaznych URL'i wykorzystuję klasę: "NiceUrlsRouter" opisaną chociażby na tej stronie. Zawsze trzymałem sobie podstrony w oddzielnym katalogu i mogłem bez problemu uzyskać url'e typu:
  • domena.pl/strona1.html
  • domena.pl/strona2.html
  • itd...
Jestem w trakcie projektowania CMS'a i tutaj w przypadku gdy treści podstron będą pobierane z bazy danych to dla każdego modułu (strony statyczne, galerie, aktualności, download....) muszę stworzyć odpowiednio podstrony np: sites.php , gallery.php, news.php, download.php... dzięki którym będę mógł wyświetlić treści podstron, kategorie i zawartości kategorii z bazy danych. W takim przypadku moje url'e będą odpowiednio przybierały postać:
  • domena.pl/sites/strona1.html
  • domena.pl/sites/strona2.html
  • domena.pl/sites/stronax.html
  • domena.pl/gallery/galeria1/
  • domena.pl/gallery/galeria2/
  • domena.pl/gallery/galeriax/
  • domena.pl/news/kat1/news1.html
  • domena.pl/news/kat2/news2.html
  • domena.pl/news/kat2/newsx.html

.....

Moje pytanie jest następujące: w jaki sposób mógłbym pozbyć się z url'a odpowiednio: sites, gallery, news.. aby uzyskać np: dla strony statycznej wczytywanej z bazy danych url postaci:
  • domena.pl/strona1.html
Wiem, że jest możliwe takie rozwiązanie, tylko nie wiem jakie podejście trzeba zastosować aby uzyskać taki efekt, generalnie na podstawie urla rozpoznaję czy mam wczytać stronę statyczną (sites) czy aktualność (news) czy np galerię (gallery) gdyby z url'a zniknęły te parametry to nie bardzo wiem na jakiej podstawie wyświetlać (rozpoznać) co ma być aktualnie wczytane z bazy danych, czy strona statyczna, czy aktualność czy coś innego....

Będę wdzięczny za wszelką pomoc, pozdrawiam...
pinochet
hmm nie rozumiem do końca pytania biggrin.gif

wystarczy ze bedziesz sprawdzal czy wpisany adres rozpoczyna sie frazą strona | galeria | news i na tej podstawie odpalac odpowiednie skrypty. Oczywiscie powinienes jeszcze jakos validowac urla zeby wpisanie: domena.pl/galerianewsstrona.html nie wywalilo ci skryptu.
RaRu
Cytat
wystarczy ze bedziesz sprawdzal czy wpisany adres rozpoczyna sie frazą strona | galeria | news i na tej podstawie odpalac odpowiednie skrypty.


właśnie o to chodzi, że nie chcę mieć tej frazy (strona, galeria, news) w URL'u

zamiast: domena.pl/sites/strona1.html chcę mieć url postaci: domena.pl/strona1.html (pytanie jakie ma być podejście, żeby mimo, że nie ma w url'i parametru "sites" wiedzieć, że jest to strona statyczna do wywołania z bazy....
johnson
Jeśli każdą stronę dodajesz przez panel administracyjny CMS to dodaj tam kolejny parametr jaki moduł należy użyć do wyświetlenia tej strony, zresztą tworząc każdą stronę w CMS musisz mieć przecież pole wyboru z jakiego modułu korzystasz, czyli np. Nowa strona statyczna, Nowa galeria itd. więc informację jaki moduł użyć do danej strony powinieneś mieć już w bazie.

Innymi słowy jeśli odpalasz stronę "oferta.html" to w bazie musisz mieć dane:
| Nazwa pliku | Moduł |
|--------------------------------------
| oferta.html | site.php |

ale moim zdaniem najlepszym rozwiązaniem i powszechnie stosowanym są linki w stylu "site-1.html" gdzie site jest nazwą modułu (albo aliasem) a 1 jest ID rekordu w bazie. Później przetwarzasz to przez .htaccess (najlepiej) albo php.
dkosc
Jeśli w bazie umieścisz urle dla każdej podstrony, a podstron zrobi Ci się kilkaset tysięcy to trzeba będzie to dobrze optymalizować..
daw22
Witam,

Zaimplementuj do swojej klasy routera jeszcze klasę RewriteRouter.
Przeszukaj te forum wpisując frazę "rewrite router".
Mniej więcej, opiszę w jaki sposób to zrobić, klasa RewriteRouter, będzie wczytywała określone reguły z jakiegoś pliku np.
plik reguly.php
  1. <?php
  2. $aRules[] = array('stron2.html', array('controller'=>'download', 'action' => 'jakas_strona_akcji', 'params' => array(/**Tutaj mozesz wypisac parametry jakie chcesz jeszcze przekazac do routera.**/);
  3. // i tak dalej dodajesz kolejne reguły
  4. ?>

Następnie w konstruktorze [czy jak tam u Ciebie to jest zrobione] sprawdzasz przekazany url parametru [tj. stron2.html], następnie tworzysz obiekt klasy RewriteRouter i implementujesz w nim metodę, która dokona analizę adresu przekazanego do routera i sprawdzi czy istnieje taka reguła, jeśli istnieje taka reguła, od razu przekazujesz tą tablice z kontrolerem, akcją i parametrami do ustawien routera, jeżeli nie istnieje taka reguła w pliku to pozwalasz routerowi na anzlizowanie adresu URL i ustawiasz odpowiedni kontroler, akcje i parametry. U mnie jest tak zrobione i działą to wyśmienicie, mogę ustawiać reguły, lecz nie muszę, bardzo fajna sprawa i duża elastyczność.

Pozdrawiam,
daw22
RaRu
dziękuję wszystkim za odpowiedzi, tak się złożyło, że zastosowałem już trochę wcześniej podejście, które tutaj akurat zaproponował johnson (z wpisem nazwy modułu do tabeli). Jest to CMS, przewidziany dla małych i średnich stron, więc myślę, że nie będzie problemu z optymalizacją tego rozwiązania. Jeszcze raz dziękuję 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.