Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] CMS problem z " A > B > C"
Forum PHP.pl > Forum > PHP
propage
Do tej pory pisałem strukturalnie. Tworze swój CMS/Framework i zastanawiam się nad jedną sprawą.

Jak rozwiązać sprawę wyświetlania nawigacji na stronie czyli "Jesteś tutaj : home > kategoria 1 > kategoria 2 > kategoria 3 > produkt"

Poziomów kategorii może być dowolnie wiele.
URL mają postać:

domena.pl/kategoria-1/kategoria-2/kategoria-3/produkt-1.html

ale do tego samego produktu można wejść też używając adresu

domena.pl/kategoria-1/kategoria-2/produkt-1.html


moja aplikacja wygląda mniej-więcej tak:

  1. <?php
  2. include_once('controllers/' . $subPage . '.php');
  3. $page = new $subPage($db);
  4. ?>



A tutaj kontroler produktu, kategorii i innych stron ma taką postać.

  1. <?php
  2. class product extends core
  3. {
  4.   function __contruct()
  5.   {
  6.       $this->name = $nazwa_produktu;
  7.       $this->trail->add(array($nazwa_produktu, $nazwa_produktu.'.html'));
  8.  
  9.       $url = explode ( '/', $_GET) ;
  10.  
  11.       $category_name = $url[count($url) - 2];
  12.      
  13.       if(count($url) > 2)
  14.       {
  15.         $parent = 'home';
  16.         include('controllers/home.php');
  17.       {
  18.        else
  19.        {
  20.        $parent = 'category';
  21.         include('controllers/category.php');
  22.        }
  23.      
  24.   }
  25.  
  26.   function display()
  27.   {
  28.    ....
  29.    }
  30. }
  31. class category extends core
  32. {
  33.    function __contruct(,,, $i)
  34.    {
  35.        $this->name = $nazwa_kategori;
  36.       $this->trail->add(array($nazwa_kategori, $nazwa_kategori));
  37.        $url = explode ( '/', $_GET) ;
  38.  
  39.        $category_name = $url[count($url) - (2+$i)];
  40.  
  41.         if(count($url) > 2)
  42.        {
  43.          $parent = 'home';
  44.          include('controllers/home.php');
  45.        
  46.        {
  47.         else
  48.         {
  49.            $i++;
  50.           $parent = 'category';
  51.              include('controllers/category.php');
  52.           $subsctegory new category(..., $i)
  53.         }
  54.    }
  55.  
  56.    function display()
  57.    {
  58.     ....
  59.     }
  60. }
  61. ?>



To jedyny pomysł na jaki wpadłem niestety. Aby nie tworzyć nowych plików. Czyli wszystki informacje potrzebne do wyświetlenia danej podstrony i stworzenia traila są w plikach, w każdym pliku jest zaznaczone co jest rodzicem danego pliku, wiec dla produktu np jet to kategoria a dla kategori strona głowna (w prostej wersji - przy jedno poziomowej kategorii)

Może ktoś podać jakiś inny pomysł rozwiązywania tego problemu? Może jakieś przykłady, CMS gdzie mogę podejrzeć inne rozwiązania?
jareeny
pobierać nazwy kategorii z url'a, albo zapisywać w sesji i wyświetlać
propage
Dodawanie do sesji to pójście na łatwiznę, tylko co jeśli ktoś wejdzie do sklepu bezpośrednio przez link domena.pl/a/b/c/produkt.html wtedy żadnej kategorii nie będę mieć w sesji i będzie to wyglądać tak "home -> produkt";
Mephistofeles
Bierz nazwy prosto z adresu, przecież jak ktoś wchodzi przez kategoria1/kategoria2/produkt to dla niego ten produkt należy do kategorii 2, a nie 3.
wookieb
Ja może tylko na boku powiem ze tutaj jest błąd składniowy
  1. <?php
  2. if(count($url) > 2)
  3.        {
  4.          $parent = 'home';
  5.          include('controllers/home.php');
  6.        
  7.        {
  8.         else
  9.         {
  10.            $i++;
  11.           $parent = 'category';
  12.              include('controllers/category.php');
  13.           $subsctegory new category(..., $i)
  14.         }
  15. ?>

2 razy {
Zyx
Skoro możesz zagnieżdżać kategorie, to znaczy, że masz to jakoś zaimplementowane. Wystarczy mieć dobry algorytm obsługi drzewa, aby takie listy generować jednym, prostym zapytaniem. Własność taką ma np. nested set znany także jako modified preorder tree traversal. Jest na jego temat trochę artykułów, również po polsku, było to poruszane kilkakrotnie na tym forum i tam też odsyłam.
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.