PHP-Script.hu
Kiemelt hirdetés:
2017. július 21. 18:39 péntek, ma Dániel névnap van


grafika


Videóbázis


Kategória: PHP - Fórumok
OneForum 2.0
2012.03.02. 13:28

oneforum.pngAz OneForum egy egyszerű, könnyen hasznáható három szintes fórum, mely MySQL adatbázist használ. Az első szint a kategóriák, azon belül lehet topikokat nyitni, majd a topikokban vannak a hozzászólások. Van benne privát üzenet rendszer is, hírek illetve közlemények. A letölthető verzió tartalmazza a teljes magyarítást, adminisztrációs felületen is.


Telepítés:

1. Töltsd le, majd bontsd ki a csatolt állományt.
2. Nyissd meg szövegszerkesztővel a data mappában található config.php-t.
3. Állítsad be a MySQL kapcsolódási adatokat, címsort, url-eket és a webmaster email címét.
4. Töltsed fel a tárhelyedre a programot.
5. Böngészővel nyisd meg a tárhelyeden a oneforum/setup/install.php-t, először létrehozza az adatbázis tábláit majd a következő lépésben az adminisztrátori felhasználót hozhatod létre.
6. Ha kész vagy a telepítéssel töröljed a tárheyledről a setup mappát.

Most már használhatod a fórumot, az oneforum/admin oldalon érheted ez az adminisztrációs felületet.

A program weboldala: http://www.onescripts.de/oneforum_en.php

 Fájl letöltése: 

 Szerző: userraczger Hozzászólások(21) Hozzászólások Megosztás az iWiW-en Megosztás az Facebook-on Megosztás a Google Reader-ben Megosztás az Twitter-en 

