Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Struktura stron (kategoria>strona>podstrona)
Forum PHP.pl > Forum > PHP
chfast
Witam.

Tworze engine serwisu.
1. Zapisywać nazwy stron i informacje o nich(id, auth, tpl) w bazie danych czy w inny sposob?
2. Jak zorganizować i zapisać strukturę stron (kategoria -> strona -> podstrona) aby na podstawie tych informacji automatycznie tworzyć np. mapę serwisu, menu...
kliszaq
Powiem tylko jak ja zawsze robilem takiego typu serwisy:
na stronie indexowej robilem cos a'la tpl, czyli powiedzmy header, body, footer, gdzie header i footer byly includowane do kazdego dzialu, a w sekcji body byl link typu index.php?dzial=dzial1, dzial1 zapisywalem w pliku dzial1.jakiesdziwnerozszerzenie np. dzial1.www, zeby ciezko bylo znalezc te pliczki... no a na stronie dzial1 link do kolejnej podstrony...
spenalzo
Dziwne rozszerzenie... wiesz, jak sie skrypt wysypie to pokazuje gdzie jest błąd, razem z katalogiem. A załozę się że rozszerzenie .www nie jest przetwarzane przez serwer, więc chakier :-) dostanie wszystko jak na dłoni - hasełka itd.
Stosuj rozszerzenie .php.
kliszaq
no, ale jak masz ustawione w apaczu, zeby www kompilowal jak php, to nie powinien wywalac bledu..., achodzi raczej u umieszcenie kodu zwyklego html'a a nie hasel itp., przeciez to byloby zbyt proste do zhakierowania, poza tym odnosnie indexowania takich stron to sie jeszcze nawet nigdy nad tym nie zastanawialem....
spenalzo
Na zdalnym serwerze też tak masz ustawione?
kliszaq
nie mam, aczkolwiek juz raczej nie stosuje w/w metody
Puciek
Cytat
1. Zapisywać nazwy stron i informacje o nich(id, auth, tpl) w bazie danych czy w inny sposob?

Używaj bazy danych o mniejwięcej takiej strukturze:
Kod
ID|Autor|Plik


Cytat
2. Jak zorganizować i zapisać strukturę stron (kategoria -> strona -> podstrona) aby na podstawie tych informacji automatycznie tworzyć np. mapę serwisu, menu...


Rób układ folderu i potem pobieraj wszystkie nazwy z folderów i generój odnośniki, następnie otwieraj każdy folder i znowu generuj odnośniki. Dzięki czemu możesz wygenerować mapę strony bez ograniczenia folderów.
chfast
Cytat
Rób układ folderu i potem pobieraj wszystkie nazwy z folderów i generój odnośniki, następnie otwieraj każdy folder i znowu generuj odnośniki. Dzięki czemu możesz wygenerować mapę strony bez ograniczenia folderów.

Pomysł jest godny zainteresowania, ale widze kilka problemów.

1. Czy to wydajny sposób? Bo przy każdem wczytaniu strony przeba prześledzić wszystkie foldery.

2. Gdy otrzymujemy w zmiennej $_GET['id'] ID strony to trzeba "zkatalogować" wszystkie strony (patrz wyżej). Cieżka taką stronę odnaleźć. Nie jest to chyba optymalny sposób.


Ta zabawa z folderami podsunęła mi pewien pomysł. Co myślicie o tym, żeby zapisać do bazy danych coś takiego:
Kod
+----+---------+------------------------------+

| ID | NAME    | PATH                         |

+----+---------+------------------------------+

|  1 | strona1 | strona/podstrona/strona1.xml |

|    |         |                              |

Dzięki temu bez problemu możemy odczytać jacy są "przodkowie" danej strony (np. explode()) . Jednocześnie dany plik może być w tym samy folderze co jego "przodkowie" (bo można includować tylko ostatnią część zmiennej $PATH).

Wtedy stworzenie czegoś na wzór
Kod
Jesteś w: Strona Główna -> Dział -> Poddział -> Strona1
to "pikuś". Z mapą serwisu też nie powinno być problemu.

