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
eZpublish, polecam przejrze, moj cms bedzie sie na tym wzorowal (jeszcze nie zaimplementowalem tego)
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".
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
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...
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 ?
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
Pomysl jak bedzie wtedy wygladac zapytanie pobierajace dane klasy, ktora sklada sie z pola kazdego typu....
Ja mam jedna tabele
A jesteś w stanie przedstawić to rozwiązanie czy jest ono utajnione
Pozdrawiam
Szczerze bede troche niemily 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 :
CREATE TABLE object_attribs ( oa_id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT, object bigint(20) UNSIGNED NOT NULL DEFAULT '0', name varchar(64) NOT NULL DEFAULT '', value text NOT NULL, PRIMARY KEY (oa_id), KEY oa_id (oa_id,object,name) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mi sie nasuwa zeby wszystko trzymac w xmlu, ale jak potem optymalnie wyciagac rozne obiekty to juz nie wiem...
Ja zapisuje kazda wlasnosc obiektu jako osobne pole w tabeli z atrybutami.
Ja zaimplementowałem w swoim CMFie strukturę bardzo podobną do tej, którą podał http://www.binarychoice.pl/item/28/. 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:
'SELECT t.id, t.child_count, u.url, o.obj_id, o.obj_class_id, o.obj_class_name, o.obj_name, o.obj_date_created, o.obj_date_modified, a.attr_name, a.attr_short_name, a.attr_type, av.attr_value FROM content_tree t LEFT JOIN url_aliases u ON t.id = u.node LEFT JOIN content_objects o ON t.obj_id = o.obj_id LEFT JOIN content_class_attrs a ON a.attr_class_id = o.obj_class_id LEFT JOIN content_attr_values av ON av.attr_id = a.attr_id WHERE t.id = :id AND av.attr_obj_id = o.obj_id'
A może by tak wykorzystać natywne bazy danych? Odpada problem z XMLem
hm.. ja bym wszystko wpakował do pliku xml i porzucił całkowicie bazę danych .
Plik xml:
<VirtalClass> <name>Nazwa klasy</name> <object>nazwa obiektu</object> <methods> <param name="__construct" access="public">koood</param> </methods> </VirtalClass>
<?php class XmlParser { private $xml; public function __construct( $file ) { if(!http://www.php.net/file_exists($file)) throw new TException(); $this->xml = simplexml_load_file($file); } public function get( $var ) { return $this->xml->$var; } } ?>
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 :/
@Ociu mi sie wydaje że Diwiemy chodziło o cos takiego:
<virtualclass name="article"> <section type="varchar" name="Tytuł" /> <section type="file" name="Obrazek" /> <section type="xml" name="Treść /> </virtualclass>
Sama definicja klas jest prosta jak barszcz - ja stotuja wlasnie taka z XML-em + jedna wbudowana na stale ( czyt. "Folder" ). 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.
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.
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:
przykładowy XML:
CREATE TABLE content ( id INT created INT modified INT xml TEXT );
<content> <param type="text" name="title">To jest tytul</param> <param type="textarea" name="desc">jakis opis</param> <param type="media-wmv" name="filmik" path="sciezka/plik.wmv" /> </content>
<query> <id>568</id> <keys> <key name="title" /> <key name="desc" /> </keys> </query>
a dostawałby ładny sformatowany XML. XPath itp przechodziłoby na stronę programu - modelu.
<search> <param author="aleksander" /> <param text="%php%" /> </search>
TIP - Pobrac tego tak sie nie da. Chyba ze wyrazenia regularne
"Chcę użyc XML do przechowywania contentu. Tabela prosta:"
Wykorzystaj natywną bazę danych
<content> <param type="text" name="title">To jest tytul</param> <param type="textarea" name="desc">jakis opis</param> <param type="media-wmv" name="filmik" path="sciezka/plik.wmv" /> </content>
<?php $xml = simplexml_load_string('tutaj string z bazy'); $result = $xml->xpath('/content/param[@name="title"]'); ?>
eeeee.... patrzcie tu http://dev.mysql.com/tech-resources/articles/mysql-5.1-xml.html
@ActivePlayer: Yay. To mnie zabiło. Więcej takich ciekawostek na PHPpro Innymi słowy, ślicznie dziekuję.
to by idealnie rozwiązało moją sprawę, tylko że mysql 5.1 ;( u mnie hosting nie ma nawet 4.1 ;]
no wlasnie, i tutaj znowu sprawa wraca do korzeni. Ja nawet na localhoscie nie mam mysql 4.1 bo na nim pracuje nad aplikacjami ktore potem beda na 4.0. tak samo z php. niby wiem ze 5 lepsze, ale po co mi to jak i tak nie mam tego gdzie uzyc
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)