Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Ostatnia wartość z adresu URL ($_GET)
Forum PHP.pl > Forum > Przedszkole
barat
Na początku trochę objaśnień.

Piszę sobie swój własny CMS (dostosowany do moich potrzeb i z możliwością rozbudowy).
Do wyświetlenia dynamicznych metatagów mam tabelę w MySQL która zawiera 5 kolumn:

MOD|link|meta_key/desc/title|

MOD to po prostu te rozszerzenia które będą ładowane w body (mod od materiałów statycznych, downloadu, newsów itp)

Wartość MOD jest już znana prawie na początku głownego pliku index więc bez problemu go przekaże funkcji wyświetlającej meta, drugi parametr - link - to ostatnia wartość z adresu URL.

URL wyglądają tak:

http://jakasstrona.pl/index.php?page=jakas...p;content=jakis

To adres przykładowy. pierwszy parametr (page) jest i występuje zawsze - niezmienny, pozostałe zależą od MOD'a.

Dodatkowo czasem występuje paginacja, wtedy ostatni parametr to p={numerek} .wtedy chce go odrzucić i wziąć wartość poprzedzającą go.

Napisałem sobie funkcje.

(Korzysta z dwóch dodatkowych parametrów - $page = $_GET['page']; którą znam zawsze, i $rewrite którą też znam zawsze, pobierana jest z bazy z tabeli konfiguracji CMS, informuje czy mają być włączone krótkie url'e czy nie... są w formacie np: http://jakasstrona.pl/jeden-dwa-trzy.html , lub jeden-dwa-p_1 dla paginacji - wszystko działa dobrze i jak trzeba)

Napisałem sobie funkcję (komenty po angielsku, zapewne z błędami ale tak jest uniwersalnie) :

  1. <?php
  2. function zwroc_ostatnie() {
  3. // get $rewrite & $page from other functions of my CMS index.php , global page_id is the resu
    lt of function.
  4. global $rewrite;
  5. global $page;
  6. global $page_id;
  7.  
  8. //count url _GET elements and decrement by 1 (because of arrays indexed from 0 not 1)
  9. $count = count($_GET);
  10. $place = $count - 1;
  11.  
  12. //get all variables from addres (& is separator) -> type=variable
  13. $adres = explode('&', $_SERVER['REQUEST_URI']);
  14.  
  15. //if count = set $page_id to cms_daf_meta, else if 1 set is as $page which is dafa
    ult for whole CMS else chk rewrite
  16. if($count==0) 
  17. {$page_id = 'cms_daf_meta';}
  18. elseif($count==1) 
  19. {$page_id = $page;}
  20. else{
  21. //if rewrite = 0 (no mod_rertite url's used) set page_id to last argument from array $adres
  22. if($rewrite==0) {
  23. $page_id = $adres[$place];
  24. //chk if last arg in url is p= decrese $place by 1 to show value prev value esle j
    ust get last value
  25. $var = "p=";
  26. if (ereg($var, $page_id)) {
  27. $page_id = $adres[$place-1];
  28. $adres_no_p = explode('=', $page_id);
  29. $page_id = $adres_no_p[1];
  30. } else {
  31. $adres_no_p = explode('=', $page_id);
  32. $page_id = $adres_no_p[1];
  33. }
  34. }else{
  35. //if $rewrite = 1 (mod_rewrite url's used) get 1st (0) arg from array $adres (it'll give whole adress)
  36. //explode it by '-' because this is a separator in my url's then just get tlhe last one ($adres_rewr[$place])
  37. $adr = $adres['0'];
  38. $adres_rewr = explode('-', $adr);
  39. $page_id = $adres_rewr[$place];
  40. //check if last arg is p_ and if it is, decrese $place by 1) and set page_id to it
  41. $var = "p_";
  42. if (ereg($var, $page_id)) {
  43. $page_id = $adres_rewr[$place-1];
  44. } else {
  45. //if last arg isn't p_ then cut last 5 chars (.html) and set page_id
  46. $page_id = substr($adres_rewr[$place], 0, -5);
  47. }
  48. }
  49. }
  50. //just for check, dafault comment it with //
  51. echo $page_id;
  52. }?>


Wszystko jest tak jak powinno - otrzymuję to co chce ... ale to kilka linijek kodu jednak jest.

I tu nasuwa się pytanie:
Jest jakiś prosty sposób na wyciągnięcie ostatniej wartości z $_GET nie znając tak na prawdę wartości które się tam pojawią ?

Można zliczyć elementy $_GET , można "wydrukować" tą tablicę (print_r) ... ale czy są jakieś inne ciekawe funkcje, np ta o którą pytam ? smile.gif
Jeśli nie - cóż - funkcja którą napisałem spisuje się dobrze, ale zawsze miło sie dokształcić smile.gif
Darti
A czy takie coś zadziała: ?
  1. <?php
  2. $parametry = array_keys($_GET);
  3. $wartosci = array_values($_GET);
  4.  
  5. if($parametry[count($parametry)-1] == 'p'){
  6. $nieznany_parametr = $parametry[count($parametry)-2];
  7. } else {
  8. $nieznany_parametr = $parametry[count($parametry)-1];
  9. }
  10.  
  11. echo $nieznany_parametr;
  12. ?>
barat
O rzesz Ty ... genialne ;]

Po małej przeróbce działa idealnie smile.gif

Jest niezależne od wyglądu przepisanego URL'a bo korzysta z $_GET ...
Siedziałem w manualu ale źle szukałem ... (o $_GET i rzeczy związane z $_GET) , nie pomyślałem o funkcji wyciągającej klucze i wartości z tablicy smile.gif

Dzięki wielkie smile.gif

Ale pisząc swoje też się paru rzeczy dowiedziałem smile.gif
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.