Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl


Whisller
Napisane: 11.03.2009, 20:05:04





Grupa: Zarejestrowani
Postów: 77
Dołączył: 29.03.2006
Skąd: Poznań

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

Sprawdź w webdebugerze czy Propel na pewno ustawia UTF-8 (SET NAMES 'utf8'), jeśli tak to na 99% masz złe kodowanie w bazie. Przynajmniej tak mi się wydaje z tego co opisałeś.
  Forum: Frameworki · Podgląd postu: #582750 · Odpowiedzi: 4 · Wyświetleń: 1 038

Whisller
Napisane: 11.02.2009, 20:39:25





Grupa: Zarejestrowani
Postów: 77
Dołączył: 29.03.2006
Skąd: Poznań

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

/lib/
  Forum: Frameworki · Podgląd postu: #570411 · Odpowiedzi: 2 · Wyświetleń: 824

Whisller
Napisane: 9.10.2008, 20:12:02





Grupa: Zarejestrowani
Postów: 77
Dołączył: 29.03.2006
Skąd: Poznań

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

@Foox
Ale nie musisz tworzyć osobnych plików poza strukturą symfony aby mieć RSS. Pozwól że pokaże Ci bardzo prosty przykład.
W przykładzie wykorzystana jest biblioteka Feed z paczki ezComponents. Ale nic nie stoi na przeszkodzie abyś użył czegoś innego.

1.
Tworzymy nowy moduł, np. Rss

2. Tworzymy akcję "AllAction.class.php" która to będzie odpowiedzialna za wyświetlenie RSS'a dla całego serwisu.

  1. <?php
  2. class AllAction extends sfAction
  3. {
  4.  public function execute( $request )
  5.  {
  6.    # Tworzymy RSS i ustawiamy dla niego podstawowe argumenty
  7.    $feed = new ezcFeed();
  8.    $feed->title       = 'Our feed';
  9.    $feed->description = 'It is our brand new feed';
  10.    $feed->published   = date('Y-m-d', time());
  11.    
  12.    $author = $feed->add('author');
  13.    $author->name  = 'You';
  14.    $author->email = 'mail@example.com';
  15.    
  16.    $link = $feed->add('link');
  17.    $link->href = 'http://example.com';
  18.    
  19.    # Dodajemy wpis do RSS
  20.    $item = $feed->add('item');
  21.    $item->title       = 'First item from atom';
  22.    $item->description = 'Some description';
  23.    $item->published   = date('Y-m-d', time());
  24.    
  25.    $author = $item->add( 'author' );
  26.    $author->name = 'You';
  27.    $author->email = 'mail@example.com';
  28.    
  29.    $link = $item->add( 'link' );
  30.    $link->href = 'http://example.com/something';
  31.    
  32.    $this->getResponse()->setHttpHeader('Content-Type', 'application/xml; charset=utf-8');
  33.    
  34.    $this->getResponse()->setContent( $feed->generate('rss2') );
  35.    return sfView::NONE;
  36.  }
  37. }
  38. ?>


Oczywiście dane do kanału RSS możesz pobrać z bazy danych, pliku etc. Ale osobiście radzę napisanie prostego taska który będzie raz dziennie generował plik rss.xml który będziemy już w akcji (AllAction) tylko zczytywać i wyświetlać. Dzięki temu nasz serwer jak i baza danych nie będzie obciążona ciągłym pobieraniem jak i generowaniem RSS'a.
  Forum: Frameworki · Podgląd postu: #524688 · Odpowiedzi: 6 · Wyświetleń: 2 563

Whisller
Napisane: 17.02.2008, 23:30:34





Grupa: Zarejestrowani
Postów: 77
Dołączył: 29.03.2006
Skąd: Poznań

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

Wtyczka dla mootoolsa http://digitarald.de/project/autocompleter/ oraz na temat wyłączenia podpowiadania http://wiki.mozilla.org/The_autocomplete_a...nts_using_XHTML ( autocomplete="off" ).
  Forum: AJAX · Podgląd postu: #443672 · Odpowiedzi: 1 · Wyświetleń: 775

Whisller
Napisane: 12.02.2008, 14:10:14





Grupa: Zarejestrowani
Postów: 77
Dołączył: 29.03.2006
Skąd: Poznań

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

@cysiaczek
Ja osobiscie nie wstawiał bym pobierania danych newsa w klasie reprezentujacej jego obiekt (News), bo i po co ma ona wiedziec jak i skad pobierac te dane?

