/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
[php+mysql] Hierakisk menu - hvordan?
Fra : KeZZe


Dato : 13-02-01 14:25

Jeg vil gerne have en hierakisk menu, som jeg kun skal opdatere i min
admin-del.
Jeg har regnet ud, at den skal være i tråde, dvs. ligesom et debatforum, men
hvordan skal jeg gribe det an?

--
/KeZZe
Mail: mailto:kezze@kezze.dk ICQ: 14602805



 
 
Andreas Kleist Svend~ (13-02-2001)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 13-02-01 14:48

"KeZZe" <kezze@kezze.dk> udtrykte:

>Jeg vil gerne have en hierakisk menu, som jeg kun skal opdatere i min
>admin-del.
>Jeg har regnet ud, at den skal være i tråde, dvs. ligesom et debatforum, men
>hvordan skal jeg gribe det an?

Det kommer vist meget an på hvad du har forestillet dig.

Skal den ligge i databasen?

Hvor mange hovedpunkter/underpunkter/niveauer regner du med?

--
mvh Andreas Kleist Svendsen

WAP/WML/PHP Tutorials
http://www.nau.dk/

KeZZe (13-02-2001)
Kommentar
Fra : KeZZe


Dato : 13-02-01 15:06

> >Jeg vil gerne have en hierakisk menu, som jeg kun skal opdatere i min
> >admin-del.
> >Jeg har regnet ud, at den skal være i tråde, dvs. ligesom et debatforum,
men
> >hvordan skal jeg gribe det an?
>
> Det kommer vist meget an på hvad du har forestillet dig.
En menu lidt a'la:
emne 1
- punkt
- punkt
emne 2
- punkt
emne 3
- punkt

> Skal den ligge i databasen?
Indholdet skal ligge der, ja.

> Hvor mange hovedpunkter/underpunkter/niveauer regner du med?

Jeg regner med cirka 5 hovedpunkter. Men det skal kunne udvides.

Jeg regner med, at jeg skal have disse felter i databasen:
id | parentid | titel | indhold | aktiv

men ligenu er det eneste interessante jo id og parent.
Hvordan får jeg rullet dem igennem og vist dem som hovedpunkter/underpunkter
i menuen?

--
/KeZZe
Mail: mailto:kezze@kezze.dk ICQ: 14602805



Andreas Kleist Svend~ (13-02-2001)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 13-02-01 16:13

"KeZZe" <kezze@kezze.dk> udtrykte:

>men ligenu er det eneste interessante jo id og parent.
>Hvordan får jeg rullet dem igennem og vist dem som hovedpunkter/underpunkter
>i menuen?

Det havde jeg lavet før, men kunne selvfølgelig ikke lige finde det, så
her kommer et nyproduceret eksempel:

http://nau.dk/traad/

Kom endelig med forslag til forbedringer.
--
mvh Andreas Kleist Svendsen

WAP/WML/PHP Tutorials
http://www.nau.dk/

John Mørck Hansen (13-02-2001)
Kommentar
Fra : John Mørck Hansen


Dato : 13-02-01 17:27

Hej hej jeg bryder lige ind. HaHa

Jeg kunne forstille mig at du skulle gøre sådan her:

