Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Moja koncepcja cms-a
Forum PHP.pl > Inne > Hydepark
Diwi
Ostatnio zaświtał mi pomysł na wykonanie zarządzania treścią w systemie cms. Moja koncepcja wygląda tak

Mamy tabele w bazie danych o nazwie "content". W tej tabeli znajdują się kolumny takie jak:

Kod
value | id | tpl


Gdzie:

I. value to wartość treści
II. ID chyba wiadomo
III. Nazwa przydzielonego szablonu

Teraz przykład zastosowania mojej koncepcji a więc dodajemy sobie nowy rekord o wartości kolumny "value":

Kod
title: Nazwa artykuły;
text: Jakiś tekst
author: autor
create-date: 28.08.2005
contact: php.diwi@gmail.com


Tak więc moja wizja jest taka. W katalogu templates gdzie trzymamy szablony znajdują się podfoldery o nazwach page_"nazwa_szablonu". Wewnątrz każdego takiego podfolderu mamy 2 pliki:

-config.inc
-template.tpl

config.inc przechowuje informacje na temat elementów danej strony, przykładowa budowa dla wyżej wymienionej treści będzie wyglądać tak:

Kod
title | varchar;
text | big_varchar;
author | varchar;
create-date | date_format;
contact | varchar;


Co to oznacza ? A więc część przed znakiem "|" to nazwa elementu a po tym znaku to rodzaj wartości (Przyda się to potem przy tworzeniu formularza do dodawania treści) Dzięki takiemu rozwiązaniu możemy budować podstrony składającą się z bardzo dużej ilości elementów bez ograniczenia związanego z określonymi polami w formularzu dodawania treści.

Co do drugiego pliku template.tpl to odpowiada on za wyświetlanie informacji i może on dla powyższego przykładu wyglądać tak:

Kod
<b>{content.title}</b>
<p>{content.text}</p>
<br />
<span>Autor: <a href="mailto:{content.contact}">{content.autor}</a></span>
<br /><br />
Data dodania: {content.creation-date}



Niestety co do szablonów to ich zawartość jest przydzielana na stałe ale można tworzyć nowe dlatego jest to dosyć elastyczne rozwiązanie.

I teraz pytanie do was czy taka koncepcja jest dobra i czy iść w tą stronę ?

Pozdrawiam
sf
mi sie nie podoba... zreszta jak znam zycie to trzeba napisac 2-3 cmsy lub ( co jest lepszym rozwiazaniem ) popracowac / robic poprawki do 3 cmsow + jakis wlasny... i wtedy wyjdzie jakas lepsza koncepcja na to jak napisac taka aplikacje... wiec napisz pierwszego cmsa.. zobacz jak dzialaja inne i sam odpowiesz sobie na pytanie co bylo zle i dlaczego, zreszta wazne jest takze co Twoj cms ma robic.. dlaczego go piszesz, a nie korzystasz z gotowego? czym sie ma wyrozniac od juz istniejacych?
Diwi
Hmm.. no cóż, mi się wydawała dobra dlaczego ? Jeżeli będe potrzebował zrobić sobie bazę produktów to nie będe klepał modułu do tego tylko w bardzo krótkim czasie zrobie sobie szablon w którym ustale sobie odpowiednie pola (w pliku config.inc) takie jak np:

-Nazwa produktu
-Cena
-Dane techniczne
-Dodatkowe informacje

Potem będe miał odrazu stworzone pola w panelu administracyjnym do dodawnia produktów biggrin.gif.

Pozdrawiam
GrayHat
IMHO konstruktywne smile.gif
sf
jak dla mnie bardziej sie przydaja takie pliki konfiguracyjne do walidacji
Diwi
Cytat
jak dla mnie bardziej sie przydaja takie pliki konfiguracyjne do walidacji


Nie rozumiem. Możesz rozwinąć swoją myśl ?

Pozdrawiam
sf
Cytat(Diwi @ 2005-10-01 12:06:44)
Nie rozumiem. Możesz rozwinąć swoją myśl ?

mojavi.org .. sciagnij sobie wersje 3.0 i w katalogu samples masz plik validator.ini

lub tutaj tez masz cos w tym stylu..

http://www.xisc.com/wiki/index.php/A_tutor...sing_validators

