ugrás a tartalomhoz

Weblabor fórum - hogy működik?

Pepita · 2011. Nov. 20. (V), 14.52
Sziasztok Mesterek!
Még semmi sem biztos, de lehet, hogy csinálnék egy fórumozós felületet, amit olyasmi - szerintem nagyon jó! - egymásnak válaszolós rendszerben szeretnék, mint itt. Ha nem titok, kérlek osszátok meg velem (és talán más érdeklődőkkel is) az itteni fórum adatbázisos- és megjelenítési rendszerelvét, legalább elvi szinten; és/vagy segítsetek elindulni.
Terveim szerint a hozzászólások (minden témáé) egy adattáblában lennének, vhogy így:
user_id : aki írta;
tema_id : amelyik témához;
valasz_id : ha ez egy válasz, akkor annak a hozzászólásnak id-je;
id : ennek a hozzászólásnak az azonosítója;
content : maga a duma;
stb. : ha valamit még kihagytam volna.

Kérdéseim:

1. Melyik helyes(ebb), ha (megjelenítéskor) egyszer lekérdezem a táblát a tema_id-re, elmentem tömbbe, és azzal, hogy ki-kinek válaszolt, az eredménytömbön belül keresgélek; vagy:
lekérdezek tema_id-re úgy, hogy valasz_id legyen üres, megyek végig a tömbbön és mindegyik elem "kiírása" után indítok egy lekérdezést, hogy van-e rá válasz, ha van, azokat új tömbbe, stb..., addig a mélységig, amíg kell. Tehát a sok lekérdezés, vagy a nagy (többdimenziós) tömb? (Megvallom, pont az a bajom, hogy erre a nem-tudom-milyen-mélységű dologra szép fv-t írni nincs ötletem.)

2. Ha ilyesmi elrendezést szeretnék, mint itt (válaszok mélység szerint kicsit "jobbrább"), azt elfogadható megoldásnak tartjátok-e, hogy amikor a hozzászólás kiírása éppen fut, akkor úgyis "tudom" a "mélységét", egyszerűen a div-hez írom: style="left: mélység*valami" ?

Elnézést, egy kicsit(?) kuszán fogalmaztam, de hátha valaki érti...
Válaszaitokat előre is köszönöm.
 
1

Drupal

Poetro · 2011. Nov. 20. (V), 15.46
Az itteni fórum a Drupal beépített fóruma, szerintem semmilyen módosítást nem is eszközöltek rajta. Elég ha végigmész a Drupal tartalom, hozzászólás és fórum moduljain, és megtudod, hogyan működik.
2

Köszönöm, de

Pepita · 2011. Nov. 20. (V), 16.04
egyelőre nem szeretnék Drupal-t használni, én szeretném leprogramozni. Abból többet (vagy sorban) tanulnék, Drupal-t inkább később.
3

Akkor legalább nézd meg az

Poetro · 2011. Nov. 20. (V), 17.33
Akkor legalább nézd meg az adatbázis sémát, valamint az egyetlen lekérdezést, ami az összes hozzászólás megjelenítéséhez szükséges.
5

Köszi,

Pepita · 2011. Nov. 20. (V), 19.24
mentettem, át fogom nézni.
13

Időbe telt

Pepita · 2011. Dec. 3. (Szo), 22.17
Elsőre kb. mukkot sem értettem belőle (megjelenítés), időbe telt míg Drupal-nak utánaolvastam és kipróbáltam. Egy csomó D. fv.-t nem értettem, amik ott szerepelnek, de most már "tisztulgat" a kép.
Hanem ez a "1/ 1.1/ 1.1.1/ 1.2/ 2/" szál-"játék" ez hatalmas... Ebből nagyon sokat okultam.
De ami ott is van "div-be div", attól kicsit idegenkedek, bár nincs konkrét infóm róla, hogy az egyes böngészők hogy reagálnak rá nagyobb mélységű struktúrában. Mivel - ha jól láttam - a comment modul css-ében van a bal margin definiálva, nem tudom, hogy lehet azt pl. sminkelni. Én inkább maradnék a $alap+($szint*$eltolás) mellett, div-enként.
4

