Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zasady pisania na forum Pro

Tematy na forum Pro mogą zakładać jedynie moderatorzy. W otwartych tematach może pisać każdy, kto ma coś fachowego do powiedzenia. Wszystkie posty nie wnoszące nic do tematu będą natychmiast usuwane, a ich autorzy dostaną ostrzeżenie.
Jeśli uważasz, że jakiś temat jest warty dyskusji na tym forum, zgłoś go w temacie Propozycje.

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Wirtualne klasy contentu, Czy ktoś znalazł już rozwiązanie ?
Diwi
post 8.11.2005, 21:28:21
Post #1





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


Witam. Od pewnego czasu mam problem jak rozwiązać sprawę wirtualnych klas contentu no i nie moge nadal wymyślić. Czy ktoś ma swoją zaimplementowaną metodę i chciałby się nią podzielić ?

Pozdrawiam
Go to the top of the page
+Quote Post
aleksander
post 8.11.2005, 21:40:38
Post #2





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

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


eZpublish, polecam przejrze, moj cms bedzie sie na tym wzorowal (jeszcze nie zaimplementowalem tego)
Go to the top of the page
+Quote Post
ebe
post 8.11.2005, 21:51:57
Post #3





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

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


Seth na swojej stronie zamieścił bardzo fajny diagram - szkielet bazy danych w której takie wirtuakne klasy miałyby siedzieć, proponuję zacząć od tego. Ponadto poszukaj na google czegoś o "idk cms".


--------------------
Słyszałem, że macie tutaj jakieś takie php... fajne to, dobre to jest?
Go to the top of the page
+Quote Post
NuLL
post 26.11.2005, 19:10:57
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%)
-----


http://www.meta-language.net/metastorage-tutorial.html

To sie moze przydac - ja swoj sposob znalazlem - narazie tylko na generacje samych klas ale jest i dziala smile.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
bela
post 26.11.2005, 19:40:15
Post #5


Administrator PHPedia.pl


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

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


A ja znalazłem świetny framework, zresztą zobaczcie sami http://www.djangoproject.com/documentation/overview/.

Skończę semestr i coś podobnego sobie w php napiszę. Bardzo mi się podoba generowanie panelu admina.
Gdyby jeszcze w php były klasy wewnętrze...


--------------------
Go to the top of the page
+Quote Post
NuLL
post 26.11.2005, 19:44:56
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%)
-----


Ja mam pytanko co do tematu - macie jakas wizje co robic ze starymi obiektami ? Jest to pytanie stricte teoretyczne.

Bo zalozmy - tworzymy sobie klase ktora ma iles tam pol. Usuwamy jedno pole. Dodajemy jakies inne - i co ? Robimy dzikiego update dla starych obiektow czy budujemy sobie system kontroli wersji klas i pozostawiamy stara definicje a nowa zapisujemy w bazie i tworzac nowy obiekt korzystamy juz z nowej definicji ?

Macie jakies inne pomysly ?


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Diwi
post 26.11.2005, 20:55:49
Post #7





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


No dobrze poczytałem troche o wirtualnych klasach contentu ale głównie pomyśł mam jak to wszystko zrealizować lecz nie mam pomysłu jak przechowywać dane w bazie aby łatwo było je posortować, wyciągnąć tylko te potrzebne itp. Jak narazie to przyszło mi do głowy jedynie tworzenie nowej tabeli content_"nazwatypu" a w niej kolumn które były by jednocześnie atrybutami (np. tytul, tresc, obrazek, data-dodania, autor). Jak myślicie czy takie rozwiązanie jest dobre ?

Pozdrawiam
Go to the top of the page
+Quote Post
NuLL
post 26.11.2005, 23:53:04
Post #8





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

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


Pomysl jak bedzie wtedy wygladac zapytanie pobierajace dane klasy, ktora sklada sie z pola kazdego typu....

Ja mam jedna tabele biggrin.gif


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Diwi
post 26.11.2005, 23:56:50
Post #9





Grupa: Zarejestrowani
Postów: 245
Pomógł: 4
Dołączył: 22.01.2005

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


A jesteś w stanie przedstawić to rozwiązanie czy jest ono utajnione snitch.gif

Pozdrawiam
Go to the top of the page
+Quote Post
NuLL
post 27.11.2005, 00:12:46
Post #10





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

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


Szczerze bede troche niemily sad.gif Utajnione do czasu publikacji mojej nowej zabaweczki - jesli do niej nie dojdzie to ujawnie rozwiazanie - na moja decyzje sklada sie to iz pewna firma jest zainteresowana tym czyms i nie chcialbym bym sobie schrzanic dobrej roboty a moze i zycia... - wybaczcie chlopaki

