Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] CMS problem z " A > B > C"
propage
post
Post #1





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

Ostrzeżenie: (0%)
-----


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?

Ten post edytował propage 22.03.2009, 20:42:36
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
jareeny
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 23
Dołączył: 2.10.2007
Skąd: Słupsk

Ostrzeżenie: (0%)
-----


pobierać nazwy kategorii z url'a, albo zapisywać w sesji i wyświetlać
Go to the top of the page
+Quote Post
propage
post
Post #3





Grupa: Zarejestrowani
Postów: 330
Pomógł: 0
Dołączył: 25.01.2008

Ostrzeżenie: (0%)
-----


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";
Go to the top of the page
+Quote Post
Mephistofeles
post
Post #4





Grupa: Zarejestrowani
Postów: 1 182
Pomógł: 115
Dołączył: 4.03.2009
Skąd: Myszków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
wookieb
post
Post #5





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




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 {

Ten post edytował wookieb 23.03.2009, 10:06:42
Go to the top of the page
+Quote Post
Zyx
post
Post #6





Grupa: Zarejestrowani
Postów: 952
Pomógł: 154
Dołączył: 20.01.2007
Skąd: /dev/oracle

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:18