Gå til innhold

Recursive functions.. Vansklig?


Anbefalte innlegg

Prøver å lage en meny som kan ha evig med subkategorier. dvs En kategori under hovedkategori, og gjerne en kategori under kategorien som er under hovedkategorien etc. Men får det ikke helt til.. Det er vel recursive functions som må brukes til dette? Men syns det er litt vansklig å se for meg hvordan strukturen skal være.. Kan noen hjelpe meg litt? evt komme med eksempler...

Endret av ProXymus
Lenke til kommentar
Videoannonse
Annonse

Jeg har akkurat gjort det samme på siden min. Vet ikke om dette er noen smart løsning, men slik gjorde jeg det:

 

<?

// Denne funksjonen finner hvor mange artikler det er under artikkelen med id=$id
// Vær obs på at denne funskjonen ikke sjekker for løkker

function antall_barn($id) {

$query = 'SELECT * FROM sider WHERE kommerUnder="'.$id.'"';
$result = mysql_query($query);
return mysql_num_rows($result);
 
}

// Denne funskjonen sørger bare for innrykk i menyen

function skriv_tegn($antall, $tegn) {

for ($i=0; $i < $antall; $i++) {	
 $tegn2 = $tegn2.$tegn.' ';
}
return $tegn2;
}

function skriv_ut_menyer($id, $innrykk, $url) {

global $side, $artikkel, $tilgang; // <--- For at funskjonen skal ta med variabler fra utsiden

$query = 'SELECT * FROM sider WHERE kommerUnder="'.$id.'" ORDER BY tittel';
$result = mysql_query($query);
$num_results = mysql_num_rows($result);

for ($i=0; $i < $num_results; $i++) {

 $row = mysql_fetch_array($result);	
 
 if (antall_barn($row["id"]) > 0) {
        // Dette er bare for at de skal se litt anderledes ut
 	if ( er_valgt($row["id"]) ) {
   echo '<div class="valgtKategori"><a aref="'.$url.'/'.$row["id"].'">'.skriv_tegn($innrykk, "-").' - '.$row["meny"].'</a></div>';
   skriv_ut_menyer($row["id"], $innrykk + 1, $url.'/'.$row["id"]);
 	} else {  	
   echo '<div class="kategori"><a href="'.$url.'/'.$row["id"].'">'.skriv_tegn($innrykk, "-").' + '.$row["meny"].'</a></div>';
 	}
 } else {
 	if ( er_valgt($row["id"]) ) {
   echo '<div class="valgtKategori"><a href="'.$url.'/'.$row["id"].'">'.skriv_tegn($innrykk, "-").$row["meny"].'</a></div>';
   skriv_ut_menyer($row["id"], $innrykk + 1, $url.'/'.$row["id"]);
 	} else {
   echo '<div class="kategori"><a href="'.$url.'/'.$row["id"].'">'.skriv_tegn($innrykk, "-").$row["meny"].'</a></div>';
 	}
 }
}
}


skriv_ut_menyer($side, 0, '/'.$side);

?>

 

Det er rester av litt andre funksjoner her. Si ifra hvis det fremdeles er uklart, så skal jeg rydde opp i koden. Jeg har organisert siden min slik at alle artikler kan ha underartikler. Vær obs på at jeg ikke gidder å sjekke for løkker (artikler som ligger under hverandre vil krasje systemet).

 

Jeg bruker også en rekursiv funskjon for å finne stien til en artikkel ut fra id-nummeret:

 

function finn_url( $id ) {
$query = 'SELECT kommerUnder, id FROM sider WHERE id="'.$id.'"';
$result = mysql_query($query);
$num_results = mysql_num_rows($result);	

if ( $num_results > 0 ) {
 $row = mysql_fetch_array($result);
 return finn_url( $row["kommerUnder"] ).'/'.$row["id"];
} else {
 return $id;	
}

}

 

http://anderlin.dyndns.org/data/76/77 <-- Hvis du vil se hvordan det virker

Endret av anderlin
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...