Pozwolicie ze przedstawie swoja idee smile.gif

  1. <?
  2.  
  3. /**
  4.  * Klasa reprezentujaca pojedynczy news
  5.  *
  6.  */
  7.  
  8. class News
  9. {
  10. /**
  11.  * W konstruktorze mozemy ustawic dane obiektu. Dla newsa to np. title, body, vi
    sibility etc.
  12. *
  13.  * @param array $args
  14.  */
  15. public function __construct(array $args)
  16. {
  17. isset($args['id'])  ? $this->setId($args['id'])  : '';
  18. isset($args['title'])$this->setTitle($args['title']) : '';
  19. isset($args['body'])  ? $this->setBody($args['body']) : '';
  20. isset($args['visibility']) ? $this->setVisibility($args['visibility']) : $this->setVisibility(false);
  21. }
  22.  
  23. /**
  24.  * @param int $id
  25.  */
  26. public function setId($id)
  27. {
  28. $this->id = (int)$id;
  29. }
  30.  
  31. /**
  32.  * @param string $title
  33.  */
  34. public function setTitle($title)
  35. {
  36. $this->title = $title;
  37. }
  38.  
  39. /**
  40.  * @param string $body
  41.  */
  42. public function setBody($body)
  43. {
  44. $this->body = $body;
  45. }
  46.  
  47. /**
  48.  * @param mixed $visibility
  49.  */
  50. public function setVisibility($visibility)
  51. {
  52. $this->visibility = (int)$visibility;
  53. }
  54.  
  55. private $id = null;
  56. private $title = null;
  57. private $body  = null;
  58. private $visibility = null;
  59. }
  60.  
  61. /**
  62.  * Klasa reprezentujaca managera newsow
  63.  *
  64.  */
  65. class NewsManager
  66. {
  67. /**
  68.  * W zaleznosci do tego czy przekazany zostaje ID newsa wykonujemy jego edycje l
    ub tez dodajemy nowy
  69.  *
  70.  * @param object $news Obiekt reprezentujacy pojedynczy news
  71.  */
  72. public function save(News $news)
  73. {
  74. if ( $news->getId() != null ) {
  75. $this->edit($news);
  76. } else {
  77. $this->add($news);
  78. }
  79. }
  80.  
  81. private function edit(News $news)
  82. {
  83. // Tutaj edycja
  84. }
  85.  
  86. private function add(News $news)
  87. {
  88. // Tutaj dodanie nowego
  89. }
  90.  
  91. private function delete($id)
  92. {
  93. // Usuniecie
  94. }
  95.  
  96. /**
  97.  * @param int $id ID newsa ktory chcemy pobrac
  98.  * @return object Obiekt klasy News
  99.  */
  100. public function getOne($id)
  101. {
  102. // Tutaj wyciagamy informacje na temat newsa, z pliku, bazy etc.
  103. // ...
  104.  
  105. $args = array();
  106. $args['id']  = $result['id'];
  107. $args['title'] = $result['title'];
  108. $args['body']  = $result['body'];
  109. $args['visibility'] = $result['visibility'];
  110.  
  111. return new News($args);
  112. }
  113.  
  114.  
  115. /**
  116.  * @return array Tablica obiektow klasy News
  117.  */
  118. public function getMany()
  119. {
  120. $result = array();
  121.  
  122. foreach( $news AS $oneNews ) {
  123. $args['id']  = $result['id'];
  124. $args['title'] = $result['title'];
  125. $args['body']  = $result['body'];
  126. $args['visibility'] = $result['visibility'];
  127.  
  128. $result[] = new News($args);
  129. }
  130.  
  131. return $result;
  132. }
  133. }
  134.  
  135.  
  136. // Wyciagniecie pojedynczego newsa 
  137. $newsManager = new NewsManager();
  138. $oneNews = $newsManager->getOne(4);
  139. // Teraz odwolujac sie do danych newsa robimy to przy uzyciu $oneNews->getTitle(), ->getBody(), ...
  140.  
  141.  
  142. // Wyciagniecie kilku newsow
  143. $newsmanager = new NewsManager();
  144. foreach( $newsManager->getMany() AS $oneNews ) {
  145. // Tutaj takze mozemy sie odwolywac jak do listingu powyzej tzn. $oneNews->getTitle(), ->getBody()... i bedziemy mieli dane newsa na ktorym w danej interacji operujemy.
  146. }
  147. ?>


To chyba tyle, wydaje mi sie ze nie jest to najgorsze rozwiazanie z kilku wzgledow.
1. Mozemy w latwy sposob robic kopie obiektow - przy np. porownywaniu obiektow przed i po edycji
2. Nie wazne skad pobierzemy dane w NewsManager'rze bo i tak operujemy na obiekcie
3. Nie jestesmy uzaleznieny od nazewnictwa w bazie danych poniewaz stosujemy getery wiec gdy nam sie zmienia nazwa w bazie np. z title na title_a ( a uwierzcie mi takie rzeczy sie zdarzaja tongue.gif ) zmieniamy to tylko w managerze
  Forum: Object-oriented programming · Podgląd postu: #441314 · Odpowiedzi: 16 · Wyświetleń: 2 978


New Posts  Nowe odpowiedzi
No New Posts  Brak nowych odpowiedzi
Hot topic  Popularny temat (Nowe)
No new  Popularny temat (Brak nowych)
Poll  Sonda (Nowe)
No new votes  Sonda (Brak nowych)
Closed  Zamknięty temat
Moved  Przeniesiony temat
 

RSS Wersja Lo-Fi Aktualny czas: 4.05.2024 - 20:25