Autor Zpráva
Stereoid
Profil *
Ahoj,

Mám tu zdroják z článku z Intervalu o strukturované diskusi pod články, ale nešlape mi.
db mám podle autora článku dobře.

Nic to nehází(ani příspěvky:) a já se s tím sám nevypořádám.




<?
$db_server = "xxxx";
$db_user_name = "xxx";
$db_user_pass = "xxx";
$db_db = "xxx";

$spojeni = MySQL_Connect("$db_server","$db_user_name","$db_user_pass");
mysql_select_db($db_db, $spojeni);

$id = 1;
$query=MySQL_Query("SELECT id, parent_id, text, jmeno FROM prispevky WHERE article_id='$id' ORDER BY date", $spojeni);

//zjistíme si počet příspěvků
$dis_count=MySQL_Num_Rows($query);
echo $dis_count;

$id2n[0]=0;

While ($data = MySQL_Fetch_Array($query)){

$p++;
$id2n[$data[id]]=$p;

$unsort_data[$p]=$data;
}

for ($q=1;$q<=$dis_count;$q++) {

//pole rodičů
$data=$unsort_data[$q];
$parent_list[$q]=$id2n[$data[idautor]];

}

$Discussion_sort= new clsDiscussion_sort($parent_list);

for ($i=1;$i<=$Discussion_sort->Count;$i++) {

$data=$unsort_data[$Discussion_sort->Order[$i]];

$odsazeni=100; //odsazení příspěvků mezi sebou v pixelech;

$indentation=$Discussion_sort->Indentation[$Discussion_sort->Order[$i] ]*$odsazeni-$odsazeni;

$jmeno = $data['jmeno'];
$obsah = $data['obsah'];
$diskuse.="<div class='spot' style='margin-left:" . $indentation . "px'>";
$diskuse.=" <div class='jmeno'>$jmeno</div>";
$diskuse.=" <div class='text'>$obsah</div>";
$diskuse.="</div>";
}

class clsDiscussion_sort {

function clsDiscussion_sort($dis_array) {

global $vysl,$pocty,$N,$pred;

$pred=$dis_array;

$N=count($pred);

$this->Main();

$this->Count=$N;
$this->Order =$vysl; //pořadí
$this->Indentation =$pocty; //odsazení

}

function zanor($akt){

global $pred,$poc,$por,$pocty,$vysl,$index,$N;

//prochazeni do hloubky
$vysl[$index++]=$akt;
for($i=0;$i<$pocty[$akt];$i++){
$this->zanor($por[$poc[$akt]+$i]);
};

}

function Main() {

global $pred,$poc,$por,$pocty,$vysl,$index,$N;

//pripravi ti pomocna pole pro rekurzi
for($i=0;$i<=$N;$i++) //vynulovani pro jistotu
$pocty[$i]=$por[$i]=0;

for($i=1;$i<=$N;$i++) //zjisteni poctu nasledniku
$pocty[$pred[$i]]++;

$poc[0]=0;

for($i=1;$i<=$N;$i++)
$poc[$i]=$poc[$i-1]+$pocty[$i-1]; //pocatky v poli

for($i=1;$i<=$N;$i++) //ulozeni nasledniku do pole
$por[$poc[$pred[$i]]++]=$i;

$poc[0]=0;

for($i=1;$i<=$N;$i++)
$poc[$i]=$poc[$i-1]+$pocty[$i-1]; //pocatky v poli

$index=0;

$this->zanor(0);

//v tuhle chvili jsou ve vysl ulozena cisla prispevku tak jak je budes vypisovat

//Zjisteni odsazeni;
$pocty[0]=0;//0-ty prvek je vsude jen jakysi pomyslny a pomocny...ber ho

// jako pocatek stromu
for ($i=1;$i<=$N;$i++)
$pocty[$i]=$pocty[$pred[$i]]+1;

}
}

echo $diskuse;
?>
medden
Profil *
Skús implementovať to johnovo riešenie, o ktorom tam, ak si dobre pamätám, písal. Čo som sa na to vtedy pozeral vyzeralo to oveľa jednoduchšie ako riešenie prezentované v článku na Intervale.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0