jesli chcesz tworzyc cmsa to mozesz tez wykorzstac jakis framework, dzieki temu bedziesz mial mniej roboboty
Diwi
Hmm.. a jaki framework polecalibyście do tego typu aplikacji ?

Pozdrawiam
bela
Wybór frameworka zależy tylko i wyłącznie od Twoich preferencji i oczekiwań, a więc ściągnij na co się natrawisz i testuj, testuj
Diwi
Acha a teraz mam jeszcze pytanie co do koncepcji związanej z użytkownikami. Tak więc wszystko będzie wyglądać dosyć podobnie. Tabela users w bazie danych będzie miała taką strukturę:

Kod
id | username | password | additional_info | group


Przy czym:

I. ID to chyba wiadomo (jak zwykle biggrin.gif)
II. Username czyli nazwa użytkownika
III. Password czyli hasło
IV. Additional info czyli dodatkowe informacje które mogą wyglądać np. tak:

Kod
email: diwi@diwi.pl;
gg: 3088731;
tlen:;
data_urodzenia: 31-12-9999;
ranga: administrator;


No i znowu tak jak w przypadku zarządzania treścią additional info zawiera dodatkowe informacje o użytkowniku biggrin.gif. Np. jeżeli będe chciał moge sobie odrazu dodać numer icg, adres jabbera itd.

V. Grupa do której należy użytkownik. Oczywiście każda grupa będzie posiadała określone prawa biggrin.gif.

No i oczywiście czy takie rozwiązanie jest również dobre ?

