Gå til innhold

Anbefalte innlegg

Skrevet

Jeg ønsker å lage et sidekart som lister opp alle kategoriene og underkategoriene på en nettside. Nettsiden bruker database og kolonnene er som følger:

 

- "Type" Navn på kategorien.

- "Under" Navn på hovedkategorien, underkategorien ligger under.

 

Her er koden jeg bruker for å hente ut kategoriene, men hvordan skal jeg få til å hente ut underkategoriene så de havner under den korrekte hovedkategorien?

 

Klikk for å se/fjerne innholdet nedenfor
<?php

include_once('config.php');

extract($config);

// Connects to your Database

 

mysql_connect("", "", "") or die(mysql_error());

mysql_select_db("") or die(mysql_error());

 

//Remove mode removes data for a given ID

if ( $mode=="remove")

{

mysql_query ("DELETE FROM {$prefix}cms1 where id=$id");

 

}

 

$data = mysql_query("SELECT * FROM {$prefix}cms1 WHERE length(under)=0 ORDER BY id ASC")

 

or die(mysql_error());

Print "<table border=0 cellpadding=3>";

Print "<tr><th width=250></th></tr>";

while($info = mysql_fetch_array( $data ))

{

Print "<td>".$info['type'] . "</td></td></tr> ";

}

Print "</table><p>";

Print "<a href=endre_rekke.php title=\"Endre rekkefølge\">Endre rekkefølge</a> ";

?>

 

Eks:

 

Kontakt

- Meg

- Familien min

 

Om meg

- Interesser

- Venner

Videoannonse
Annonse
Skrevet (endret)

Du kjører en select på "overkategorier" inni while løkken legger du en select på "underkategorier"..

 

f.eks:

 

$resultat = mysql_query("select * from hkategorier");

while($rad = mysql_fetch_array($resultat)) {
 echo $rad['navn'];
 $overkat = $rad['id'];

$resultat2 = mysql_query("select * from ukategorier where overkat='$overkat'");

while($rad2 = mysql_fetch_array($resultat2)) {
 echo("- ".$rad2['navn']."<br />");
}
}

 

I denne spørringen har jeg tatt utgangspunkt i at du har disse tabellene:

 

- hkategorier (Kontakt og Om meg)

Felt: id, navn

 

- ukategorier (Meg, Familien min, Interesser, Venner)

Felt: id, navn (Her brukes id for å knytte artikler til kategori ol.)

 

Håper du fikk noe ut av dette :)

Endret av goggen90
Skrevet

Om du ønsker å lage et side kart, så ikke bruk table, dette er ikke særlig SEO/F

Bruk unsorted list

<ul>
<li title="Min hjemmeside">www.minside.no
  <ul>
    <li title="Hovedsiden">index.php</li>
    <li title="bildegalleri">galleri.php</li>
  </ul>
</li>
</ul>

Skrevet

Personleg så brukar eg ein funksjon som fungerar slik:

  • Henter alle sider frå databasen.
  • I ei while løkke går eg igjennom alle resultata og plasserar dei i ein array etter dette formatet: [overside][] => [informasjon om sida]
  • Og så til slutt så har eg ein rekursiv funksjon som looper alle topnivå sidene i $sider[0] og vist sida har underkategorier $sider[sideid] så blir funksjonen kalla på nytt men denne gangen looper den $sider[sideid]. Og slik fortsette det.

$sider kan da se slik ut etter steg to:

$sider = array(
   [0] => array(
         [0] => array(informasjon om den første topnivå sida),
         [1] => array(informasjon om den andre topnivå sida)
   ),
   [10] => array(
         [0] => array(informasjon om den første undersida til sida med id 10)
   )
);

 

Sjølve funksjonen er det ingen vist i at eg viser her ettersom at den baserar seg på eit sjølvskreve klasse bibliotek men eg håper lista over kan hjelpe deg vidare :)

Skrevet (endret)

$sql = "select * from {$prefix}cms1 where length(under)=0;";
$res = mysql_query($sql);
$hovedKat = array()
while($row = mysql_fetch_assoc($res))
{
 array_push($hovedKat, $row);
}
mysql_free_result($res);

foreach($hovedKat as $kat)
{
 echo('<b>'.$kat."</b><br />\n");
 $sql = "select type from {$prefix}cms1 where under = '$kat';";
 $res = mysql_query($sql);
 while($row = mysql_fetch_assoc($res))
 {
   echo('- '.$row['type']."<br />\n");
 }
 echo("<br />\n");
}
mysql_free_result($res);

du får endre htmlen til table eller list

Endret av grimjoey
Skrevet (endret)

Her en en løsning med kun ett database oppslag.

 

Tabell felter:

hoved -> id, hovedkat

underkat -> id, ukat, hid (hid = hoved.id)

 

PHP
<?php

$sql="SELECT t1.ukat, t2.hovedkat FROM underkat t1, hoved t2 

WHERE t1.hid = t2.id

ORDER BY t1.hid, t1.id";

$result=mysql_query($sql);

$kat='';

$i=0;

while ($row=mysql_fetch_assoc($result))

{

//sjekk for ny hovedkategori

if ($kat!=$row['hovedkat'])

{

if ($i==0)

{

echo "<ul>n";

$i=1;

}

else echo "</ul>n";

//lagrer hovedkatergori for å ha noe å sjekke mot over

$kat=$row['hovedkat'];

echo "<li>".$row['hovedkat']."</li>n<ul>n";

}

//skriv ut underkategoriene

echo "<li>".$row['ukat']."</li>n";

}

echo "</ul>n</ul>n";

?>

Endret av crowly

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å
×
×
  • Opprett ny...