Tak wyglada sama tabela z atrybutami :

  1. CREATE TABLE object_attribs (
  2. oa_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. object bigint(20) UNSIGNED NOT NULL DEFAULT '0',
  4. name varchar(64) NOT NULL DEFAULT '',
  5. value text NOT NULL,
  6. PRIMARY KEY (oa_id),
  7. KEY oa_id (oa_id,object,name)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Thats all plus seriazlizacja oraz xml.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
aleksander
post 27.11.2005, 00:41:39
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%)
-----


mi sie nasuwa zeby wszystko trzymac w xmlu, ale jak potem optymalnie wyciagac rozne obiekty to juz nie wiem...
Go to the top of the page
+Quote Post
NuLL
post 27.11.2005, 01:43:48
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%)
-----


Ja zapisuje kazda wlasnosc obiektu jako osobne pole w tabeli z atrybutami.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
chmolu
post 27.11.2005, 09:43:47
Post #13





Grupa: Zarejestrowani
Postów: 179
Pomógł: 0
Dołączył: 8.10.2004

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


Ja zaimplementowałem w swoim CMFie strukturę bardzo podobną do tej, którą podał Seth na swoim blogu. Jest to bardzo elastyczne, ale bez cache może być obciążające dla bazy. Żeby wyciągnąć jeden obiekt wraz z atrybutami (w jednym zapytaniu) trzeba połączyć aż 5 tabel:

  1. 'SELECT t.id,
  2. t.child_count,
  3. u.url,
  4. o.obj_id,
  5. o.obj_class_id,
  6. o.obj_class_name,
  7. o.obj_name,
  8. o.obj_date_created,
  9. o.obj_date_modified,
  10. a.attr_name,
  11. a.attr_short_name,
  12. a.attr_type,
  13. av.attr_value
  14. FROM content_tree t
  15. LEFT JOIN url_aliases u ON t.id = u.node
  16. LEFT JOIN content_objects o ON t.obj_id = o.obj_id
  17. LEFT JOIN content_class_attrs a ON a.attr_class_id = o.obj_class_id
  18. LEFT JOIN content_attr_values av ON av.attr_id = a.attr_id
  19. WHERE t.id = :id AND av.attr_obj_id = o.obj_id'


Przez takie skomplikowanie struktury kod php układający to wszystko w logiczne obiekty jest naprawdę zagmatwany (przynajmniej w moim wypadku winksmiley.jpg).

Pomimo złożoności tego rozwiązania sprawdza się ono bardzo dobrze, a tworzenie CMSów jest łatwe i szybkie. Niestety schody zaczynają się, gdy chcemy zaimplementować "obiekty powiązane" znane z ez. Chodzi o to, że jeśli mamy obiekt klasy "artykuł", to zazwyczaj jest z nim związany też obiekt klasy "autor", które musimy wyciągnąć jednocześnie. O ile dla pojedynczego obiektu jest to w miarę proste, to żeby wyciągnąć obiekty powiązane dla listy artykułów trzeba się sporo nakombinować.

Skrypt jest dostępny tutaj.

Jak tylko uporam się z innymi projektami postaram się zrobić porządny refaktoring kodu, bo obecny to prowizorka. Chcę, by funkcja pobierania obiektów miała podobną funkcjonalność, jak w ez (sortowanie, pobieranie tylko w zależności od wartości atrybutu etc.).

Ten post edytował chmolu 27.11.2005, 09:57:57
Go to the top of the page
+Quote Post
Vengeance
post 27.11.2005, 13:05:51
Post #14





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


A może by tak wykorzystać natywne bazy danych? Odpada problem z XMLem snitch.gif


--------------------
Go to the top of the page
+Quote Post
Ociu
post 29.11.2005, 20:55:02
Post #15





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




hm.. ja bym wszystko wpakował do pliku xml i porzucił całkowicie bazę danych winksmiley.jpg .
Plik xml:
  1. <VirtalClass>
  2. <name>Nazwa klasy</name>
  3. <object>nazwa obiektu</object>
  4. <methods>
  5. <param name="__construct" access="public">koood</param>
  6. </methods>
  7. </VirtalClass>

(Alno coś w ten deseń laugh.gif )
Wiadomo. Parser xml:
  1. <?php
  2. class XmlParser {
  3. private $xml;
  4. public function __construct( $file ) {
  5. if(!file_exists($file)) throw new TException();
  6. $this->xml = simplexml_load_file($file);
  7. }
  8. public function get( $var ) {
  9. return $this->xml->$var;
  10. }
  11. }
  12. ?>

