Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaawansowany system newsów jak?
Forum PHP.pl > Forum > PHP > Object-oriented programming
KotWButach
Troszkę nie widziałem gdzie to dać więc jeżeli nie tu to przepraszam.

Otóż próbowałem znaleźć jakiś tutek apropo zaawansowanego w oop systemu newsów z komentarzami ale nie mogę takowego znaleźć za to sa jakieś na necie nazwijmy to proste pluginy, moduliki...

Czy możecie coś polecić bo szukam caly dzień czegoś na poziomie ale bez skutecznie.
CuteOne
A nie myślałeś o napisaniu go samemu? Nawet jeżeli popełnisz jakieś błędy architektoniczne to myślę, że taki system sporo by cię nauczył.

W każdym razie z chęcią służę pomocą (sam zamierzam przysiąść do podobnego projektu)
KotWButach
Już jeden napisałem należy do kategorii mnóstwa błędów. Chciałbym zobaczyć jak pisza to wyjadacze. a jeszcze oparte na mvc to by było wręcz spełnienie marzeń ale wróćmy na ziemie oop to i tak dużo jak na 2012 smile.gif.

Jeżeli nie to można by pomyśleć o wątku omawiającym tego typu moduł oparty na poprawnych wzorcach mvp w zasadzie.
CuteOne
Na moje oko, możesz:
- potraktować newsa jako zwykłe zapytanie do bazy, które zwróci dane do widoku a tam w pętli wyświetlanie ich (mało efektowne ale szybkie wink.gif )
- jako osobny komponent (coś al'a logowanie w cmsach), który jest w pełni skalowalny
- mix dwóch poprzednich:
- pobranie danych do modelu (NewsCollection lub coś w ten deseń - poczytaj o kolekcjach w php)
- wyświetlanie w pętli przy użyciu dekoratorów (np. Widgety z wzorcem obserwator)


(ten 3 przykład to chyba nie do końca mix tongue.gif)
KotWButach
No tak
ale newsy / artykuly - mogą mieć różne pola treści, moga być wył/wł do jakiej kategorii itp i chodzi jak to rozpisać bo napisać klasę która to zrobi nie problem ale rozpisać to mądrze a więc zaprojektować to jest już inna kwestia.
CuteOne
Heh zaczynam Cie lubić smile.gif Widzę nie chcesz robić fuszerki - moje propozycje:
- weź kartkę i ołówek:
a ) rozrysuj co może zawierać tabela news np.
Kod
news_id | author_id | image_id | news_title | news_text | date_create | date_update | news_status

B ) rozrysuj co maja zawierać dodatkowe tabele np. news_user
Kod
news_user_id | news_id (klucz obcy)| news_user_jakiespole

c ) gdy będziesz wiedział co ma zawierać news a co news_kategoria_ogumienie przystąp to rozpisania funkcjonalności
Kod
- CRUD w panelu admina
- news_user, może zawierać komentarze (CRUD komentarzy w panelu)
- news_kategorie_* nie może zawierać komentarzy
- dzięki wzorcowi obserwator news, może zmieniać swój wygląd (kolor tła, czcionka itp) na podstawie:
a ) ilości komentarzy
B ) statusu newsa
itp..


d ) zacznij pisać smile.gif


ps. pamiętaj wzorce to nie restrykcyjny szablon, którego nie można naginać na własne potrzeby
KotWButach
Witam pogłówkowałem jak umiałem