Én először is a könnyebbik

kuka · 2011. Nov. 20. (V), 18.27
Én először is a könnyebbik utat próbálnám ki: olyan adatbázist választanék amely támogassa a rekurzív lekérdezéseket. Például Oracle, PostgreSQL, MSSQL.
6

Köszönöm a válaszokat,

Pepita · 2011. Nov. 20. (V), 19.30
Ezek szerint 1. kérdésemben egyik megközelítés sem az "igazi". Sokat kell olvassak, aztán meglátjuk.
Mi a helyzet a 2.-al?
7

A 2. pont sem az igazi.

kuka · 2011. Nov. 20. (V), 19.40
A 2. pont sem az igazi. Tegyél minden hozzászólást ugyanolyan div-be, azaz mindegyiknek ugyanannyi legyen a bal széle. Viszont egy div-be ne csak magát a választ tedd, hanem az arra érkezett válaszokat is. Így a válaszok válaszainak a válaszai egyre több div-en belülre kerülnek, tehát egyre több bal szél fogja beljebb tolni őket.

Igaz, hogy picit macerásabb lesz a nyitó és záró div-ek helyes beszúrása, viszont utólag elemien egyszerű lesz például hozzácsapni egy JavaScriptes accordion-féle csiki-csukizót, amellyel egy-egy hozzászólás és a rá kapott válaszok minimalizálhatóak.
8

Ez így ha elsőre

Pepita · 2011. Nov. 20. (V), 20.05
macerásabbnak is hangzik, tényleg szebb megoldásnak tűnik.
Köszönöm!
9

Nested set model

Sanyiii · 2011. Nov. 20. (V), 23.26
1.) Tipikus left-right, egy lekérdezéssel lejön a tree.
10

Magyarul

janoszen · 2011. Nov. 21. (H), 09.07
11

Köszönöm

Pepita · 2011. Nov. 22. (K), 15.29
Köszönöm, mindkettőt (ill. 4-et) át fogom rágni, sztem Poetro cikkét jobb, ha elejéről olvasom. Nem tudtam mire keressek, köszönöm a linkeket!
12

Végeredmény

Pepita · 2011. Nov. 29. (K), 12.29
1. A Drupal nagyon jó, komplex rendszer, köszönet a fejlesztőinek! Viszont kis (fórum)közösség részére, kevés feladat ellátására nemigazán éri meg a sok telepítési- és beállítási macera. Nem is beszélve a saját sminkről, ami megírásához részletesen kell ismerni a működését, és többet kell vele gépészkedni, mint egy saját CSS-re épülő saját programozású honlapon. Tehát csak x látogatottság vagy y adat/lapmennyiség felett jó, de akkor nagyon.
2. Localhost-ra csináltam "próbafórumot", össz. 3 táblával (felhasznalok, temak, hozzaszolasok), hasonló rekurzív fv-nyel, mint Poetro I. cikkében, a kiíratás kicsit több (user_name, comment, stb., div-ben). És ez a "rossz" megoldás 50-110 hozzászólás erelyéig kiírással együtt minden esetben lefutott max. 0.15 sec alatt! Ergo: ilyen hozzászólásszám (/téma) alatt nem érdemes másképp csinálni, mert így gyorsan meg lehet írni egyedi lekérdezéssel. Mellesleg 1004 comment-el már 13 sec lett...
3. Div-et div-be megoldással "emberi szemnek csúnya" HTML kód lett, ezért végül is maradtam a style="left: mélység*valami" div-enkénti beleírás mellett, bár ez inkább szemléleti kérdés.

Mégegyszer köszönöm mindenkinek, sokat tanultam belőle.
14

Hab a tortára

