Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: system newsow oparty o pliki xml
Forum PHP.pl > Forum > PHP
rvk
Witam

zamierzam w ramach treningu (oop) napisać system newsów oparty na xml (pisze w tym dziale bo nie chodzi mi o oop akurat).
Jak dorobić komentarze do newsa zapisanego w plik xml/txt, zawsze pracowałem na mysql, i teraz są schody

no i czy zapisywanie newsów w formie

  1. <newsy>
  2. <news>
  3. <title>news nr 1</title>
  4. <body>tresc </body>
  5. </news>
  6. <news>
  7. <title>news nr 2</title>
  8. <body>tresc </body>
  9. </news>
  10. <news>
  11. <title>news nr 3</title>
  12. <body>tresc </body>
  13. </news>
  14. itd.
  15. </newsy>


bedzie dobrym rozwiazaniem ?
Fifi209
Ja bym jeszcze dodał id newsów, czas i datę - to raz.

Komentarze:

  1.  
  2. <komentarze>
  3. <komentarz newsid="1" czas="13123123" autor="aaa">Tresc</komentarz>
  4. </komentarze>
  5.  


I coś takiego wystarczy.

Gdy ma być tego więcej to rozbij na pliki.
rvk
bardziej chodzi mi o to jak to połączyć, jak to obrać w php ?
kiedy dzielic pliki ?
Fifi209
Cytat(rvk @ 26.07.2010, 18:40:19 ) *
bardziej chodzi mi o to jak to połączyć, jak to obrać w php ?

Parsujesz za pomocą: simplexml wrzucasz newsy do tablicy i tak samo z komentarzami.
Cytat(rvk @ 26.07.2010, 18:40:19 ) *
kiedy dzielic pliki ?

Gdy np. komentarzy będzie bardzo dużo, wtedy polecałbym opcję, że jeden plik z komentarzem przypisany jest do jednego newsa.
rvk
do tablicy wrzucac po prostu ?

  1. foreach($xml as $value)
  2. {
  3. $array['id'] = $xml->news->id;
  4. $array['title'] = $xml->news->title
  5. itd.
  6. }


jeden plik z komentarzami do kazdego newsa, a czy newsy też dzielic, chyba nie?
Fifi209
Cytat(rvk @ 26.07.2010, 18:59:18 ) *
do tablicy wrzucac po prostu ?

  1. foreach($xml as $value)
  2. {
  3. $array['id'] = $xml->news->id;
  4. $array['title'] = $xml->news->title
  5. itd.
  6. }


jeden plik z komentarzami do kazdego newsa, a czy newsy też dzielic, chyba nie?

Raczej nie będą miały takich długich treści i nie będzie ich tak wiele jak komentarzy.

Co do kodu polecam rzutowanie:
ogólnie zrób tak:
  1. foreach ($xml as $value) {
  2. $array[(int)$value['id']] = (string) $value->tresc;
  3. }
muk4
Zauważ, że jeden news może wywołać flame war więc komentarzy będzie dużo a newsów nie smile.gif

@DOWN
Lepiej dać id kategorii do newsa.
rvk
co do tych newsów to chodziło mi bardziej czy dzielić je na ktegorie po plikach.
everth
Jeśli chcesz to obrać w PHP to zapoznaj się z szablonami XSLT. Znakomicie ułatwiają przekształcanie jednego xml w drugi (choćby HTML). W PHP masz odpowiednie klasy do tego (SimpleXML, DOMDocument, XSLTProcessor).
Crozin
XML to format umożliwiający przechowywanie hierarchicznych danych więc w ogóle nie rozumiem co to za jakieś komentarz newsid="123".

  1. <archive>
  2. <news>
  3. <title>Some title</title>
  4. <content>Some content</content>
  5.  
  6. <comments>
  7. <comment>
  8. <content>Blah blah blah</content>
  9. </comment>
  10. <comment>
  11. <content>Blah blah blah #2</content>
  12. </comment>
  13. </comments>
  14. </news>
  15. </archive>
rvk
jak lepiej zrobic
  1. <newsy>
  2. <news id="1">
  3. itd.
  4. </news>
  5. </newsy>


czy dodac pole <id>1</id> ?

everth
Jak wolisz. Co jest atrybutem/węzłem nie jest sformalizowane. Ładniej wygląda jako węzeł (pole).
Crozin
id/data dodania itp. - to są atrybuty dla aktualności. Co innego treść.
rvk
a czy nie bedzie później problemu ze zrobieniem RSS
np. jak mamy newsy
  1. <archive>
  2. <news>
  3. <title>Some title</title>
  4. <content>Some content</content>
  5.  
  6. <comments>
  7. <comment>
  8. <content>Blah blah blah</content>
  9. </comment>
  10. <comment>
  11. <content>Blah blah blah #2</content>
  12. </comment>
  13. </comments>
  14. </news>
  15. </archive>


