Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zarządzanie treścią czyli jak odróżnić obiekty, wywołac odpowiednią klasę
aleksander
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


Witam,

Stworzyłem dzisiaj swój wymarzony silnik drzewek. Taki system można podzielić na dwie oddzielne cześci:

- system drzewek czyli jakby foldery (są trzymane w bazie danych)
- obiekty docelowe, czyli jakby pliki.

Silnik drzewek chcę wykozystać na razie do trzech podsystemów:
- katalog artykułów
- katalog produktów (dla sklepów internetowych)
- download

Mógłbym do każdego z tych trzech podystemów zrobić oddzielną tabelę ze swoimi własnymi drzewkami i zrobić z tego oddzielne moduły, ale nie chcę tego, ponieważ to ma być system elastyczny, jak najbardziej przypominający CMSa, a nie system portalowy, gdzie każdy moduł jest zupełnie odosobniony od reszty systemu.

Wykożystując jeden silnik drzewek natrafiam na problem, że występują tu różne obiekty. Artykuły są przechowywane w XMLu i są obrabiane przez jakiś element systemu, a z kolei produkty mają tabele w DB obrabiane przez zupełnie inny element systemu. Aby to bardziej zobrazować (sam widzę, że to troche zagmatwane) podam przykład:

http://www.php.pl/index.php/phppl/artykuly...ch_programistow
Widać, że aby przechować taki element wystarczą w bazie dwa pola: tytuł i treść

http://www.php.pl/index.php/phppl/skrypty/cms/ez_publish
Tutaj z kolei widać, że potrzeba więcej pól: nazwa, wersja, strona www, recenzja, link itd...

Obiekty są różne a mimo to CMS to rozpoznaje i uruchamia odpowiednią akcję.

