ugrás a tartalomhoz

Rövid webcímek kezelése

Tanul0 · 2009. Jún. 13. (Szo), 10.13
Sziasztok!

Azzal kapcsolatban szeretnék ötleteket kérni, hogy hogyan lehetne megoldani, a rövid webcímek kezelését úgy, ha egy fájlban mondjuk maximum 4 $_GET[] paramétert használok egyszerre, de ezek lehetnek különbözőek is, tehát hogy érthető legyen, van egy forum.php , erre lehetnek olyan linkek:

- index.php?q=forum&forum=tema&temaid=1&lap=1&sortby=ASC
ami rövide:n /forum/tema/1/1/ASC

- index.php?q=forum&muvelet=mentes&forumid=1&temaid=1&valaszid=1
ami röviden: /forum/mentes/1/1/1

Mind a kettőnél az első paraméter karakterekből áll, de a többi lehet karakter, és szám is. Hogyan lehetne megkülönböztetni, hogy melyik paraméter mire mutat? switchen belüli switch? Vagy esetleg van erre valami egyszerűbb megoldás, ami csak nekem nem jut eszembe?

az index.php content részébe így jelenik meg a fájl:

//content
$oldal = explode('/',$_GET['oldal']);  

switch($oldal[0])  
  {  
   case 'forum':  
    if (isset($oldal[1]))
       {
       $param_1=$oldal[1];}
    if(isset($oldal[2]))
       {
       $param_2=$oldal[2];
       }
    if(isset($oldal[3]))
       {
       $param_3=$oldal[3];
       }
    if(isset($oldal[4]))
       {
       $param_4=$oldal[4];
       }
   case 'hirek':  
    if (isset($oldal[1]))
       {
       $param_1=$oldal[1];}
    if(isset($oldal[2]))
       {
       $param_2=$oldal[2];
       }
    if(isset($oldal[3]))
       {
       $param_3=$oldal[3];
       }
.....stb......

  break; 
  };
      if(!isset($oldal[0])) $oldal[0]= "hirek";
      if(!file_exists($oldal[0].".php")) $oldal[0] = "hirek";
      include($oldal[0].".php");
 
1

Hm?

Joó Ádám · 2009. Jún. 13. (Szo), 12.29
Veszed a beérkezett karakterláncot, feldarabolod a perjelek mentén, aztán a tömb ikszedik tagja az ikszedik sorszámú értéked. Innentől mivel van a gondod?
2

lehet én akarom

Tanul0 · 2009. Jún. 13. (Szo), 12.52
lehet én akarom túlbonyolítani, de pl megkapom az első linkemet, ahol az $oldal[1] elemből

if($param_1=="tema")
{
//temamegnyitasok
}
elseif($param_1=="muvelet")
{
//temamuveletek
}
a temamegnyitásoknál, a $oldal[2] tartalmazhatja egy konkrét tema id-jét, vagy éppen az osszes kilistázott téma aktuális lap azonosítóját tartalmazza. És erre lennék kiváncsi, hogy itt én akarom túlbonyolítani, vagy pedig erre van valami megoldás.
3

Szerintem igen

Joó Ádám · 2009. Jún. 13. (Szo), 13.01
Alapvetően nincs egyszerűbb megoldás, de ha jól értem, hogy mind a témák azonosítója, mind az oldalszámok egy egész szám képében adódnak át, akkor nem fogod tudni megkülönböztetni őket.

Én azt javaslom, hogy
/forum/temak
legyen a témák felsorolása,
/forum/temak/{téma azonosítója}
legyen egy adott téma megnyitása, az oldalszámot és a sorrendet pedig
/forum/temak/{téma azonosítója}?o={oldalszám}&s={sorrend}
alakban add át.

Az URL szintaxis egy jó kis eszközkészletet ad a kezünkbe, semmi ok rá, hogy egy új divat félreértelmezett filozófiája miatt valamelyiket kizárjuk. A kérések paramétereinke ugyanúgy megvan a megérdemelt helyük, amikor egy hierarchiában található erőforrásnak név-érték párokat akarunk átadni.
4

Értem, de most ez alapján

Tanul0 · 2009. Jún. 13. (Szo), 15.10
Értem, de most ez alapján elgondolkodtam, és ha valamelyik tömb eleme azzal lesz egyenlő, hogy "lap", akkor a következő tömb eleme lesz a lap száma, az utána következő pedig a rendezés pl:


//első eset /forum/temak/1