a rss wyglada tak
  1. <?xml version="1.0" encoding="ISO-8859-1" ?>
  2. <rss version="2.0">
  3.  
  4. <channel>
  5. <title>W3Schools Home Page</title>
  6. <link>http://www.w3schools.com</link>
  7. <description>Free web building tutorials</description>
  8. <item>
  9. <title>RSS Tutorial</title>
  10. <link>http://www.w3schools.com/rss</link>
  11. <description>New RSS tutorial on W3Schools</description>
  12. </item>
  13. <item>
  14. <title>XML Tutorial</title>
  15. <link>http://www.w3schools.com/xml</link>
  16. <description>New XML tutorial on W3Schools</description>
  17. </item>
  18. </channel>
  19.  
  20. </rss>
  21.  


to jest jakis sposob aby to polazyc ?
Fifi209
Cytat(Crozin @ 26.07.2010, 19:14:51 ) *
XML to format umożliwiający przechowywanie hierarchicznych danych więc w ogóle nie rozumiem co to za jakieś komentarz newsid="123".

  1. <archive>
  2. <news>
  3. <title>Some title</title>
  4. <content>Some content</content>
  5.  
  6. <comments>
  7. <comment>
  8. <content>Blah blah blah</content>
  9. </comment>
  10. <comment>
  11. <content>Blah blah blah #2</content>
  12. </comment>
  13. </comments>
  14. </news>
  15. </archive>


Jeżeli będziesz miał po 100 komentarzy do newsa to powodzenia. ;]
everth
Pierwsza znaleziona klasa. Na tamtej stronce masz ich więcej.

Cytat(fifi209 @ 26.07.2010, 20:36:56 ) *
Jeżeli będziesz miał po 100 komentarzy do newsa to powodzenia. ;]

Ale co to za problem nawigować po XMLu, jak się ma do dyspozycji Xpath i XQuery?
Crozin
Cytat
Jeżeli będziesz miał po 100 komentarzy do newsa to powodzenia. ;]
To, że XML jest tutaj złym rozwiązaniem to już inna bajka. Z narzędzi korzysta się tak jak się powinno i dobiera się właściwie do różnych zastosowań.
Cytat
Ale co to za problem nawigować po XMLu, jak się ma do dyspozycji Xpath i XQuery?
Gdy plik zacząłby nabierać dziesiątek megabajtów danych pojawiłby się problemy z ilością pamięci jak i czasem parsowania samego pliku. Banalne do ominięcia przechowując sparsowany XML bezpośrednio w pamięci.
everth
Nie myślałem że on chce użyć tych danych jako coś w rodzaju bazy danych. Ech, trochę mnie gubi moje przyzwyczajenie do pracy według schematu DB -> XML -> XSLT -> HTML. Zawsze spokojnie może zmapować to drzewo xml na tabelę w Sql
rvk
no cóż chciałem poćwiczyć oop i napisac klase do zarządzania plikami (cw. operacje na plikach i przy okazji xml) a jako płaską baze miec cos jakby xml'a
ale zrobie to jednak chyba z mysql, bo zacześli taką pogawędke...

ale nie bardzo wiem jak ma wygladac klasa mysql...
Crozin
To Ci się trochę pomyliło: XML to hierarchiczna baza danych, MySQL to płaska baza danych.

Cytat
ale nie bardzo wiem jak ma wygladac klasa mysql...
PDO.
everth
Może mieć namiastkę hierarchiczności w tabeli jak ją odpowiednio skonstruuje. Słowo klucz: SQL Tree.
rvk
Cytat(Crozin @ 26.07.2010, 22:06:26 ) *
To Ci się trochę pomyliło: XML to hierarchiczna baza danych, MySQL to płaska baza danych.

PDO.


ale nie chcce korzystac z gotowej, chce napisac własna dla nauki i nie wiem jak ma wygladac..
wookieb
Ok pisz, Ale znacznie stracisz na wydajności w porównaniu do bardzo dobrej natywnej biblioteki.
rvk
ale mi chodzi o nauke oop w tym wypadku.. odradzasz rozumiem ?
Fifi209
Cytat(rvk @ 27.07.2010, 10:11:26 ) *
ale mi chodzi o nauke oop w tym wypadku.. odradzasz rozumiem ?


Ucz się pisząc aplikację opartą o MVC. smile.gif
phpion
Cytat(fifi209 @ 27.07.2010, 11:14:19 ) *
Ucz się pisząc aplikację opartą o MVC. smile.gif

Bardzo mądra porada. Może od razu rzuć kolegę na Zend Framework? Żeby poznawać wzorce projektowe (np. MVC) należy mieć podstawy (solidne?) "czystego" OOP więc klepanie jakiś prostych zestawów klas (nawet durnych jeśli chodzi o późniejsze wykorzystanie) będzie jak najbardziej wskazane.
Fifi209
Cytat(phpion @ 27.07.2010, 10:16:42 ) *
Bardzo mądra porada. Może od razu rzuć kolegę na Zend Framework? Żeby poznawać wzorce projektowe (np. MVC) należy mieć podstawy (solidne?) "czystego" OOP więc klepanie jakiś prostych zestawów klas (nawet durnych jeśli chodzi o późniejsze wykorzystanie) będzie jak najbardziej wskazane.


Rzucając kogoś na głęboką wodę zwykle szybciej uczy się pływać - przynajmniej na tyle, aby przetrwać. smile.gif
Ja jestem zwolennikiem własnej teorii jeżeli chodzi o naukę: pisz to co Ci się może przydać - nigdy nie pisałem świństwa do bazy, ale np. session handlera czy cache system to tak. winksmiley.jpg i nawet z tego korzystałem w innych projektach.
phpion
Cytat(fifi209 @ 27.07.2010, 11:22:48 ) *
Rzucając kogoś na głęboką wodę zwykle szybciej uczy się pływać - przynajmniej na tyle, aby przetrwać. smile.gif

Fajnie, tylko że potem mamy wysyp tematów, w których ludzie nie umieją/nie rozumieją np. dziedziczenia.
Fifi209
Cytat(phpion @ 27.07.2010, 10:33:36 ) *
Fajnie, tylko że potem mamy wysyp tematów, w których ludzie nie umieją/nie rozumieją np. dziedziczenia.

Czytałeś resztę postu mojego? Niech pisze, ale coś co mu się przyda. smile.gif
everth
Podejście ma dobre - tak napisz swoją bazę danych (może być oparta o XML). Jeszcze lepiej to zrobisz jak zapoznasz się przy tym z pewnymi uniwersalnymi algorytmami wyszukiwania, sortowania. To naprawdę ci pomoże w przyszłości. Z mojej strony to mogę ci polecić na początek "Algorytmy, struktury danych i techniki programowania" wyd. Helion (jak to kryptoreklama to można usunąc winksmiley.jpg)
rvk
dziękuję wszystkim za rady i wskazówki, od jakiegoś czasu właśnie noszę się z zamiarem nauki tego OOP
dział o OOP takim czystym przerobiłem m.in w książce heliona "PHP i MySQL księga przykładów" oraz skorzystałem z wielu kursów które były dostępne w internecie.
zamierzam kupić książkę również helionu "PHP, MySQL i MVC"
ponieważ chciałbym pisać aplikację tzn zacząć już właśnie od MVC jak fifi209 polecał. Przeczytałem kilka artykułów o MVC w internecie i jednak nie są one dla mnie tak bardzo pomocne jakbym chciał, mam nadzieję, że w tej książce bardziej ogarne ten wzorzec.

jeszcze raz dziękuję za pomoc, postaram się do końca wakacji na pewno bede edukować się w kierunku oop i mvc a jakieś efekty/skrypty które stworzę na pewno tutaj umieszcze pod kątem jakieś weryfikacji czy coś.

Aktualnie, mam po prostu problem z tym jak klasa ma wyglądać np. taka właśnie jak obsługujaca mysql( bo chodzi mi o taką uniwersalna a nie tylko do jednej tabeli.. z tym się motam), ale chyba lepiej używać PDO, używać również tego przy później projektach już na MVC ?
Fifi209
Cytat(rvk @ 27.07.2010, 13:21:26 ) *
Aktualnie, mam po prostu problem z tym jak klasa ma wyglądać np. taka właśnie jak obsługujaca mysql( bo chodzi mi o taką uniwersalna a nie tylko do jednej tabeli.. z tym się motam), ale chyba lepiej używać PDO, używać również tego przy później projektach już na MVC ?

Dlatego pisałem, że nie ma sensu wynajdywać koło na nowo. smile.gif Użyj PDO w swoim projekcie, da Ci to możliwość np. łatwej zmiany bazy danych z mysql na postgre czy sqlite.
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.