Første skal der søges efter emner (for at få alle emne id'erne):
SELECT * FROM min-tabel ORDER BY id;

Derefter skal du så søge efter de punkter som tilhører hver af dine
emner:
SELECT * FROM min-tabel WERER min-tabel.parentid = '$meneid';

det skal du gøre for hver af de emner der er i databasen.

MEN MEN MEN
Det måske ikke den bedste måde hvis du har mange emner eller hvis nogle af
punkterne har under punkter, for så skal man jo også søge efter dem.

Man kunne også meget vel kører en forespørgelser for så der efter at
sorterer det hele i PHP.
F.eks. noget i denne her retning (meget ogly kode men det skulle gå lidt
stærkt )

<?
class TMenuItem {
var $id;
var $parentid;
var $title;
var $indhold;
var $arkiv;

var $items = array(); // Skal bruges til under punkter (TMenuItem).

//*****************************************
// Finder et objekt ud fra dets id.
//*****************************************
function FindObjectFromID( $theID ) {
var $obj;
var $i;

// OK, er det mig selv der har det id ?
if( $id == $theID ) {
return this;
}

// Vi tager den lange vej igennem alle objekter. Kan måske gøres bedre ?
for( $i=0; $i<sizeof($items); $i++) {
if( $obj = $items[ $i ]->FindObjectFromID( $theID ) ) {
return $obj;
}
}

return false;
}

.... // Mere kode.
}



class TMenu {
var $caption;
var $items = array();
...

//***********************************
// Indsetter et nyt menu object.
//***********************************
function InsertItem( $item ) {
var $i;
var $obj;
var $tmp;

if( $item->parent != 0 ) {
for( $i=0; $i<sizeof($items); $i++) {
if( $obj = $items[$i]->FindObjectFromID( $item->parentid ) ) {
$tmp = new TMenuItem;
$tmp->id = $item->id;
... // More init kode her.
$obj->items[] = $tmp;
return true;
}
}
}
else { // Indset et nyt top menupunkt.
var $tmp = new T_MenuItem;
$tmp->id = $item->id;
... // Mere init kode her
$items[] = $tmp;
}
} // ***** END: InsertItem *********

} // *** END CLASS: TMenu ***

$m = new TMenu;
$result = mysql_db_query ("database", "select * from table");
while ($row = mysql_fetch_object ($result)) {
$m->InsertItem( $row );
}

?>

Ja, så er det om til dig at hive alle tingende ud igen =

Øøhh jeg har ikke prøvet koden så der kan være mange fejl men... jeg håber
at det giver dig en ide om hvad jeg mener =.
Og så lige til sidst så er jeg ikke den store PHP Guro... men det er meget
lig C++ som jeg kommer fra. Så jeg håber det er rigtigt!

Med venlig hilsen
John Mørck Hansen =





"KeZZe" <kezze@kezze.dk> skrev i en meddelelse
news:Ebbi6.54992$zw.983555@twister.sunsite.dk...
> > >Jeg vil gerne have en hierakisk menu, som jeg kun skal opdatere i min
> > >admin-del.
> > >Jeg har regnet ud, at den skal være i tråde, dvs. ligesom et
debatforum,
> men
> > >hvordan skal jeg gribe det an?
> >
> > Det kommer vist meget an på hvad du har forestillet dig.
> En menu lidt a'la:
> emne 1
> - punkt
> - punkt
> emne 2
> - punkt
> emne 3
> - punkt
>
> > Skal den ligge i databasen?
> Indholdet skal ligge der, ja.
>
> > Hvor mange hovedpunkter/underpunkter/niveauer regner du med?
>
> Jeg regner med cirka 5 hovedpunkter. Men det skal kunne udvides.
>
> Jeg regner med, at jeg skal have disse felter i databasen:
> id | parentid | titel | indhold | aktiv
>
> men ligenu er det eneste interessante jo id og parent.
> Hvordan får jeg rullet dem igennem og vist dem som
hovedpunkter/underpunkter
> i menuen?
>
> --
> /KeZZe
> Mail: mailto:kezze@kezze.dk

KeZZe (13-02-2001)
Kommentar
Fra : KeZZe


Dato : 13-02-01 20:39

[eksempel]
> det skal du gøre for hver af de emner der er i databasen.

Dit eksempel kan jeg godt regne ud.
Jeg tænkte på, om nogen havde en smart måde at få det til at køre løbende...


--
/KeZZe
Mail: mailto:kezze@kezze.dk ICQ: 14602805



John Mørck Hansen (13-02-2001)
Kommentar
Fra : John Mørck Hansen


Dato : 13-02-01 20:53

JA, kunne du ikke bruge de to PHP klasser jeg har kodet til dig ?

Hilsen
John =

"KeZZe" <kezze@kezze.dk> skrev i en meddelelse
news:E3gi6.56776$zw.1010000@twister.sunsite.dk...
> [eksempel]
> > det skal du gøre for hver af de emner der er i databasen.
>
> Dit eksempel kan jeg godt regne ud.
> Jeg tænkte på, om nogen havde en smart måde at få det til at køre
løbende...
>
>
> --
> /KeZZe
> Mail: mailto:kezze@kezze.dk ICQ: 14602805
>
>



KeZZe (13-02-2001)
Kommentar
Fra : KeZZe


Dato : 13-02-01 22:28

> JA, kunne du ikke bruge de to PHP klasser jeg har kodet til dig ?

Jo, tak for dem, men det var ikke besværet værd, for jeg havde allerede selv
fundet ud af, hvordan jeg skulle kode det som i dit eksempel.

--
/KeZZe
Mail: mailto:kezze@kezze.dk ICQ: 14602805



John Mørck Hansen (13-02-2001)
Kommentar
Fra : John Mørck Hansen


Dato : 13-02-01 22:32

OK, men så er alting jo i den skønneste orden =

Hilsen
John

"KeZZe" <kezze@kezze.dk> skrev i en meddelelse
news:7Fhi6.57768$zw.1015857@twister.sunsite.dk...
> > JA, kunne du ikke bruge de to PHP klasser jeg har kodet til dig ?
>
> Jo, tak for dem, men det var ikke besværet værd, for jeg havde allerede
selv
> fundet ud af, hvordan jeg skulle kode det som i dit eksempel.
>
> --
> /KeZZe
> Mail: mailto:kezze@kezze.dk ICQ: 14602805
>
>



Andreas Kleist Svend~ (13-02-2001)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 13-02-01 21:35

"KeZZe" <kezze@kezze.dk> udtrykte:

>[eksempel]
>> det skal du gøre for hver af de emner der er i databasen.
>
>Dit eksempel kan jeg godt regne ud.
>Jeg tænkte på, om nogen havde en smart måde at få det til at køre løbende...


Har du kigget på det eksempel jeg lavede til dig?

Funktionen der kører det ser ud som følger:

function lav_traadning ($parent, $level)
{
global $array, $traad;
for ($i = 0;$i < sizeof($array); $i++)
{
if ($array[$i][1] == $parent)
{
$traad[] = array ($array[$i][0], $array[$i][1],
$level);
lav_traadning ($array[$i][0],$level+1);
}
}
}

Så vidt jeg har testet sorterer den $array[] i tråd, og spytter $traad[]
ud, var det ikke noget i den stil du skulle bruge?

--
mvh Andreas Kleist Svendsen

WAP/WML/PHP Tutorials
http://www.nau.dk/

KeZZe (13-02-2001)
Kommentar
Fra : KeZZe


Dato : 13-02-01 22:28

> Har du kigget på det eksempel jeg lavede til dig?

Ja, tusind tak for det.
Nu har jeg fundet ud af, hvordan det skal kodes...

--
/KeZZe
Mail: mailto:kezze@kezze.dk ICQ: 14602805



Klaus Seidenfaden (14-02-2001)
Kommentar
Fra : Klaus Seidenfaden


Dato : 14-02-01 20:39

Andreas Kleist Svendsen skrev i meddelelsen
<3a8999e0.4042959@news.cybercity.dk>...
>Har du kigget på det eksempel jeg lavede til dig?

Jeg kiggede lige med IE4 og syntes det så lidt ordknapt ud. Kiggede i
kilden og fandt en masse kode der ikke blev vist. Prøvede URL'en i
Opera, og vupti! kom kildeteksten frem i en boks til højre for
eksemplet.

-- Klaus.



Andreas Kleist Svend~ (14-02-2001)
Kommentar
Fra : Andreas Kleist Svend~


Dato : 14-02-01 22:43

"Klaus Seidenfaden" <ks@CUT.seidenfaden.net> udtrykte:

>Jeg kiggede lige med IE4 og syntes det så lidt ordknapt ud. Kiggede i
>kilden og fandt en masse kode der ikke blev vist. Prøvede URL'en i
>Opera, og vupti! kom kildeteksten frem i en boks til højre for
>eksemplet.

Jeg har ikke gjort det store for at tilpasse den til flere browsere, da
det bare var et enkelt lille eksempel.

(jeg kunne selvfølgelig bare have lavet det uden float's)

--
mvh Andreas Kleist Svendsen

WAP/WML/PHP Tutorials
http://www.nau.dk/

Søg
Reklame
Statistik
Spørgsmål : 177557
Tips : 31968
Nyheder : 719565
Indlæg : 6408878
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste