02. oktober 2007 - 17:40Der er
15 kommentarer og 1 løsning
Kategori liste
Hej.
Jeg leder efter en stump kode der kan lave en kategori liste med underkategorier. Den skulle gerne kun viser underkategorierne for den kategori som der klikkes på.
De kode stumper jeg har rodet med er enten langsomme eller bruger java/AJAX til at gemme kategorier.
Så skal den bare liste kategorierne således: ---------------------------------------------- <script type="text/javascript"> function ToggleShow(elm){ elm=document.getElementById(elm); elm.style.display=elm.style.display=="none"?"inline":"none" } </script>
Ja, det skal være fra en database. Er der er måde at gøre det uden java? Det er okay hvis der ikke er.
Herunder er en kode jeg bruger som er hurtig (jeg kører med PHP5). Men ikke viser/skjuler underkategorierne. Databasen har felterne: catid(INT), parcat(INT), name(VARCHAR 150) i tabellen: tree.
Hvis du har et alternativ er det super hvis jeg kan se det.
<?php function maketree($rootcatid,$sql,$maxlevel){ // $sql is the sql statement which fetches the data // you MUST keep this order: // 1) the category ID, 2) the parent category ID, 3) the name of the category $mysqli = mysqli_connect('localhost', 'brugernavn', 'kodeord', 'databasenavn'); $result = mysqli_query($mysqli,$sql); while(list($catid,$parcat,$name)=$row=mysqli_fetch_array($result)){ $table[$parcat][$catid]=$name; $partable[$catid][$parcat]=$name; }; $result=buildparent($rootcatid,$table,$partable)."<br>"; $result.=makebranch($rootcatid,$table,0,$maxlevel); RETURN $result; } // this function builds the branches, // sorting them in alphabetical order function makebranch($parcat,$table,$level,$maxlevel){ $list=$table[$parcat]; asort($list); // here we do the sorting while(list($key,$val)=each($list)){ // do the indent if ($level=="0"){ $output="<img src=./images/se.gif width=12 height=12>"; }else{ $width=($level+1)*24; $output="<img src=./images/e.gif width=$width height=12>"; }; // the resulting HTML - feel free to change it // $level is optional $result.= "$output <a href=index.php3?catid=$key>$val</a> ($level)<br>\n"; if ((isset($table[$key])) AND (($maxlevel>$level+1) OR ($maxlevel=="0"))){ $result.= makebranch($key,$table,$level+1,$maxlevel); }; }; RETURN $result; } // this function makes the list of the parent categories // this function is optional function buildparent($catid,$table,$partable){ if ($catid!=0){ $list=$partable[$catid]; $result=each($list); $output="<a href=index.php3?catid=$result[0]>$result[1]</a> / "; $output=buildparent($result[0],$table,$partable).$output; }; RETURN $output; }
// set the default category if (!isset($catid)){ $catid=0; }; // build and print the tree NOTE: $maxlevel is the maximum level, // set to 0 to show all levels $maxlevel=0; print maketree($catid,"SELECT catid,parcat,name FROM tree order by parcat",$maxlevel);
Nej, du bliver nødt til at bruge javascript. Ellers skal hele siden opdateres igen, hver gang man vil vise/lukke en underkategori, og det bliver langt mere rodet.
Jeg synes personligt, det er enormt irriterende, at den skal loade siden hver gang, man vil åbne en underkategori, og det ta'r en evighed på min computer med den side.
Jeg blev opmærksom på en ting. Når jeg klikker på kategorien går den jo til en prokut list side. Men så husker systemet jo ikke hvilke kategori jeg har været.
Eksempel jeg har klikket:
Hovedkategori1 -- Under katergori1 -- Under katergori2 -- Under katergori3 (f.eks. jeg har klikket her) Hovedkategori2
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.