Pozdrawiam
sf
a nie mozesz zrobic dla kazdej tej danej osobnej kolumny? dla nr gg osobna kolumne, dla ragni osobna kolumna itd., np. chcesz wyswietlic uzytkownikow, ktory dzis maja urodziny.. i co robisz? ;] wyciagasz wszystkie rekordy.. potem je obrabiasz w php i spradzasz? ;}
Diwi
Ale takie rozwiązanie jest bardziej elastyczne dla klienta. Jeżeli nie zna się on wogóle na programowaniu ani bazach danych to napewno nie umie dodać sobie dodatkowej kolumny do tabeli. Tutaj wystarczy tylko dodanie odpowiedniej opcji w panelu administracyjnym. Co do wyciągania użytkowników którzy mają urodziny:

  1. <?php 
  2. mysql_query("SELECT * FROM
  3. `users`
  4. WHERE 
  5. `additional_info` LIKE '%data_urodzenia: ".date('d-m-Y').";%'");
  6. ?>


Aż tak trudno ułożyć takie zapytanie worriedsmiley.gif ?

Pozdrawiam

Edit:

No cóż w sumie można by jeszcze robić alter table w panelu administracyjnym. Chociaż nie mam pewności czy zapytanie biorące dane z kolumny a nie pola typu text będzie wydajniejsze. W sumie także nie trzeba będzie robić explode przy oddzielaniu danych.
aleksander
a nie lepiejzrobic dodatkową tabelę z atrybuitami? tj tabela:
key |val | userid

i przykładowy wpis
key = gg val = 41843 userid = n
kay = dbirth val = 30.01.1989 userid = n
Diwi
NO tak ale wtedy zapychamy strasznie bazę rekordami. IMHO lepiej wrzucić wszystko do jednej kolumny niż mieć bardzo dużo rekordów. Wg twojego rozwiązania dla n liczby użytkowników miałbym tyle rekordów:

n = ilość userów
v = ilość dodatkowych atrybutów

ilosc_rekordow = n*v

I jest jakiś sens zapychać tak bazę ? Jak dla mnie to lepiej puścić explode w skrypcie niż mieć zapchaną bazę smile.gif

Pozdrawiam
ebe
Nie podoba mi się to trzymanie całych obiektów w jednym polu, operacje na takiej tabeli są bardzo utrudnione, ale może u Ciebie to zda egzamin. Pozatym jak już to nie lepiej wrzucić tam xmla? a nie jakieś "nazwa: procesor" tylko <nazwa>procesor</nazwa> ponadto argument o dużej ilości argumentów do mnie nie trafia, po to są bazy by do nich pchać co popadnie tongue.gif ważniejsze jest to jak z nich wybieramy by było optymalnie. Tak jak ktoś pisał, od atrybutów już krok o wirtualnych klas contentu, a stąd coraz bliżej do prawdziwego cms'a podobnego w swoim założeniu do eZ (choć ten ma nieźle nabrudzone smile.gif)
Diwi
Hmm.. pomysł z xml-em podoba mi się biggrin.gif. Pewnie przerzuce się na niego biggrin.gif. A jak myślisz jak wybierać dane. Parsować jak normalny plik xml ? Chciałbym powiedzieć tylko że będe to pisał pod php 4 więc narazie funkcji z piątki nie biorę pod uwage smile.gif.

Pozdrawiam
ebe
Prasuj to domem, bo jabyś chciał robić na pregach to byłoby bez sensu wtedy lepiej tak jak proponujesz, ale mimo wszystko zachęcam do sposobu z atrybutami i wirtualnymi klasami contentu, a może zainteresuj się xslt i przerabiaj obiekty z bazy na xhtml odrazu, wtedy może nie dajesz użytkonikom większego wyboru jeśli chodzi o strukturę, ale w dobie css2 i css3 grafikę powinno się robić w stylach, podobnie jak pozycjonowanie a nie wykorzystywać do tego xhtml...
mike
Nie no ludzie, opanujcie się.

Trzymać w bazie XML'a, to szczyt braku umiejętności projektowania struktur danych i ich przechowywania! Poza tym poroniony pomysł.

Najlepszym wyjściem jest trzymanie danych w tej sytuacji w bazie, w tabelach. Nawet jeśli miałyby mieś bardzo dużo pól. Dane są wtedy bardzo łatwo dostępne, bez problemu można po nich wyszukiwać, sortować, i.t.d.

A z XML'em :?:
Ciekawe jak byś zrobił cos w stylu:
  1. DELETE
  2. FROM tabela WHERE pole1 = 'value1' AND pole2 = 'value2'

Musiałbys pobrać wszystkie pliki XML sparsować porównać warunkami potem usunąć pola z bazy. A jak masz 10000 rekordów :?: Co wtedy :?:

Szaleństwo i głupota.
Diwi
Cytat
wszystko zachęcam do sposobu z atrybutami i wirtualnymi klasami contentu


Sczerze mówiąc nie wiem o czym mówisz sad.gif. Mógłbyś dokładnie wytłumaczyć o co chodzi ? Bo nie mam pojęcia jak coś takiego implementować (ponieważ nie wiem co to jest biggrin.gif)

Pozdrawiam

Edit:

@Mike_Mech: Ale przy contencie tak niestety nie mam jak zrobić. Rozumiem przy userach da się to zrobić ale przy treści nie ma jak bo wtedy wszystko znowu zostaje przydzielone na stałe :/
.rh-
Cytat(sf @ 1.10.2005, 18:25 ) *
a nie mozesz zrobic dla kazdej tej danej osobnej kolumny? dla nr gg osobna kolumne, dla ragni osobna kolumna itd., np. chcesz wyswietlic uzytkownikow, ktory dzis maja urodziny.. i co robisz? ;] wyciagasz wszystkie rekordy.. potem je obrabiasz w php i spradzasz? ;}


Rozwiązanie które proponujesz nie jest dobre, sprzyja powstawaniu redundancji.


---
~.rh- zwracaj uwagę na daty postów na które odpowiadasz.
Ten wątek jest z przed prawie roku, jest duuuuże prawdpodobieństwo że jest nieaktualny.
~mike_mech
scanner
Cytat(Diwi @ 1.10.2005, 23:20 ) *
NO tak ale wtedy zapychamy strasznie bazę rekordami. IMHO lepiej wrzucić wszystko do jednej kolumny niż mieć bardzo dużo rekordów. Wg twojego rozwiązania dla n liczby użytkowników miałbym tyle rekordów:

n = ilość userów
v = ilość dodatkowych atrybutów

ilosc_rekordow = n*v

I jest jakiś sens zapychać tak bazę ? Jak dla mnie to lepiej puścić explode w skrypcie niż mieć zapchaną bazę smile.gif

Pozdrawiam

Z takikm podejściem, to zacznij lepiej sadzić kwiatki.