1 | 2 | 3Előre
Listázás:  Idő szerint:
Webprogramozás arr Scriptek info OneForum 2.0
(#21) kojak 2013.03.23. 19:53

kojak
kojak
Kezdő

Üdv mindenkinek!

Sikeresen be tudtam üzemelni a fórumot.
Olyan kérdésem lenne a hozzáértőktől, mivel teljesen kezdő vagyok, hogy arra van-e mód, hogy a teljes fórumot a saját oldalam középső szegmensébe beillesszem?
Tehát az én oldalamban jelenjen meg a fórum.

Előre is köszönöm!

(#20) nicolaum válasza erre: (#19) Gabor 2013.01.09. 16:27

nicolaum
nicolaum
Kezdő

Nagyon jól működik, köszönöm szépen!

(#19) Gabor válasza erre: (#18) nicolaum 2013.01.08. 09:13

Gabor
Gabor
Szerkesztő

De természetesen ezt is mint mindent meg lehet oldani. De előbb engedj meg egy javítást. A oneforum elég régi script gondolom ezért fordul elő sok oldalon hogy olyan változóhoz próbál hozzáférni ami nincs. Mivel az embedded_topic.php fájlt a topic.php átírásával készítettem ez a hiba benne maradt ebben is. Így ha valaki nincs bejelentkezve egy csúnya figyelmeztetés jelenik meg az oldal alján ezért:

1
2
3
4
5
6
7
8
9
 
//ezt a sort keresd meg az embedded_topic.php-ban:
if(!$_SESSION['signed_in']) {
 
//és cseréld le erre:
if(!isset($_SESSION['signed_in']) or !$_SESSION['signed_in']) {
 
//egyébként ezt minden más olyan fájlban is elvégezheted ahol valami hasonló hibaüzenetet fedezel fel.
 


Ezek után pedig a probléma ugye, hogy a reply.php átirányítása azt veszi figyelembe hogy melyik témához szóltál hozzá, és oda irányít. Mi pedig a múltkor nem készítettük fel arra hogy lehet hogy máshonnan érkezett a felhasználó.
Ezért most előbb az embedded_topic.php-ban végzünk egy kis változtatást:
1
2
3
4
5
6
7
8
 
//keresd meg ezt:
include_once('data/flood.php');
//ez alá a sor alá szúrd be ezeket
 
/*uj action url*/
    $action = $forum_url.'/reply.php?continue='.urlencode($_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']).'&id='.$row['topic_id'];
 

a fájlban ez után egy hosszú echo jön ami a formot jeleníti meg ebben a
<form name=\"topic\" method=\"post\" action=\"
részt kell megkeresned (2. sor). Itt az action \" -től \" -ig már nem emlékszem micsoda de mindegy is mert írd át $action -re így az új elkészült sor:
1
2
3
4
5
6
7
8
9
 
echo "...
 
//ez a szerkesztett sor:
<form name=\"topic\" method=\"post\" action=\"$action\">
 
 
...";
 


Így most már az embedded_topic.php egy continue nevű get változóban, át fogja adni a reply.php-nek hogy honnan érkezett a felhasználó. Most már csak a reply.php-nek kell ennek megfelelően cselekednie.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
//reply.php
//79-85. sor -ban levő részt jelöld ki
//és teljes egészében cseréld erre:
 
    $continue = (isset($_GET['continue']))?'http://'.$_SERVER['SERVER_NAME'].htmlentities($_GET['continue']):'topic.php?id=' . htmlentities($_GET['id']);
    echo '<br /><p class="right">&nbsp;&nbsp;&nbsp;Your reply message has successfully entered!</strong></p>';
    echo '<p><meta http-equiv="refresh" content="' . $autoforward . '; URL='. $continue .'">' .
                     '&nbsp;&nbsp;&nbsp;<small>You will be redirected in ' . $autoforward . ' seconds...</small></p><br />';
    
    echo '<p>&nbsp;&nbsp;&nbsp;If you are not redirected - [ <a href="'. $continue .'">Your Reply</a> ]</p><br />';
    
    echo '</td></tr>';
 


Így már működnie kell. Sok sikert kep

(#18) nicolaum válasza erre: (#12) Gabor 2013.01.06. 17:38

nicolaum
nicolaum
Kezdő

Az nagyon jó, hogy nem csak a hozzászólásokat írja ki az énoldalamra, hanem ugyanitt választ is lehet írni. A baj csak az, hogy a válasz elküldésekor átrak az oneforum mappa aktuális topikjába, és nem hagy az énoldalamon, az ott is megjelenő topikkal. Ezt nem lehetne valahogy megoldani? Sokkal elegánsabb lenne, mint újra visszakeresni a már egyszer megnyított énoldalamat. Nem tudok rájönni, hogy lehetne ezt megoldani.

(#17) Gabor válasza erre: (#16) RimElek 2012.12.22. 20:44

Gabor
Gabor
Szerkesztő

Nem én azt a könyvet nem olvastam, de valahol máshol olvastam ilyet az biztos. Viszont most megnéztem a php oldalán és abszolút igazad van. Csak az error level a különbség. Kössz a javítást kepMindig tanulok valamit.

(#16) RimElek válasza erre: (#14) Gabor 2012.12.22. 18:22

RimElek
RimElek
VIP

Csak egy megjegyzés a megjegyzéshez :)

Jól sejtem, hogy a require és include különbségét a php 24 óra alatt-ból olvastad?

A require is akkor hajtódik végre, amikor már fut a program. Nem előtte. Ha előtte történne, akkor bárhova tennéd a require-t, az minden más kimenet előtt futna le. És nem tehetnél bele kiírást.

Ugyanúgy teheted if-be a require-t is. A különbség tényleg csak az, hogy a require fatal error-ral leállítja a script futását, ha a fájl nem elérhető. Ezért require. Azaz magyarul "szükséges" vagy "kötelező".

Az if-hez mindössze annyi köze lehet, hogy a require és az include is alapértelmezetten egy 1-est ad vissza akkor, ha nem definiálod felül és sikeresen beilleszti a megadott fájlt. Ha viszont a fájl nem létezik, akkor az include false-szal tér vissza. Így a kukac operátorral elnyomva a warning hibaüzenetet, az if feltételében használhatod file_exists nélkül:

1
2
3
if ( @include "egyfajl.php" ) {
     //Ha sikeresen beillesztette a fájlt, ez még lefut
}


Valószínűleg erre gondolhatott a könyv is ( ahol valamikor én is olvastam ilyet és nem értettem ). De a fájlokban használhatsz return-t. És visszaadhatsz false-t is. Ha így teszel, akkor már nem tudod meg ebből sem, hogy a fájl nem létezik, vagy a te false-od miatt tért vissza false-szal. Valamint a require is használható a feltételben, mivel ha a program leáll, akkor az if törzse sem tud lefutni, tehát nagyobb baj nem lesz, mintha if-en kívül teszed:

parosmp.php
1
2
3
<?php
//páros-e a másodpercek száma
return !(intval(date('s')) % 2) ;


index.php
1
2
3
4
5
6
7
8
Páros-e: <?php 
 
if (require "parosmp.php") {
   echo "Igen";
} else {
   echo "Nem";
}
?>


Utoljára szerkesztette: RimElek 2012.12.22. 18:24
(#15) nicolaum válasza erre: (#14) Gabor 2012.12.22. 17:30

nicolaum
nicolaum
Kezdő

Nagyon jól működik, pont így képzeltem el. Már csak az OneForum és a saját lapom stilusát kell összecsiszolni, de az már fog menni. Köszönöm a segítséget!

(#14) Gabor válasza erre: (#13) nicolaum 2012.12.22. 15:49

Gabor
Gabor
Szerkesztő

Ez a hibaüzenet hogy Call to undefined fuction azt jelenti hogy a függvény (embed_topic) nincs definiálva. Ha a topicot nem találná azt írná ki. Ez azért van mert a fájlban ahol meghívod ezt a függvényt (embed_topic) előbb létre kell azt hozni, meg kell írni. De már meg is van írva, az újonnan létrehozott embedded_topic.php-ban (azt hiszem így neveztük el ha rosszul emlékszem akkor abban a fájlban ahova raktad). A php képes futásidőben más fájlok tartalmát betölteni így nem kell minden fájl elején újra megírni ugyanazt a függvényt. Erre az include vagy a require utasítás használható. Én az includeot javasoltam.
Ezért a fájl elejére minden más elé:

1
<?php include "oneforum/embedded_topic.php";

Így betölti a fájl tartalmát és ezzel a függvény definícióját is. Ezután már megtudod hívni és működni fog.
megj.: a require és az include közt az a különbség hogy a require utasítást még azelőtt hajtja végre a php mielőtt futtatni kezdené a programot. Tehát ez egyszerű szövegfeldolgozás, bemásolja a másik fájl tartalmát. Ha a require utasítás nem találja meg a fájlt Fatal error-t dob ->leáll a program futása. Az include ezzel szemben futtatás közben értékelődik ki így például használható egy if-en belül. (És nem is dob falat errort hanem csak egy warningot)

(#13) nicolaum válasza erre: (#12) Gabor 2012.12.20. 17:35

nicolaum
nicolaum
Kezdő

Köszönöm szépen a segítséget, de nem boldogulok, mert a topic azonosítóját nem fogadja el: Fatal error: Call to undefined function: embed_topic() in /mnt/ultraweb/l/lo/lovasok/sajatoldal.php on line 16
Hiányos tudásom miatt akárhogyan próbálkozom, nem tudja azonosítani. Az adattáblában az első topic id-je például 1, de ezt hiába írom be.

(#12) Gabor válasza erre: (#10) nicolaum 2012.12.20. 12:48

Gabor
Gabor
Szerkesztő

Ezt a fájlt mentsd el embedded_topic.php néven a oneforum könyvtárába ahol a topic.php is van

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
<?php 
include('data/config.php');
ob_start();
include('layout/header.php');
ob_end_clean();
include_once('data/bbcode.php');
include_once('data/badwords.php');
 
function embed_topic($topic_id,$forum_url=".") {
 
?>
<script type="text/javascript">
function insert(was) {
document.topic.reply.value += was + " ";
document.topic.reply.focus();
}
</script>
<table width="900" border="0" align="center" cellpadding="0" cellspacing="0"><a name="top" id="top"></a>
  <tr>
    <td><?php
 
    $sql = "SELECT
                topics.topic_id,
                topics.topic_subject,
                topics.topic_cat,
                categories.cat_id,
                categories.cat_name
            FROM
                topics
            LEFT JOIN
                categories
              ON
                topics.topic_cat = categories.cat_id
            WHERE
                topic_id = " . mysql_real_escape_string($topic_id);
            
    $result = mysql_query($sql);
    $id = mysql_real_escape_string($topic_id);
 
    if(!$result)
    {
    echo '<br /><p class="false">This topic could not be found - Try again.</p><br />';
    
    }else{
    
    if(mysql_num_rows($result) == 0)
    {
    echo '<br /><p class="false">This topic does not exist!</p><br />';
    
    }else{
    
    if($row = mysql_fetch_assoc($result))
    {
    
        $viewsql = "UPDATE
                        topics
                    SET
                        topic_views = topic_views + 1
                    WHERE
                        topic_id = " . $id;
            
        $viewcount = mysql_query($viewsql);
          
    echo '<table width="100%" cellpadding="5" class="maintable">';
    $id = mysql_real_escape_string($topic_id);
    $posts_sql = "SELECT
                    posts.post_topic,
                    posts.post_content,
                    posts.post_date,
                    posts.post_by,
                    users.user_id,
                    users.user_name,
                    users.user_date,
                    users.user_level,
                    user_signature
                  FROM
                    posts
                  LEFT JOIN
                    users
                  ON
                    posts.post_by = users.user_id
                  WHERE
                    posts.post_topic = '" . $id . "';";
                
    $posts_result = mysql_query($posts_sql);
    
    if(!$posts_result) {
    
    echo '<tr><td><p class="false">&nbsp;&nbsp;&nbsp;This topic could not be displayed.</p>
                  <p>MySQL says: '.mysql_errno().': '.mysql_error().'</td></tr>';
    echo '</table>';
    
    }else{
        while($posts_row = mysql_fetch_assoc($posts_result))
        {
        echo '<tr>
                <td width="25%"><p><strong><u><a href="'.$forum_url.'/profile.php?user_id=' . $posts_row['user_id'] . '">' . htmlentities($posts_row['user_name'], ENT_QUOTES) . '</a></u></strong><br/><br /><small>'; if($posts_row['user_level']==0) {
                                                        echo '<span class="user">User</span>';
                                                    }elseif ($posts_row['user_level']==2) {
                                                        echo '<span class="mod">Moderator</span>';
                                                    }elseif ($posts_row['user_level']==1) {
                                                        echo '<span class="admin">Administrator</span>'; }
        echo '</small><br /><span class="blue">Dabei Seit:</span> ' . date('d.m.Y', strtotime($posts_row['user_date'])) . '</p></td>
                <td width="75%">' . preg_replace( "/(src|href)=\"(layout.*)\"/i","\$1=\"$forum_url/\$2\" ",parseBBCode2HTML(delBad(nl2br(stripslashes(strip_tags($posts_row['post_content']))))) ) . '</td>
              </tr>
              <tr>
                <td width="25%">&nbsp;</td>
                <td width="75%">'; if($posts_row['user_signature']) {
                                       echo '<div id="line">&nbsp;</div><br /><small>' . $posts_row['user_signature'] . '</small>';
                                   }elseif ($posts_row['user_signature']== "") {
                                       echo ''; }
        echo '</td>
              </tr>
              <tr>
                <td bgcolor="#efefef"><small>' . date('d.m.Y - H:i', strtotime($posts_row['post_date'])) . '</small></td>
                <td bgcolor="#efefef" align="right">
                <a href="#reply"><img src="'.$forum_url.'/layout/icons/answer.png" width="16" height="16" border="0" /></a>&nbsp;&nbsp;<a href="'.$forum_url.'/profile.php?user_id=' . $posts_row['user_id'] . '"><img src="'.$forum_url.'/layout/icons/profile.png" width="16" height="16" border="0" /></a>&nbsp;&nbsp;<a href="#top"><img src="'.$forum_url.'/layout/icons/top.png" width="16" height="16" border="0" /></a></td>
              </tr>';
        
        }
        
        echo '</table>';
    }
    
    echo '<tr height="20 px"><td></td></tr>'; //placeholder
    
    if(!$_SESSION['signed_in']) {
    
    echo '<tr><td colspan="2"><a name="reply" id="reply"></a>&nbsp;You have to <a href="'.$forum_url.'/signin.php">sign in</a> to reply. - Not <a href="'.$forum_url.'/signup.php">registered</a>?<br /><br /></td></tr>';
    
    }else{
    
    include_once('data/flood.php');
    
            echo "<tr><td colspan=\"2\" class=\"maintable\"><a name=\"reply\" id=\"reply\"></a><h1>&nbsp;Reply</h1><br />
                  <form name=\"topic\" method=\"post\" action=\"$forum_url/reply.php?id=" . $row['topic_id'] . "\">
                  &nbsp;<a href=\"javascript:insert('<b></b>')\"><img src=\"$forum_url/layout/images/bold.png\" width=\"32\" height=\"34\" border=\"0\" title=\"Bold\"></a><a href=\"javascript:insert('<i></i>')\"><img src=\"$forum_url/layout/images/kursiv.png\" width=\"31\" height=\"34\" border=\"0\" title=\"Italic\"></a><a href=\"javascript:insert('<u></u>')\"><img src=\"$forum_url/layout/images/underline.png\" width=\"31\" height=\"34\" border=\"0\" title=\"Underline\"></a><a href=\"javascript:insert('[url][/url]')\"><img src=\"$forum_url/layout/images/link.png\" width=\"31\" height=\"34\" border=\"0\" title=\"Hyperlink (mit http://)\"></a><br />
                  &nbsp;<textarea name=\"reply\" class=\"fields\"></textarea><br />
                  <p>&nbsp;<a href=\"javascript:insert(':P','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/000.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert(':)','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/001.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert(';)','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/002.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert(':(','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/003.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert('*grr*','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/004.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert('o_o','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/005.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert('*_*','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/006.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert('._.','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/007.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert('-_-','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/008.gif\" width=\"15\" height=\"14\" /></a>
<a href=\"javascript:insert(':D','')\"><img border=\"0\" src=\"$forum_url/layout/smileys/009.gif\" width=\"15\" height=\"14\" /></a></p>
                    <p><small>Spam protection *</small><br />
                    <strong>The sum of " . $random1 . " + " . $code . " =</strong> <input size=\"5\" name=\"zip\" id=\"Spamschutz\" type=\"text\" class=\"fields\" /><input type=\"hidden\" name=\"zip2\" value=" . $rand_result . " /></p>
                    <p>&nbsp;<input type=\"submit\" class=\"button\" value=\"Antworten\" alt=\"Reply\"/></p>
                    </form></td></tr><tr height=\"30 px\"><td></td></tr>";
                }
            }
        }
    }
    
    echo '</table>';
 
?></td>
  </tr>
</table>
<?php   
} //end of embed topic function
 
?>


Ha például az oldalad az index.php (www.teoldalad.hu/index.php) és a oneforum a oneforum mappában van (www.teoldalad.hu/oneforum/) akkor a következő képpen tudsz beágyazni egy oldalba a topicot
... oldal kódja ...
<?php embed_topic($topic_id,"oneforum"); ?>
... oldal tovább ...

Tipp 1: amint látod a függvénynek két paramétere van. Az első a topic azonosítója azt vagy a $topic_id helyére behelyettesíted vagy ebbe a változóba teszed bele amikor akarod. A második a fórum elérési útja a hívó oldalhoz képest. Ez a példában ugyebár a oneforum mappa volt

Tipp 2: szebbé teheted a kinézetet ha az oldal ahol használod a függvényt a html kódban a fejrészben tartalmazza ezt a sort
<link rel="stylesheet" href="oneforum/layout/design.css">
de persze csinálhatsz egyedi kinézetet is. Sok szerencsét

Listázás:  Idő szerint:
1 | 2 | 3Előre


© 2006-2017 PHP-Script.hu, Minden jog fenntartva!
Design: Rácz Gergely, Oldalmotor: Rácz Gergely
Impresszum - Oldaltörténet - Oldalszabályzat