I tu pojawia się moje pytanie: jak to zrobić w jakiś elegancki CMSowy ( (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif) ) sposób (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
bela
post
Post #2


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Trzymać wszystko w XMLu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Czyli masz np. artykuł w takiej postaci
  1. <?xml version="1.0"?>
  2. <article>
  3. <title>Foo</title>
  4. <content>
  5. <introduction />
  6. <chapter id="1" />
  7. </content>
  8. </article>


I potem przetwarzasz to za pomocą XSLTa, w rezultacie otrzymasz wynik w takiej formie jaka Ci się zażyczy ( z małym udziałem CSSa (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
aleksander
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


hmm nie za bardzo mi to pasuje, dlatego, że narzuca to sposób przechowywania danych.

Ja chcę np mieć katalog cześci komputerowych, które mają być w bazie danych, w których będą kolumny:
Kod
id, nazwa, typ, opis, cena itd


Z kolei np artykuły chcę przechowywać, tak jak napisaleś wyżej.

Wracamy do punktu wejścia.
Go to the top of the page
+Quote Post
NuLL
post
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Dane(w masz obiekcie pole data) jakiegokolwiek obiektu zapisujesz w bazie w postaci plików XML - różnych plików odpowiednich dla danego obiektu - właśnie pracuje na czymś takim w domku (IMG:http://forum.php.pl/style_emoticons/default/cool.gif) - sporo roboty: szablony, kontrola wersji i wogóle...
Go to the top of the page
+Quote Post
DeyV
post
Post #5





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




Cytat
- system drzewek czyli jakby foldery (są trzymane w bazie danych)
- obiekty docelowe, czyli jakby pliki.

W swoim systemie postanowilem to w pewien sposób połączyć.
To znaczy mam drzewo, ktorze przechowuje nie tylko informacje o folderach, ale również o wszystkich elementach w nich się znajdujących.
Dla drzewa nie ma więc znaczenia, czy w jakimś miejscu pojawi się artykul, news, czy też folder.
Otrzywiście przechowuje jednak taką informację, więc gdy już przyjdzie czas na wyświetlenie konkretnego elementu, to nie ma problemu z rozpoznaniem jego typu, i wyświetleniem odpowiedniej zawartości z odpowiedniego źródła.
W ten sam sposób przygotowuje różne wersje językowe.
To znaczy w drzewku jest jeden wpis, ale do niego odwołują się 4 różne zawartości, pobierane w zależności od potrzeb.

Pozwala to również na znacznie uproszczone linkowanie.
Zawsze bowiem wystaczy podać tylko id liścia w drzewie, a system już sam rozpozna, czym jest podany element.
Go to the top of the page
+Quote Post
NuLL
post
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


A co sądzicie o pomyśle drzewek do obługi systemu zarządzania użytkownikami - rozmyslam nad czymś takim ostatnio
Go to the top of the page
+Quote Post
aleksander
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


Cytat(DeyV @ 2005-02-10 09:24:14)
W swoim systemie postanowilem to w pewien sposób połączyć.
To znaczy mam drzewo, ktorze przechowuje nie tylko informacje o folderach, ale również o wszystkich elementach w nich się znajdujących.
Dla drzewa nie ma więc znaczenia, czy w jakimś miejscu pojawi się artykul, news, czy też folder.
Otrzywiście przechowuje jednak taką informację, więc gdy już przyjdzie czas na wyświetlenie konkretnego elementu, to nie ma problemu z rozpoznaniem jego typu, i wyświetleniem odpowiedniej zawartości z odpowiedniego źródła.
W ten sam sposób przygotowuje różne wersje językowe.
To znaczy w drzewku jest jeden wpis, ale do niego odwołują się 4 różne zawartości, pobierane w zależności od potrzeb.

Pozwala to również na znacznie uproszczone linkowanie.
Zawsze bowiem wystaczy podać tylko id liścia w drzewie, a system już sam rozpozna, czym jest podany element.

Ok więc wydumałem coś takiego:
- pierwsza tabela przechowywuje całe drzewo gałęzi (gdzie każda gałąź ma swoje ID)
- druga tabela przechowywuje powiązania pomiędzy gałęziami i liściami, tzn który liść jest w jakiej gałęzi. jej struktura jest następująca:
Kod
ID - unikalny identyfikator
TREEID - klucz obcy tabeli z gałęziami - pokazuje w którym miejscu jest liść
ACTION - która akcja ma obsłużyć żądanie
PARAMS - parametry dla akcji (potrzebne po to, bo np. akcja artykuły musi rozpoznać, który artykuł wyświetlić
Cechą tego rozwiązania jest to, że nie wystarczy stworzyć nowy liść. Należy go także umieścić w odpowiedniej (dla nas) gałęzi.
Trochę kulawe jeszcze to rozwiazanie (szczególnie z tą kolumną PARAMS), więc czekam na sugestie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Go to the top of the page
+Quote Post
bela
post
Post #8


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


alek, można by do tego dorzucic i18n (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
aleksander
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


ke? a po co?
Go to the top of the page
+Quote Post
bela
post
Post #10


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

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


Hmm, załóżmy, że nagle zajdzie potrzeba przetłumaczenia artykułu na inne języki. Klikasz sobie w interfejsie administracyjnym utwórz tłumaczenie i po kłopocie. A jak dasz na chama wszystko w jednym langu, to co? To tak samo jak z fabrykami (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
aleksander
post
Post #11





Grupa: Przyjaciele php.pl
Postów: 742
Pomógł: 0
Dołączył: 14.12.2003
Skąd: Gdańsk, Trójmiasto

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


chyba to będzie bardziej pasowało waszym wymaganiom:
Cytat(struktura tabel)
tabela 1 - drzewo folderow
-id
-code
-title

tabela2 - obiekty
-id
-code (klucz obcy)
-objecttype (klucz obcy)

tabela 3 - definicje rodzajów obiektów
-id (objecttype)
-name
-action - akcja, która ma zająć się przetwarzaniem obiektu

tabela 4 - dostępne języki
-langid
-title - en-EN, pl-PL itd itp

tabela 5 - wersje językowe
-id obiektu
-langid
API dla wszystkich akcji zarejestrowanych w systemie ( w tabeli 3 ).
Każdy typ obiektu musi mieć swoją klasę.
Klasa musi mieć następujące metody:
  1. <?php
  2. interface action
  3. {
  4. getElement( int $id, string $lang );
  5. getElements( int $start, int $limit, string $lang );
  6. addElement(); //metoda sama pobiera z tablicy $_POST potrzebne dane
  7. updateElement( [int $id] [, string $lang] );
  8. deleteElement( int $id [, $lang] );
  9. findElement( array $pattern ); <= ex. array( 'title' => 'jakis tytuł' ); array( 'content' => 'kawalek tresci' );
  10. }
  11. ?>
Przykładowe wywołanie jakiegoś obiektu:
  1. <?php
  2. //Przykładowe wywołanie obiektu wygląda następująco
  3.  
  4. 1. index.php?action=viewcostam&id=5 // klient wysyła żądanie
  5. 2. kontroler wywołuje akcje viewcostam
  6. 3. 'SELECT * FROM obiekty, obiekty-definicje, wersje-jezykowe WHERE obiekty.id = '$_GET['id']; // akcja viewcostam pobiera informacje o obiekcie.
  7. 4.
  8. $action = obiekty-definicje.action // akcja definuje nazwe kolejnej akcji, id obieektu i jezyk
  9. $id = $_GET['id'];
  10. $lang = 'somelang';
  11.  
  12. 5. $objAction = new {$action}(); //wywoływanie właściwej akcji
  13. $objAction->getElement( $id, $lang );
  14.  
  15. ?>
Jeżeli chcemy dodać powiedzmy artykuł, musimy najpierw stworzyć nowy obiekt artykułu, a następnie dodać do niego treść w jakimś języku.

Hmm mam nadzieję, że wyjaśniłem dostatecznie prosto...

pozdrawiam
Go to the top of the page
+Quote Post
NuLL
post
Post #12





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


A macie jakiś pomysl jak takie wredoctwo przeszukiwać ?

Bo LIKe to ja sobie potrafie wepchnąć do wszukiwarki - ale macie może np. jakiś pomysl ja np. przeszukiwać okreslone pola w documencie ? Ja wpadłem na głupi pomysl(wiem, że jest głupi bo powolny:(). Można podczas przeszukiwania drzewka pobierasz szablon danej klasy treściowej i robić to co trzeba, ale co robić mając w bazie np. 40 szablonow oraz 1000 podstron (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Zabić bazę ?
Go to the top of the page
+Quote Post
ebe
post
Post #13





Grupa: Zarejestrowani
Postów: 150
Pomógł: 1
Dołączył: 23.01.2004

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


Załóżmy że już uporaliśmy się z ww. problemem tj. organizacją kontentu w drzewo. Jak rozwiązać rozwijania drzewa przy użyciu np. Smarty bądź dowolnego innego systemu szablonów tak aby nie implementować logiki w szablon oraz bez wykorzystania JS. Także nie chcemy generować html w logice biznesowej. Załóżmy że chcemy uzyskac coś takiego na stronie po wejściu w automatyczne (oczywiście wpierw klikając artykułu, pralki i automatyczne)
Kod
Artykuły
  Pralki
    Automatyczne
      Model 1
      Model 2
      Model 3
      Model 4
    Pół automatyczne
   Lodówki
   Zmywarki


Ten post edytował ebe 25.03.2005, 18:56:31
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: 24.08.2025 - 14:44