A jak myślisz, po co wymyslono bazy danych? Z twoim podejściem, to równie dobrze mozesz napisać wszystko na plikach - efekt będzie ten sam.

Skoro bazy danych składają się (między innymi) z tabel, tabele z kolumn a kolumny maja różne typy, to najlogiczniejszym rozwiązaniem jest korzystanie z tego.
To co Ty próbujesz zrobić jest tak bardzo nielogiczne i udziwnione, że zapewniam Cię, że polegniesz przypierwszej próbie implementacji tego zagadnienia.

Wierz mi, że widziałem bazy danych (produkcyjne, nie testowe), które w pojedyńczej tabeli miały po kilka milionów rekordów a import takiej bazy w Oracle9 potrafił trwać i godzinę - i jakoś producent oprogramowania (firma z 15letnim doświadczeniem) nie wpadł na pomysł, żeby wpychac wszystko w jedno pole. To jest absurd.

Wręcz przeciwnie - powiem Ci, że czasami (często? - zalezy od problemu) stosuje się nadmiarowość danych - oczywiście z zachoweaniem zdrowego rozsądku - właśnie po to, zeby zapewnić sobie przerzucenie jaknajwiększej ilości obliczeń na SQL.

Pozatym - porównaj sobie szybkośc działania wyspecjalizowanego silnika bazy, którego podstawą działania jest mielenie ton informacji a prościutyka funkcyjke explode... Pomyśl nad narzutem prędkości i zuzycia pamięci, które te explode spowoduje.

Jeszcze raz: zastanów się,. dlaczego bazy danych maja typy pól, tabele i wszelkie inne mechanizmy. A póżniej pomyśl nad tym, co chcesz zrobić. Szkoda Twojego czasu i pieniędzy na prąd.
Diwi
Hehe, no i wykopaliście mój temat sprzed prawie roku.

Cytat
Z takikm podejściem, to zacznij lepiej sadzić kwiatki.

A jak myślisz, po co wymyslono bazy danych? Z twoim podejściem, to równie dobrze mozesz napisać wszystko na plikach - efekt będzie ten sam.

Skoro bazy danych składają się (między innymi) z tabel, tabele z kolumn a kolumny maja różne typy, to najlogiczniejszym rozwiązaniem jest korzystanie z tego.
To co Ty próbujesz zrobić jest tak bardzo nielogiczne i udziwnione, że zapewniam Cię, że polegniesz przypierwszej próbie implementacji tego zagadnienia.

Wierz mi, że widziałem bazy danych (produkcyjne, nie testowe), które w pojedyńczej tabeli miały po kilka milionów rekordów a import takiej bazy w Oracle9 potrafił trwać i godzinę - i jakoś producent oprogramowania (firma z 15letnim doświadczeniem) nie wpadł na pomysł, żeby wpychac wszystko w jedno pole. To jest absurd.

Wręcz przeciwnie - powiem Ci, że czasami (często? - zalezy od problemu) stosuje się nadmiarowość danych - oczywiście z zachoweaniem zdrowego rozsądku - właśnie po to, zeby zapewnić sobie przerzucenie jaknajwiększej ilości obliczeń na SQL.

Pozatym - porównaj sobie szybkośc działania wyspecjalizowanego silnika bazy, którego podstawą działania jest mielenie ton informacji a prościutyka funkcyjke explode... Pomyśl nad narzutem prędkości i zuzycia pamięci, które te explode spowoduje.

Jeszcze raz: zastanów się,. dlaczego bazy danych maja typy pól, tabele i wszelkie inne mechanizmy. A póżniej pomyśl nad tym, co chcesz zrobić. Szkoda Twojego czasu i pieniędzy na prąd.


W zupełności się z tobą zgodze. Ten post był pisany bez przemyślenia. W ostateczności zaplanowałem wrzucić każdy element do osobnej kolumny (uznałem że to najlepsze rozwiązanie)

Pozdrawiam
scanner
Cytat(Diwi @ 14.07.2006, 09:06 ) *
Hehe, no i wykopaliście mój temat sprzed prawie roku.

Ups.. spojrzałem tylko na datę ostatniego posta.
Na wszelki wypadek zamykam, skoro temat już wyczerpany smile.gif
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.