Pepita · 2011. Dec. 3. (Szo), 22.36
Gondoltam, ha már tesztelem a rekurzív megoldást, nem árt, ha tudom: hányszor fut le a fv. Hát valamit elkavarhattam vagy benéztem, mert sokadik próbálkozásra is mindig annyi, amennyi commentet megjelenít. Íme:

include('private/sql_kapcs.php'); //létrehozza kapcsit
$sor=chr(13).chr(10);
$darab = 0;
function Comments($szulo, $szint, $tema, $users) {   
    global $sor;
    global $darab; 
    //echo($darab.'<br />'.$sor);
    // visszakapjuk a $szulo összes gyerekét
    if ($szint==0) { // A 'NULL' érték problémás volt, ezért így.
        $keres='SELECT * FROM `hozzaszolas` '.   
               'WHERE `tema_id` = '.$tema.' AND '.
               '`szulo_id` IS NULL '.
               'ORDER BY `cdate`';
    } else {
        $keres='SELECT * FROM `hozzaszolas` '.   
               'WHERE `tema_id` = '.$tema.' AND '.
               '`szulo_id` = '.$szulo.
               ' ORDER BY `cdate`';
    }
    $result = mysql_query($keres);
    $darab++;
    // minden gyermeket megjelenítünk
    while ($s = mysql_fetch_array($result)) {
        // beljebb toljuk és megjelenítjük a gyerek cuccait:
        echo('<div class="comment" id="" style="margin-left: '
            .(($szint*35)+10).'px;">'.$sor); //eleje <div>
        echo('<a class="user" href="#">'
            .$users[$s['user_id']].'</a> '.$s['cdate'] //Névlink + dátum
            .'<span>'.$darab.'</span>'.$sor); 
        echo($s['comment'].$sor); //Maga a cucc, ebben a cím már <h4>-ben van...
        echo('</div>'.$sor.$sor); //Záró div
        //usleep(500000);
        // újból meghívjuk a függvényt hogy megjelenítsük a gyerek gyerekeit   
        Comments($s['comment_id'], $szint+1, $tema, $users);
    }
}
A $darab mindig annyi lesz a végére, pedig - szerintem - min. 1-el többnek kéne lennie, de inkább a levelek számával többnek, mert annak is lekérdezzük az esetleges gyermekeit, és a "++" (most) közvetlenül a lekérdezéshívás után van.
Megköszönném, ha valaki felvilágosítana, ennek alapdolognak kéne lenni, mégse értem.
(Ez a függvény Poetro cikkének felhasználásával készült.)
15

Én a szülő-gyerek

deejayy · 2011. Dec. 5. (H), 15.20
Én a szülő-gyerek kapcsolatokat feldolgozó rekurzív függvénybe nem teszek adatbázis műveleteket. Olyan szinten pazarló, hogy.

Helyette első lépésben lefetchelem az összes elemet, elrendezem úgy, hogy a rekurzív függvényben könnyen lehessen rá hivatkozni (pl. a nagy-nagy tömb indexei a komment_id-k, amiket db-ből kérdeztem le), és csak azután rajzoltatom ki egy rek. függvénnyel.
16

Igen,

Pepita · 2011. Dec. 6. (K), 01.18
ez a megközelítés "csak" proci és memóriaigényes, a Drupal-megoldás viszont mindkettőnél sokkal jobb.
17

De úgy tudom ez viszont

deejayy · 2011. Dec. 6. (K), 09.08
De úgy tudom ez viszont komment posztnál rak több feladatot a DB-re. Egyébként ez szerintem is jó, még nem kezdtem el vele kísérletezni, csak utánaolvastam.
18

Kicsit

Pepita · 2011. Dec. 7. (Sze), 19.51
"Nagyobbacska" táblája van a commenteknek, de post ugye jóval kevesebb van, mint megjelenítés. Plusz egyetlen lekérdezésből megoldja az "akárhányféle" listát, mindjárt sorbarendezéssel együtt.
Nézd meg fentebb Poetro linkjeit, érdemes!

Szerk:
Figyelmetlen voltam: már utánaolvastál.