Chce się jeszcze dowiedzieć jak to jest rozwiązane w modułach obsługujących np. artykuły czy download.
spenalzo
Do tej struktury dodaj sobie pole "parent" gdzie bedziesz zapisywał ID katalogu nadrzędnego.
chfast
O to mi wcześniej chodziło, tylko że nieudolnie to przedstawiłem.
Kod
+----+---------+-------------+-------------+

| ID | NAME    | FILE        | PARENTS     |

+----+---------+-------------+-------------+

|  1 | strona1 | strona1.xml | id1/id2/id3 |

|    |         |             |             |
DeyV
takie roziwązanie ma tytlko 1 wadę.
Przeniesienie jednego 'katalogu' lub usuniecie, zmiana nazwy itp. powoduje, że musisz przeskanować całą bazę i poprawić/ wygenerować wszystkie ścieżki od nowa.
Puciek
Wystarczy odpowiednia pętla i auto sprawdzanie linków
mhs
moja propozycja:

informacje nt. kategorii, stron i podstron przechowywac w nastepujacej strukturze bazy danych


Kod
+-------------+------------------+------+-----+---------+----------------+

| Field       | Type             | Null | Key | Default | Extra          |

+-------------+------------------+------+-----+---------+----------------+

| kat_id      | int(10) unsigned |      | PRI | NULL    | auto_increment |

| kat_nazwa   | varchar(20)      |      |     |         |                |

| kat_opis    | varchar(255)     |      |     |         |                |

| kat_aktywna | enum('0','1')    |      |     | 0       |                |

+-------------+------------------+------+-----+---------+----------------+



+----------------+------------------+------+-----+---------+----------------+

| Field          | Type             | Null | Key | Default | Extra          |

+----------------+------------------+------+-----+---------+----------------+

| strony_id      | int(10) unsigned |      | PRI | NULL    | auto_increment |

| kat_id         | int(10) unsigned |      |     | 0       |                |

| strona_nazwa   | varchar(20)      |      |     |         |                |

| strona_opis    | varchar(255)     |      |     |         |                |

| strona_aktywna | enum('0','1')    |      |     | 0       |                |

+----------------+------------------+------+-----+---------+----------------+



+----------------+------------------+------+-----+---------+----------------+

| Field          | Type             | Null | Key | Default | Extra          |

+----------------+------------------+------+-----+---------+----------------+

| podstr_id      | int(10) unsigned |      | PRI | NULL    | auto_increment |

| strony_id      | int(10) unsigned |      |     | 0       |                |

| podstr_nazwa   | varchar(20)      |      |     |         |                |

| podstr_opis    | varchar(255)     |      |     |         |                |

| podstr_aktywna | enum('0','1')    |      |     | 0       |                |

+----------------+------------------+------+-----+---------+----------------+


wowczas bedziemy mieli mozliwosc swobodnego dodawania kategorii... itd - przyklad zamieszczonych danych ponizej

Kod
KATEGORIE:

    sport

    motoryzacja

    komutery

    ...

    

STRONY

    //dotyczy kategorii: sport

    pilka nozna

    koszykowka

    ...



PODSTRONY:

  //dotyczy stron: koszykowka

  nba

  polska liga

  ...


przy takiej strukturze bedziemy mogli np. aktywowac i deaktywowac dane kategorie, strony... (wszystkie pola w nazwie aktywna)

kod sql
[sql:1:b89299cbb0]
CREATE TABLE kategorie (
kat_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
kat_nazwa CHAR(20) NOT NULL,
kat_opis VARCHAR(255) NOT NULL,
kat_aktywna ENUM('0','1') NOT NULL,
PRIMARY KEY (kat_id)
);

CREATE TABLE strony (
strony_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
kat_id INTEGER UNSIGNED NOT NULL,
strona_nazwa CHAR(20) NOT NULL,
strona_opis VARCHAR(255) NOT NULL,
strona_aktywna ENUM('0','1') NOT NULL,
PRIMARY KEY (strony_id)
);