Problemy: Nie wiem jak zrobić podkategorie. Czyli drzewko dla artykułów. Aktualna wersja bazy danych wygląda tak. Wiadomo kontent będzie się rozrastał w miarę dodawania rodzajów stron. No właśnie i jak dodać rodzaj artykułu np. Jeden artykuł zawiera autora i kontent. Natomiast drugi autora kontent date obrazek.

  1. Baza Danych.
  2.  
  3. CREATE TABLE `news` (
  4. `id` INT NOT NULL AUTO_INCREMENT ,
  5. `id_categories` INT NULL ,
  6. `id_status` INT NULL ,
  7. `id_image` INT NULL ,
  8. `id_contents` INT NULL ,
  9. PRIMARY KEY (`id`) );
  10.  
  11. CREATE TABLE `categories` (
  12. `id` INT NOT NULL AUTO_INCREMENT ,
  13. `name` VARCHAR(100) NULL ,
  14. INDEX () ,
  15. PRIMARY KEY (`id`) );
  16.  
  17. CREATE TABLE `status` (
  18. `id` INT NOT NULL AUTO_INCREMENT ,
  19. `active` TINYINT(1) NULL ,
  20. INDEX () ,
  21. PRIMARY KEY (`id`) );
  22.  
  23. CREATE TABLE `image` (
  24. `id` INT NOT NULL AUTO_INCREMENT ,
  25. `thumbnail_image` VARCHAR(100) NULL ,
  26. `image` VARCHAR(100) NULL ,
  27. INDEX () ,
  28. PRIMARY KEY (`id`) );
  29.  
  30. CREATE TABLE `contents` (
  31. `id` INT NOT NULL AUTO_INCREMENT ,
  32. `title` VARCHAR(100) NULL ,
  33. `content` LONGTEXT NULL ,
  34. `date_add` DATETIME NULL ,
  35. `date_edit` DATETIME NULL ,
  36. `autor` VARCHAR(45) NULL ,
  37. INDEX () ,
  38. PRIMARY KEY (`id`) );
  39.  
CuteOne
1. Dlaczego trzymasz statusy w osobnej tabeli?
2.
  1.  
  2. class ArticleEntity {
  3.  
  4. protected $_id;
  5. protected $_image;
  6.  
  7. public function __construct(DbRow $row) {
  8.  
  9. // przypisanie danych do obiektu
  10. }
  11.  
  12. public function getId() {
  13. return $this->_id;
  14. }
  15.  
  16. public function getImage() {
  17. return $this->_image;
  18. }
  19. }
  20.  
  21.  
  22. class ArticleA {
  23.  
  24. public function xxx() {
  25.  
  26. $id = $this>_entity->getId();
  27. $image = $this>_entity->getImage();
  28. }
  29. }
  30.  
  31. class ArticleB {
  32.  
  33. public function xxx() {
  34.  
  35. $image = $this>_entity->getImage();
  36. }
  37. }


Mam nadzieję, że załapiesz o co chodzi


KotWButach
Tak wiem ale jest to sztywny podział. Co jeżeli chciałbym dodać kilkając na przycisk DODAJ NOWY TYP ARTYKUŁU?

Hmm dlaczego, myślałem że tak będzie bardziej przejrzyście ponieważ status artykułu nie należy do jego treści?
CuteOne
Hmmm z Twojego opisu wynika, że chcesz tworzyć CMS'a a nie system newsów/artykułów (to dwa różne zagadnienia). Wpisywanie czegoś na sztywno ma swoje zalety np. szybkość działania, pełna kontrola nad danymi wejścia i wyjścia, obsługa wyrzucanych błędów.

Jeżeli chcesz tworzyć coś dynamicznego to już teraz musisz przewidzieć jak poradzić sobie z błędami, jakich danych będziesz potrzebował oraz jaką funkcjonalność musisz dostarczyć danemu artykułowi/newsowi.

Na moje oko - dynamiczne tworzenie rodzajów artykułów to lekkie przekombinowanie gdy w 5min, możesz napisać nową klasę dla Artykuly_Dzwony dziedziczącą po klasie abstrakcyjnej podstawowe funkcjonalności i dodanie swoich zmian smile.gif
KotWButach
Wiadomo chce jak najszybciej pisac strony pod klientów. I stąd moje dywagacje na ten temat.
Choć myślę że potem mogę dopisąć kreator działający na plikach. Ominę tym samym bazę danych a do klienta trafi szyty na miarę produkt bez zbędnych opcji?
CuteOne
AbstractNews.php
  1. abstract class AbstractNews {
  2.  
  3. public function setXYZ($int) {
  4. if(is_float($int)) {
  5. $this->_xyz = $int;
  6. }
  7. }
  8. }


