Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa/metoda tworząca nowy post na forum phpBB
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
phpion
Witam,
z konieczności napisałem klasę/metodę tworzącą nowy post na forum phpBB. Może komuś się przyda:
  1. <?php
  2. class Helper_Phpbb {
  3. /**
  4.  * Creates new topic for phpBB forum
  5.  * 
  6.  * @access public
  7.  * @static
  8.  * 
  9.  * @param string $title Topic title
  10.  * @param string $content Topic body content
  11.  * @param int $forumId Destination forum
  12.  * @param int $posterId Post author id
  13.  * 
  14.  * @return int Created topic's id. 0 if there were any problems...
  15.  */
  16. static public function createNewTopic($title, $content, $forumId, $posterId) {
  17. $title = mysql_escape_string($title);
  18. $content = mysql_escape_string($content);
  19. $forumId = (int)$forumId;
  20. $poserId = (int)$posterId;
  21.  
  22. mysql_query('START TRANSACTION');
  23.  
  24. // creating new topic
  25. $q = 'INSERT INTO '.TOPICS_TABLE.' SET forum_id='.$forumId.', topic_title="'.$title.'", topic_poster='.$posterId.', topic_time='.time().', topic_views=1, topic_replies=0, topic_status=0, topic_vote=0, topic_type=0, to
  26. ic_first_post_id=0, topic_last_post_id=0, topic_moved_id=0, topic_last_post_uid='.$posterId;
  27. if (!mysql_query($q)) {
  28. mysql_query('ROLLBACK');
  29. return 0;
  30. }
  31.  
  32. $topicId = mysql_insert_id();
  33.  
  34. // creating new post
  35. $q = 'INSERT INTO '.POSTS_TABLE.' SET topic_id='.$topicId.', forum_id='.$forumId.', poster_id='.$posterId.', post_time='.time().', poster_ip="'.encode_ip($_SERVER['REMOTE_ADDR']).'", post_username=NULL, enable_bbcode=1, enable_html=0, enable_smilies=1, ena
    ble_s
  36. g=0, post_edit_time=NULL, post_edit_count=0, raport=0, notice=0';
  37. if (!mysql_query($q)) {
  38. mysql_query('ROLLBACK');
  39. return 0;
  40. }
  41.  
  42. $postId = mysql_insert_id();
  43.  
  44. // creating post content
  45. $q = 'INSERT INTO '.POSTS_TEXT_TABLE.' SET post_id='.$postId.', bbcode_uid="'.make_bbcode_uid2().'", post_subject="'.$title.'", post_text="'.$content.'", mods_notice=NULL';
  46. if (!mysql_query($q)) {
  47. mysql_query('ROLLBACK');
  48. return 0;
  49. }
  50.  
  51. // updating posts table
  52. $q = 'UPDATE '.TOPICS_TABLE.' SET topic_first_post_id='.$postId.', topic_last_post_id='.$postId.' WHERE topic_id='.$topicId.' LIMIT 1';
  53. if (!mysql_query($q)) {
  54. mysql_query('ROLLBACK');
  55. return 0;
  56. }
  57.  
  58. // updating forum statistics
  59. $q = 'UPDATE '.FORUMS_TABLE.' SET forum_posts=forum_posts+1, forum_topics=forum_topics+1, forum_last_post_id='.$postId.' WHERE forum_id='.$forumId.' LIMIT 1';
  60. if (!mysql_query($q)) {
  61. mysql_query('ROLLBACK');
  62. return 0;
  63. }
  64.  
  65. // updating poster statistics
  66. $q = 'UPDATE '.USERS_TABLE.' SET user_posts=user_posts+1 WHERE user_id='.$posterId.' LIMIT 1';
  67. if (!mysql_query($q)) {
  68. mysql_query('ROLLBACK');
  69. return 0;
  70. }
  71.  
  72. mysql_query('COMMIT');
  73.  
  74. return $topicId;
  75. }
  76. }
  77. ?>


pion