CREATE TABLE podstrony (
podstr_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
strony_id INTEGER UNSIGNED NOT NULL,
podstr_nazwa CHAR(20) NOT NULL,
podstr_opis VARCHAR(255) NOT NULL,
podstr_aktywna ENUM('0','1') NOT NULL,
PRIMARY KEY (podstr_id)
);
[/sql:1:b89299cbb0]

co o tym sadzicie?
scanner
Podstrona nie może już mieć podstrony. A to kiepsko. nakłada limity.
mhs
Cytat
Podstrona nie może już mieć podstrony. A to kiepsko. nakłada limity.

Tak, zgadza się. Jednak wydaje mi się, że można z góry założyć pewną strukturę serwisu. Przecież z drugiej strony nie można dodawać w nieskończoność kategorii, podkategorii, podpod... To byloby chyba gorsze rozwiazanie niz to, ktore przedstawilem...
Seth
To zalezy czy serwis ma byc rozbudowany czy nie (np. strona domowa).
Moze jednak sie okazac, ze bedziemy chcieli miec np taki uklad:
glowna->strony_domowe->uzytkownik->download->...
W tym przypadku przydala by sie nie skonczona mozliwosc tworzenia podstron.
scanner
Starajmy się tworzyć rzeczy uniwersalne, lub przynajmniej modułowe smile.gif
chfast
Cytat
takie roziwązanie ma tytlko 1 wadę.
Przeniesienie jednego 'katalogu' lub usuniecie, zmiana nazwy itp. powoduje, że musisz przeskanować całą bazę i poprawić/ wygenerować wszystkie ścieżki od nowa.

Niekoniecznie. W polu 'PARENTS' podajemy id rodziców. Nie zabrania nam to zmienić nazwy pliku dla danego identyfikatora. Faktem jest, że identyfikatory nie mogą już być zmieniane, ale przecież coś musi być stałe, żeby połączyć odpowiednie rekordy ze sobą.

Propozycja mhs nie bardzo mi się podoba. Tak samo jak w mojej bazie rekordy są łączone przez id. Ale trzeba użyć już wiekszej ilości tablic. Poza tym np. w tablicy 'podstrony' znajdowały by się strony zupełnie nie związane ze sobą tematycznie. Może i tablica nie jest do oglądania, ale po co taki bałagan?
itsme
Cytat
Cytat
Podstrona nie może już mieć podstrony. A to kiepsko. nakłada limity.

Tak, zgadza się. Jednak wydaje mi się, że można z góry założyć pewną strukturę serwisu. Przecież z drugiej strony nie można dodawać w nieskończoność kategorii, podkategorii, podpod... To byloby chyba gorsze rozwiazanie niz to, ktore przedstawilem...

nie sadze nalezy nie ograniczac mozliwosci zas twoje rowiazanie jest ..... proste - proste gdyz wiadomo o co chodzi; proste - gdyz nie wysililes sie za bardzo :-)

proponoje zainteresowac sie systemami do przechowywania drzewek
chfast
Cytat
proponoje zainteresowac sie systemami do przechowywania drzewek
Jakieś propozycje?
Kocurro
A co powiecie na takie cuś...

w bazie danych powiedzmy trzy pola:
id, group, childgroup, title...

group to grupa do której coś należy...

childgroup to wskaźnik do grupy podkategorii...

i np.

główna kategoria ma group=0, jest tam kilka głównych wpisów i każdy z nich ma inne pole childgroup...potem każde kolejne wpisy o group równym childgroup są elementami danej kategorii...

co uzyskujemy dzięki temu?? możliwość tworzenia nieskończenie wielkich struktur drzewa z możliwością wyłączania poszczególnych kategorii i szybkiego przełączania przynależności do kategorii...
Seth
Polecam napisac cos samemu chociazby na bazie tych informacji: http://www.depesz.pl/various-sqltrees.php
itsme
Cytat
Cytat
proponoje zainteresowac sie systemami do przechowywania drzewek
Jakieś propozycje?

oczywscie ze proponuje
http://forum.php.pl/search.php
drzewko
drzewka
struktura

poszukaj wypowiedzi dragossaniego on podal ciekawy przyklad
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.