AbstractNewsKategoria.php
  1. abstract class AbstractNewsKategoria {
  2.  
  3. public function setXYZ($int) {
  4. $this->_xyz = $int * $int;
  5. }
  6. }


NewsKategoriaXXX.php
  1. class NewsKategoriaXXX extends AbstractNewsKategoria{
  2.  
  3. public function setXYZ($int) {
  4. if(is_numeric($int)) {
  5. parent:: setXYZ($int);
  6. }
  7. }
  8. }


NewsHW.php
  1. class NewsHW extends AbstractNews {
  2.  
  3. public function setXYZ($int) {
  4. parent:: setXYZ($int);
  5. }
  6. }
  7.  
  8. class NewsHW extend AbstractNewsKategoria {
  9.  
  10. public function setXYZ($int) {
  11. if(is_float($int)) {
  12. parent:: setXYZ($int);
  13. }
  14. }
  15. }
  16.  
  17. class NewsHW extends NewsKategoriaXXX {
  18.  
  19. public function setXYZ($int) {
  20. if($int !== $this->_cos) {
  21. parent:: setXYZ($int);
  22. }
  23. }
  24. }


Innymi słowy tworzysz sobie klasy abstrakcji z podstawowymi funkcjonalnościami dla każdej "grupy" newsów i korzystasz z nich podczas tworzenia nowych "grup" artykułów/newsów. Dlatego wspomniałem o tym, że musisz jako projektant przewidzieć wszystkie (albo chociaż większość funkcjonalności).
em1X
Myślę, że lepszym rozwiązaniem dla Ciebie w celu nauki OOP będzie zainteresowanie się jakimś porządnym frameworkiem, typu Yii, Symfony czy Zend. Zobaczysz jak wygląda to wszystko od kuchni.
KotWButach
em1X - zle zrozumiałes moje posty. Nie chodzi o naukę oop jako oop lecz poznanie opinii innych dotyczących pisania konkretnych części aplikacji. Jak system newsów. Widomo siedząc w swoim małym świecie nie jestesmy w stanie nabyć lepszej praktyki niż to co przeczytamy czy się nauczymy z tutków czy tak jak piszesz poznając jakiś frem.

Swoja drogą CuteOne dzięki za wytrwałą pomoc na pewno będzie sog. I odrazu przepraszam że nic nie piszę w tym temacie ale dopadła mnie mala choroba i się kuruje. Jak tylko stanę na nogi pojawi się tu troszkę kodu do poprawy.

-----------------------------------

------------------------------------------

Witam
Mam problem chciałbym do newsów dać dość dokładne statystyki.

Najprościej ale uciążliwe dla bazy jest taki układ.

Data - odwiedzono

ale 300 odwiedzin == 300 rekordów itd.

Czy macie jakieś własne przekonania jak to wykonać?
erix
Inkrementuj wartość pola? Chyba że potrzebujesz innych statystyk.
KotWButach
Chciałem pokazywać również wykres jak to się ma ostatnio w modzie.
Crozin
300 odwiedzin -> 300 rekordów to wcale nie jest coś niedobrego. Pamiętaj, że ilość danych nie ma aż tak dużego znaczenia przy odpowiedniej strukturze.
KotWButach
W sumie można by zrobić 365 dni w roku + inkrementacja zamiast bezmyślnie dodawać.
Czy prócz tego robić licznik ogólny czy niech zlicza z X rekordów bo prościej?
Crozin
Wtedy ograniczasz się do zbierania informacji jedynie w zakresie jednego roku. To nie jest bezmyślne dodawanie - przecież każdy taki rekord może zawierać wartościowe informacje. Dokładną datę i czas, adres IP (geolokalizacja) czy informacje o przeglądarce (system, przeglądarka).
Oczywiście licznik ogólny, który będzie jedynie zwiększany o jeden przy każdej wizycie to bardzo dobry pomysł - każdorazowe zliczanie łącznej ilości odwiedzin byłoby niepotrzebnie obciążające.
KotWButach
zle mnie zrozumiałeś. jeden dzień bez godziny(jeden rekord na jeden dzień). ale tu masz racje zamknąłbym sobie drogę na regiony przeglądarkę itd.
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.