PS: Jeśli odpowiedniejszym działem będzie "Algorytmy, klasy, funkcje" proszę o przeniesienie tematu.
bim2
Mhhh, mnie zastanawia tylko po co zamykać to w klasie? smile.gif
phpion
Potrzebowałem takowego cacuszka do serwisu, który tworzę. Serwis posiada już forum właśnie phpBB i była konieczność przy dodawaniu niektórych elementów tworzyć równocześnie posty na forum. Ta klasa (a w zasadzie jedna metoda tongue.gif) spełnia tą rolę.
MMPrime
Czy czasem phpBB nie ma jeszcze kolumn wyszukiwawczych do których trzeba dodać wyrazy zawarte w poście by wyszukiwarka działała.
l0ud
Mhm, z tego co widzę to to raczej nadawało by się jako funkcję niż klasę smile.gif Tak czy siak nie jest zbyt samodzielne - co to są za stałe i co to jest make_bbcode_uid2() ? Domyślam się, że to działa tylko wewnątrz phpBB2, albo trzeba coś dołączyć? No i uwzględniłeś tylko bazę mysql - jak już używasz kodu phpbb2 lepiej było użyć wbudowanej klasy do obsługi bazy.
phpion
Cytat(MMPrime @ 24.04.2008, 20:53:27 ) *
Czy czasem phpBB nie ma jeszcze kolumn wyszukiwawczych do których trzeba dodać wyrazy zawarte w poście by wyszukiwarka działała.

Ssss, tego niestety nie sprawdziłem. Dzięki za cynk, sprawdzę.

Cytat(l0ud @ 24.04.2008, 20:58:01 ) *
Mhm, z tego co widzę to to raczej nadawało by się jako funkcję niż klasę smile.gif Tak czy siak nie jest zbyt samodzielne - co to są za stałe i co to jest make_bbcode_uid2() ? Domyślam się, że to działa tylko wewnątrz phpBB2, albo trzeba coś dołączyć? No i uwzględniłeś tylko bazę mysql - jak już używasz kodu phpbb2 lepiej było użyć wbudowanej klasy do obsługi bazy.

Te stałe i ta funkcją są wbudowane w phpBB. Metoda powinna być odpalana we współpracy z plikami forum. Co do uwzględnienia tylko bazy MySQL: szczerze powiedziawszy pisałem to pod konkretną potrzebę i za bardzo się nie patyczkowałem. Dla mnie jest to przydatne i może komuś się przyda - po to dałem to na forum, nie pod ocenę winksmiley.jpg
Ociu
Oj, oj, oj!
Nie lepiej sobie stworzyć odpowiedni styl aby forum stało by się wortalem/portalem ? smile.gif
phpion
Cytat(Ociu @ 25.04.2008, 10:14:35 ) *
Oj, oj, oj!
Nie lepiej sobie stworzyć odpowiedni styl aby forum stało by się wortalem/portalem ? smile.gif

Oi, oi, oi! winksmiley.jpg
To po co jest forum.php.pl? "Nie lepiej sobie stworzyć odpowiedni styl aby forum stało by się wortalem/portalem ? smile.gif"

Raczej nie. Serwis funkcjonuje sobie swoim życiem, a forum swoim. Wrzucając nową grę do serwisu automatycznie tworzony jest wątek na forum, w którym ludzie mogą się wypowiadać na temat tejże gry. Gra jest powiązana z komentarzami na forum i odwrtonie. Wątek na forum powiązany jest z konkretną grą.
Ociu
Cytat(phpion @ 27.04.2008, 13:35:57 ) *
Oi, oi, oi! winksmiley.jpg
To po co jest forum.php.pl? "Nie lepiej sobie stworzyć odpowiedni styl aby forum stało by się wortalem/portalem ? smile.gif"

Ponieważ My nie połączyliśmy bazy danych wortalu z forum, a Ty łączysz smile.gif Pomijam oczywiście sprawy typu "ostatnie 10 tematów".
phpion
Gwoli ścisłości: nie ja połączyłem, zastałem system już w takim stanie winksmiley.jpg Myślę, że na tym można zakończyć tego offtopa bo conajmniej jeden z nas (nie będę wskazywał palcem) może dostać warna hehehe.

PS: swoją drogą: można offtopować we własnym temacie? biggrin.gif

-- @ociu
Można, ale dostaniesz pstryczka w ucho
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.