Linki zależne od tego skąd się weszło na stronę

0

Chciałbym uzyskać taki układ stron i nawigacji między nimi:
Strona główna
- strona 1
- podstrona 1
- podstrona 2
....
- podstrona m
- strona 2
......
- strona k
Jeżeli użytkownik zaczął nawigację od Strony głównej, to na każdej stronie niższego poziomu winien się pojawić link prowadzący do Strony głównej. Jeżeli zaczął od np. strony 1, to tego linku nie powinno być (użytkownik nie powinien być świadom istnienia stron innych niż potomkowie strony 1.
Wymyśliłem rozwiązanie z użyciem PHP, Strona główna otwierając stronę niższego poziomu przekazuje pewien parametr. To działa, ale jest "pisaniożerne", każdy link jest tworzony w taki sposób:

<?
  if(....)
     echo 'jakaś postać odnośnika';
  else
    echo 'inna forma odnośnika';
?>

Da się to zrobić prościej (krócej) ?

0

ee? chodzi Ci o tzw bread crumbs? ze masz link np:

strona glowna >> strona a >> podstrona b >> podstrona podstrony

jezeli tak to w przypadku niewielkich drzew (nie wiecej niz kilka tysiecy wezlow) najlepszym rozwiazaniem bedzie oparcie to o nestedset, dzieki temu operacje takie jak pobranie "sciezki" do danej podstrony wraz z poprzednimi linkami wykonasz jednym zapytaniem do bazy :)

0

Chyba nie. Chodzi mi o takie coś, jest strona główna, której adres jest bardzo mało znany (w skrajnym przypadku jestem jedyną osobą znającą ten adres). Jeśli nawigacja zaczyna się od strony głównej, to na każdej podrzędnej ma być link do strony głównej. Jeśli nawigacja zaczyna się od którejś ze stron podrzędnych (ich adresy są znane), to linków do strony głównej ma nie być.

0

nie wiem jak wyglada struktura twojej strony i jak generujesz linki czy menu. Tak abstrakcyjnie:
[nazwa] [level] [id] -to moze i nie potrzebne jest
Strona główna :
- strona 1 0:
- podstrona 1 0
- podstrona 11 00:
- podstrona 12 01:
- podstrona 2 0
.... ...
- podstrona m 0:m-1:
- strona 2 1:
...... ....
- strona k k-1:

Ta struktura moze byc zapisana np w bazie danych. Wchodzac na "podstrona 1 " sprawdzam ze level= 0 i wywoluje wszystke jej podstrony. Przy takim zapisie to by wystarczylo SELECT * FROM table WHERE [level start_with "0"] // [tu jakies poprawne wyrazenie ;)]
otrzymam wtedy wyniki:
0 podstrona 1 //to jest moj $root teraz
00 podstrona 11 // a to moje dzieci $c1
01 podstrona 12 // $c2 itd

zamieniam to na jakas strukture danych np: $root = array(array(array(array(),'c1'),array(array(),'c2')),'root');
i generuje z tego menu.

Strona glowna jako podstrona 1 = $root[1] , dzieci $c=$root[0]
podstrona 11 = $c[0][1]
podstrona 12 = $c[1][1]

i tak dalej sa generowane dalsze podstrony.... tylko nie wiem czy to nie jest bardziej "pisaniożerne" niz twoje.

0

Korzystanie z bazy danych wydaje mi się strzelaniem z armaty do wróbla). U mnie są trzy poziomy:
level 1 (jedna strona)
level 2
level 3
Chcę uzyskać takie linki na stronach:

  • jeśli nawigacja zaczęła się od poziomu 2 lub 3, to na stronach poziomu 2 są linki do wszystkich podstron
    poziomu 3, a na stronach poziomu 3 jest jeden link - powrót na "nadstronę"
  • jeśli nawigacja zaczęła się od poziomu 1, to na stronach poziomu 2 i 3 jest dodatkowo link powrotu na
    poziom 1
    Moje "pisaniożerne" rozwiązanie jest takie: strona poziomu 2 ma adres blablabla.php, link z poziomu 1 prowadzący na tą stronę ma postać blablabla.php?fromtop.
    Na stronie blablabla.php jest takie coś:
<?
   $fromTop=false;
   if(array_key_exists("fromtop,"$_GET))
   {
      fromTop=true;
   }
   .....
   if($fromTop)
   {
      echo '<a href="bleble.php?fromtop">Strona bleble</a>';
   }
   else
   {
      echo '<a href="bleble.php">Strona bleble</a>';
   }
   ....
   if($fromTop)
   {
      echo '<a href="root.php">Strona główna</a>';
   }
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1