Gå til innhold

hvordan lage databasedrevet meny


Anbefalte innlegg

noen som vet om noen gode tutorialer for en databasedrevet meny?

hva bør jeg søke etter?

 

å putte navnet på en knapp inn i en mysql databas er jo en smal sak men når det er flere undermenyer under noen av knappene blir det fort litt vanskeligere...

 

hvis noen vet om noen resursser på dette emnet tar jeg imot med åpne armer.

 

 

det er php koden for å hente ut dette fra en database jeg er ute etter og ikke hvordan selve databassen ser ut....

Lenke til kommentar
Videoannonse
Annonse

jeg tenkte på noe à la

while($r = mysql_fetch_array($result, MYSQL_ASSOC)) {
if ($r['type'] == "menytop1") {
echo '<li class="menytop1">' . $r['tittel'] . '</li>';
}
elseif ($r['type'] == "undermeny1") {
echo '<li class="undermeny1">' . $r['tittel'] . '</li>';
}
else {
echo '<li class="vanlig">' . $r['tittel'] . '</li>';
}

 

Men det blir kanskje litt vanskelig og dårlig koding.. jeg vet ikke

 

Edit; glemme paranteser, jatakk!

Endret av Ståle
Lenke til kommentar

Jeg lagde noe slikt for en stund siden, men tror ikke jeg har koden lenger.

Du trenger et par tabeller for å lage menyen så dynamisk som mulig.

Tabell 1:

automagisk teller(id)

prioritet (tall som starter på 0 som angir rekkefølgen linkene kommer i)

navn

link

 

Tabell 2:

automagisk teller(id)

forelder(id fra tabell 1)

barn(id fra tabell 2)

 

Et sted må du også definere de linkene som utgjør hovedmenyen. Så traverserer du bare menyen og henter ut barnelinkene som har forelder lik linken du står på nå. (litt vanskelig forklart)

 

 

En annen måte, som kanskje er vel så enkel og effektiv er å lage en array med subarrayer som er undermenyer osv. Arrayer er jo veldig fleksible og enkle å jobbe med i PHP. For å lagre menyen serialiserer du den (serialize()) og skriver denne strengen til en fil. Så kan du lese inn strengen fra filen og bruke unserialize() for å få tilbake arrayet ditt (og dermed menyen)

Lenke til kommentar

Det du leter etter er ikke så vanskelig som det høres ut..

Ta utgangspunkt i dette oppsettet av en mysql tabell

 

+---+---------+---------+-----+

| ID | SUBID | NAVN | URL |

+---+---------+---------+-----+

 

La oss si du har 4 "items" i tabellen

 

1 - 0 - Hovedsiden - index.php

2 - 0 - Om meg - ommeg.php

3 - 2 - Bilder - galleri.php

4 - 3 - Siste bilder - siste.php

 

Menyen du ønsker, skal se slik ut

 

-Hovedsiden

-Om meg

--Bilder

---Siste bilder

 

print '<ul>\n';
##Kjør et query for å finne alle sider som IKKE er undersider
$sql = "SELECT id,subid,navn,url FROM tabellnavn WHERE subid='0'";
$run = mysql_query($sql);
while($rad = mysql_fetch_array($run)) {
print '<li><a href="'.$subRad['url'].'">'.$subRad['navn'].'</a></li>\n';
## Så henter vi undersidene
 $SubSql = "SELECT id,subid,navn,url FROM tabellnavn WHERE subid='{$rad['id']}'";
 $SubRun = mysql_querty($SubSql);
  while($subRad = mysql_fetch_array($run)) {
  print '<li class="sub"><a href="'.$subRad['url'].'">'.$subRad['navn'].'</a></li>\n';
  }
}
print '</ul>';

 

Denne koden er ganske primitiv. Den tar ikke hensyn til posisjon, klasser osv.

 

Jeg anbefaler at du lager enten en klasse eller funksjoner

 

function FetchMainItems($style) {

## Hent hovdemenyer

}

function FetchSubItems($id, $style) {

## Hent undermenyer

}

function FetchItems() {

FetchMainItems();

FetchSubItems();

}

 

Håper dette hjelper

Lenke til kommentar

jeg har kommet fram til koden under.

selv om jeg ikke skjønner alt i den fungerer den nesten perfekt.

bare se her:

http://www.morganwaage.com/fb/sub.php?menu=ha&cat=ha_main

 

problemet er at jeg ikke får lagt inn cat= i url'n...?

noen som vet hvordan?

<?php
$query  = " SELECT * FROM fb_menu ";
$query .= " WHERE main_category = '" . $cat_menu . "' ";
$query .= " OR main_category = 'om' ";
$query .= " OR main_category = 'nl' ";
$query .= " AND status = 'active' ";
$query .= " ORDER BY parent_id, id ";
$qry = mysql_query($query);

$menu = array();
while ($row = mysql_fetch_array($qry) ) {
 $menu[$row['parent_id']][$row['id']] = $row['name'];
}

echo "<ul class='level1'>\n";
foreach ($menu[0] as $LVL1_key => $LVL1_item) {
   if (!isset($menu[$LVL1_key])) {
       echo "<li><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL1_item . "</a></li>\n";
   }
   else {
       echo "<li class='submenu'><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL1_item . "</a>\n";
       echo "<ul class='level2'>\n";
       foreach ($menu[$LVL1_key] as $LVL2_key => $LVL2_item) {
           if (!isset($menu[$LVL2_key])) {
               echo "<li><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL2_item . "</a></li>\n";
           }
           else {
               echo "<li class='submenu'><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL2_item . "</a>\n";
               echo "<ul class='level3'>\n";
               foreach ($menu[$LVL2_key] as $LVL3_key => $LVL3_item) {
                   echo "<li><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL3_item . "</a></li>\n";
               }
               echo "</ul>\n";
               echo "</li>\n";
           }
       }
       echo "</ul>\n";
       echo "</li>\n";
   }
}
echo "</ul>\n";
?> 

Lenke til kommentar
jeg har kommet fram til koden under.

selv om jeg ikke skjønner alt i den fungerer den nesten perfekt.

bare se her:

http://www.morganwaage.com/fb/sub.php?menu=ha&cat=ha_main

 

problemet er at jeg ikke får lagt inn cat= i url'n...?

noen som vet hvordan?

<?php
$query  = " SELECT * FROM fb_menu ";
$query .= " WHERE main_category = '" . $cat_menu . "' ";
$query .= " OR main_category = 'om' ";
$query .= " OR main_category = 'nl' ";
$query .= " AND status = 'active' ";
$query .= " ORDER BY parent_id, id ";
$qry = mysql_query($query);

$menu = array();
while ($row = mysql_fetch_array($qry) ) {
 $menu[$row['parent_id']][$row['id']] = $row['name'];
}

echo "<ul class='level1'>\n";
foreach ($menu[0] as $LVL1_key => $LVL1_item) {
   if (!isset($menu[$LVL1_key])) {
       echo "<li><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL1_item . "</a></li>\n";
   }
   else {
       echo "<li class='submenu'><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL1_item . "</a>\n";
       echo "<ul class='level2'>\n";
       foreach ($menu[$LVL1_key] as $LVL2_key => $LVL2_item) {
           if (!isset($menu[$LVL2_key])) {
               echo "<li><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL2_item . "</a></li>\n";
           }
           else {
               echo "<li class='submenu'><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL2_item . "</a>\n";
               echo "<ul class='level3'>\n";
               foreach ($menu[$LVL2_key] as $LVL3_key => $LVL3_item) {
                   echo "<li><a href='sub.php?menu=" . $cat_menu . "&cat=" . $idontknow . "'>" . $LVL3_item . "</a></li>\n";
               }
               echo "</ul>\n";
               echo "</li>\n";
           }
       }
       echo "</ul>\n";
       echo "</li>\n";
   }
}
echo "</ul>\n";
?> 

7679049[/snapback]

 

Hvor kommer $idontknow fra? Ser ikke at denne variabelen er definert...

En annen ting, for rett markup, bruk &cat=enkategori

 

En tredje ting, med dette scriptet kan du ikke har uendelige undersider.. Har du i det hele tatt prøvd ut det scriptet jeg skrev til deg?

Lenke til kommentar

under er koden din som jeg bruker på denne siden:

http://www.morganwaage.com/fb/css/

echo "<ul>\n";
$sql = "SELECT * FROM menu WHERE subid='0'";
$run = mysql_query($sql);
while($rad = mysql_fetch_array($run)) {
echo "<li><a href='".$rad['url']."'>".$rad['navn']."</a></li>\n";
$SubSql = "SELECT id,subid,navn,url FROM menu WHERE subid='{$rad['id']}'";
$SubRun = mysql_query($SubSql);
 while($subRad = mysql_fetch_array($SubRun)) {
 	echo "<li class='sub'><a href='".$subRad['url']."'>".$subRad['navn']."</a></li>\n";
}
}
echo "</ul>";

som du ser fungerer heller ikke denne helt riktig men hvis du kan si meg hva jeg må gjøre for å få submenyene til å fungere kan jeg heller bruke denne...??

 

i den andre koden så skrev jeg variabelen idontknow bare for å understreke at det var der jeg hadde problemer...

Endret av demiurgen
Lenke til kommentar
under er koden din som jeg bruker på denne siden:

http://www.morganwaage.com/fb/css/

echo "<ul>\n";
$sql = "SELECT * FROM menu WHERE subid='0'";
$run = mysql_query($sql);
while($rad = mysql_fetch_array($run)) {
echo "<li><a href='".$rad['url']."'>".$rad['navn']."</a></li>\n";
$SubSql = "SELECT id,subid,navn,url FROM menu WHERE subid='{$rad['id']}'";
$SubRun = mysql_query($SubSql);
 while($subRad = mysql_fetch_array($SubRun)) {
 	echo "<li class='sub'><a href='".$subRad['url']."'>".$subRad['navn']."</a></li>\n";
}
}
echo "</ul>";

som du ser fungerer heller ikke denne helt riktig men hvis du kan si meg hva jeg må gjøre for å få submenyene til å fungere kan jeg heller bruke denne...??

 

i den andre koden så skrev jeg variabelen idontknow bare for å understreke at det var der jeg hadde problemer...

7688986[/snapback]

 

 

Om du ser på kildekoden så funker scripet, bilder har klassen "sub" og ligger under "Om meg"

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...