Jakieś pomysły co do tego rozwiązania ? Drążyć, czy powrócić do bazy danych ?
Go to the top of the page
+Quote Post
Vengeance
post 29.11.2005, 21:01:49
Post #16





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

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


A chce ci się pisać obsługę wyszukiwania... łączenia wyników... transakcję i wiele innych? :]

Natywne bazy danych doskonale pozwalają na obsługę XMLa, jednak mało gdzie mamy do nich dostęp :/


--------------------
Go to the top of the page
+Quote Post
aleksander
post 29.11.2005, 21:05:01
Post #17





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

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


@Ociu mi sie wydaje że Diwiemy chodziło o cos takiego:
  1. <virtualclass name="article">
  2. <section type="varchar" name="Tytuł" />
  3. <section type="file" name="Obrazek" />
  4. <section type="xml" name="Treść />
  5. </virtualclass>
Go to the top of the page
+Quote Post
NuLL
post 29.11.2005, 21:36:13
Post #18





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

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


Sama definicja klas jest prosta jak barszcz - ja stotuja wlasnie taka z XML-em + jedna wbudowana na stale ( czyt. "Folder" winksmiley.jpg ). Gorszy problem jest z ich uzywaniem tzn - generujesz dzieki tej klasie formularz - nby nic trudnego ale zapis tego potem oraz wyciaganie danych - i zaczynaja sie schody.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
Ace
post 30.11.2005, 09:24:44
Post #19





Grupa: Zarejestrowani
Postów: 216
Pomógł: 0
Dołączył: 9.08.2003
Skąd: Warszawa

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


tak dokladnie to samo mam... Z tym ze xml nie generuje mi klas, sam je sobie definiuje, ale pozniej problem jest w operacjach na zapisanych danych. Pojedynczy typ contentu trzymam w osobnej tabeli, a jak chce wylistowac wszystkie elementy z danego folderu to wyciagam dane z glownej tabeli odnosnie galezi (glowne dane takie jak id, czas utworzenia, kto utworzyl etc...) oraz dobieram do kazdego rekordu odpowiednie dane z odpowiedniej tabelki - strasznie nieefektywne ale narazie wystarcza mi to rozwiazanie, gdyz nie tworze bardzo rozgleglych serwisow. Jednak nie mozna sie ograniczac.

zastanawialem sie tez swego czasu, czy np: w postgresql nie mozna wykonywac takich laczen w jednym zapytaniu, zeby zwraal mi dane z glownej tabeli, oraz odpowiednie dane z jednej tabelki (wszystko jednym zapytaniem)

W jaki sposob przechowywac takie dane Contentu? Pozniej robia sie schody przy np: wyszukiwaniu elementow wedlug konkretnych warunkow.

Pozdrawiam.
Go to the top of the page
+Quote Post
aleksander
post 10.02.2006, 19:05:52
Post #20





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

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


ok odświerzę troche temat ponieważ ten problem w dalszym ciągu mi nie daje spac po nocach:D

Chcę użyc XML do przechowywania contentu. Tabela prosta:
  1. CREATE TABLE content (
  2. id INT
  3. created INT
  4. modified INT
  5. xml TEXT );
przykładowy XML:
  1. <content>
  2. <param type="text" name="title">To jest tytul</param>
  3. <param type="textarea" name="desc">jakis opis</param>
  4. <param type="media-wmv" name="filmik" path="sciezka/plik.wmv" />
  5. </content>

Zalezy mi na XMLu przede wszystkim dlatego że jeste on standardem sieciowym, mogę go sobie dowolnie transformowac dzieki XSLT itp.

I teraz problemy;
- jak wyciągnąc np. tylko tytuł?;] No bo po co do listowania wyciagac caly XML? XPath chyba nie wchodzi w rachubę=]

A gdyby tak np napisac program jakims języku "zwykłym" typu c++ c#, java który by sobie rezydował w pamięci i czekał na prosby od php? CMS mógłby SOAPem wysyłac zapytanie do niego w stylu
  1. <query>
  2. <id>568</id>
  3. <keys>
  4. <key name="title" />
  5. <key name="desc" />
  6. </keys>
  7. </query>
  1. <search>
  2. <param author="aleksander" />
  3. <param text="%php%" />
  4. </search>
a dostawałby ładny sformatowany XML. XPath itp przechodziłoby na stronę programu - modelu.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.11.2019 - 20:03