if($param_2!="lap")
{

    //második eset, amikor egy konkrét témának
    //a hozzászólások száma miatt egyszerre csak x darabot akarunk megjeleníteni

    if($param_3=="lap")
    {

           //itt pedig a konkrét témának a hozzászólásait x-y darabig megjelenítjük,
           // ez esetben a /forum/temak/1/lap/2/ASC

   }else
       {

         while(....)
         {
         //lekerdezese egy konkrét témáknak
         }

       }

}else
    {
        //itt a harmadik eset /forum/temak/lap/2/ASC
        //itt lekérdezzük az összes témának x-y darabját oldalanként.

    }
Ez így korrekt szerintetek? Vagy felesleges kód?
5

mintaillesztés

gex · 2009. Jún. 13. (Szo), 16.04
én mintaillesztéssel csinálnám, és ha ragaszkodsz a switch-hez:

switch (TRUE) {
    case preg_match('#^$#', $url): {
        // főoldal
    } break;
    case preg_match('#^forumok$#i', $url): {
        // fórum főoldal
    } break;
    case preg_match('#^forumok/tema/(\d+)$#i', $url, $matches): {
        // $matches[1] azonosítójú téma
    } break;
    default: {
        // 404
    } break;
}
innen - ha mvc-ben gondolkozol - már csak egy ugrás hogy egy konfig-fájlban felsorold a mintákat és a hozzá tartozó controllert/actiont és máris egy egész használható "rendszered" van.
6

Konkrétan sosem hallottam az

Tanul0 · 2009. Jún. 13. (Szo), 16.49
Konkrétan sosem hallottam az mvc-ről, de eddig is próbáltam mindent külön választani, csak templateket használok, kivéve, ha elkerülhetetlen pl. ha egy <select> mezőnél az <option> lehetőségeket adatbázisból kérdezem le. Most rákerestem wiki-n és tanulságos volt, mert pont egy hasonló esetet tárgyalt. Köszi!
7

wl kereső

gex · 2009. Jún. 13. (Szo), 16.53
itt is rákereshetsz, ha jól emlékszem egész nagy téma kerekedett belőle már nem egyszer.
8

Érdekes topicok és válaszok

Tanul0 · 2009. Jún. 13. (Szo), 19.16
Érdekes topicok és válaszok vannak , mostanáig erről olvasgattam. Mivel én csak "hobbi programozGATÓ" sosem tanultam suliban, de körül belül én is hasonló képpen próbáltam csinálni mindent, bár nem ennyire mélyrehatóan.
9

Sziasztok! Engem annyi

csaba86 · 2009. Aug. 29. (Szo), 12.10
Sziasztok!

Engem annyi érdekelne még rövid webcím kezeléssel, hogy melyik a jobb megoldás?
1. pl:

switch ($link[0]) {  
 case 'rolam':
  include('rolam.php');
 break; 
vagy 2. pl:

switch ($link[0]) {  
 case 'rolam':
  header('Location: rolam.php');
 break;
Melyik a gyorsabb és melyik a jobb, vagy ti melyiket használjátok?
Remélem jó helyen kérdeztem.
10

Első

erenon · 2009. Aug. 29. (Szo), 12.15
A második semmiképpen sem, mert előtte feltétlen tudatni kell a böngészővel (és a google bottal) hogy a két cím azonos tartalomra mutat, csak ő a rövidebbikről jött.
Én az első megoldást javaslom, ha később áttérsz egy általánosabb megoldásra az include 'rolam.php'-nél, akkor könnyebb lesz továbblépni.
11

köszi! Felkeltetted az

csaba86 · 2009. Aug. 29. (Szo), 12.27
köszi!

Felkeltetted az érdeklődésem, mégis milyen általánosabb megoldások vannak még? :)
12

általánosabb megoldások

erenon · 2009. Aug. 29. (Szo), 13.19
Nem tudom, hogy milyen szinten vagy jelenleg, és hogy mit tartalmaz a rolam.php. Ennek fényében fogalmam sincs, hogy számodra mi lenne az ideális következő lépcső, de hogy mégis adjak valami megfoghatót, manapság ezen a téren leginkább elterjedt architektúra az MVC.
Miután elolvastad az MVC-ről szóló elméleti fejtegetéseket (google://, wikipedia, stb), javaslom, hogy nézz bele néhány nagyobb frameworkbe, ami ilyet használ, sokkal gyorsabban megérted. (Ha megérted)