Avatar billede maniacdog Nybegynder
05. november 2003 - 10:04 Der er 7 kommentarer og
1 løsning

Dynamisk menu - Skal bruge idéer, eller forslag til hvordan

Hej

Lad mig kort forklare:

Som det er nu har jeg en side pr. undermenu punkt. I denne side står der hvilke elementer den skal hive ud fra en MySQL database.

Det virker ganske glimerende som det er i dag lige bortset fra at der bliver genereret en pokkers masse querys i databasen :)
(Det gør egenligt ikke noget da den alligeevl står og keder sig, altså serveren.)

Jeg ved godt det ikke er optimalt men det er nemt at lave et interface til at redigere i menu punkterne, ikke mindst for mine kollegaer.

Min idé var at stadigvæk have det i en MySQL database og så når en bruger går ind på intranettet så hives ALLE links ud af Databasen med ét query.

Problemet er så bare, hvordan dælen holder man styr på at man kun får vist dem der skal vises på en pågælden side?

Som det er nu så har alle links:

ID, Link, Target, Text, Belongs2, Submenu

Belongs2 er hvilket menu punkt den tilhører, fx. Menu_main som er hovedmenuen.


Mine tanker var lidt at man kunne hive det hele ned i en session og så på en eller anden måde kun vises det der tilhører, der hvor vedkommende nu står?
Avatar billede rackbox Nybegynder
05. november 2003 - 21:29 #1
Jeg er lidt uklar mht. dit spørgsmål, men vover pelsen alligevel ;-)

Du har brug for en tabel, der repræsenterer dit menusystem. Det kunne se således ud:

Table MENU:
id | parent_id | menutext

parent_id giver dig en træstruktur, således, at alle, hvis parent_id = 0 hører til i roden. Dem med parent_id = 1 hører til under det menupunkt, der har id = 1, og så fremdeles.

Dernæst har du brug for en

table LINKS:
id | link | target | text | menu_id

(Jeg ved ikke, hvad du bruger submenu til... Måske har jeg gjort den unødvendig med mit forslag...)

Herefter har alle links et tilhørsforhold til et konkret menupunkt.

Her kommer så min tvivl: Vil du vise en liste over links på en side eller vil du vise de sider, som links'ne henviser til?

Den første mulighed:
$query = "select * from links where menu_id = ".$selected_menu_item;
$result = mysql_query($query);
og derefter standard liste-kode...

Den anden mulighed er med samme query og følgende kode til at vise resultatet:
while ($row=mysql_fetch_array($result)){
  $html = implode ('', file ($row['link']));
  echo $html;
  echo "<hr>"; //en linie til at adskille de forsk. sider...
}

Vh
Rackbox
Avatar billede maniacdog Nybegynder
06. november 2003 - 13:36 #2
Tror jeg har ledt dig lidt på afveje.

Som det er nu har jeg en tabel kaldet "menu_links". I denne tabel ligger der følgende for HVERT link:

ID - Blot et id til at finde linket hurtigt og nemt
Link - Selve linket, enten internt på netværket eller eksternt (www)
Target - Da vi kører frames så skal vi vide hvor det skal vises, menu eller display
Text - Et sigende navn til linket, det er dette brugerne ser
Belongs2 - Hvilken side i menuen linket hører til,
Submenu - Om linket er en undermenu eller ej, 0=nej og 1=ja

Så har vi som det er i dag, én side for HVERT underpunkt,
hovedmenuens PHP side hedder
menu_main.php
Den henter alt ud der tilhører (belongs2) menu_main.
Er der undermenupunkter så hentes disse også ud selvfølgelig men de bliver præsenteret lidt anderledes.

Undermenupunkterne (som vises i menu framen)
------------------ (<hr> til at adskille undermenuer fra direkte links)
Direkte links (som vises i display framen)


Det er jo så ret bøvlet hvis man skal have endnu en undermenu, da man jo skal oprette en ny fil som søger for at hente det ud der tilhører det menu punkt.
Det er den ene ting,
Den anden ting er at det er RET ulogisk at have den til at udføre 1 query pr. menupunkt (undermenupunkt) man klikker på.
Hvis man er 100 brugere og de hver klikker på 20 menupunkter, ja så er det 2000 querys i databasen.

Det virker ja men jeg vil gerne have ændret de to ting, mere for at det kan uddelegeres (med at oprette undermenu punkter) + det med at det ikke belaster databasen så meget.


Min tanke var så at man kunne beholde det nogenlunde på samme måde mén
på en eller anden måde med 1 query (når brugerne rammer intranettet) hente alle links ud og på en eller anden måde få dem vist som det er i dag. Bare kun med 1 menu side, så man ikke skal oprette flere sider.


Håber du forstår lidt bedre?
(Håber jeg har forklaret det bedre hehe)
Avatar billede maniacdog Nybegynder
06. november 2003 - 13:39 #3
Men som sagt så virker det i dag men jeg vil gerne have det strikket om så det ikke belaster MySQL serveren for meget når virksomheden jo med tiden vokser sig større ;-)

Samtidig også at gå væk fra det med alle de sider der skal laves.
Pt. har vi 37 PHP filer, 1 for hvert undermenu punkt (og hovedmenu siden).
Det er bøvlet hvis andre (Som vi vil lægge op til) skal ændre i menuen...

Planen er at en for hver afdeling skal kunne ændre i menuen, så de selv kan vedligeholde deres links til deres folk i afdelingen... lidt smartere syntes jeg selv...


Men som sagt,
jeg ved ikke lige hvordan jeg skal gribe det an.
Avatar billede rackbox Nybegynder
06. november 2003 - 23:14 #4
Det var en ordentlig mundfuld.. Vil lige tænke over det og vende tilbage...
Avatar billede rackbox Nybegynder
07. november 2003 - 00:04 #5
Jeg har tænkt.. Jeg forstår det stadig ikke... Jeg ved ikke, hvad du vil have frem på siden. Er det en db-genereret menu med træstruktur, hvor hvet punkt peger på en url? Og når man trykker på menupunktet, så vises url'en?
Avatar billede maniacdog Nybegynder
07. november 2003 - 13:44 #6
hmm så er det efterhånden svært at forklare.

Skal vi prøve igen?

Virksomheden har et intranet.
Dette intranet er opdelt i frames, en til venstre (20%) og en til højre (80%).
Den til venstre hedder Menu_Wnd og den til højre hedder Display.
Venstre frame er beregnet til menuen og den til højre er til at vise indholdet af diverse links.

Så langt så godt.

Hvis vi tager udgangspunkt i noget af det der ligger der i dag så er det følgende:

En hovedmenu med følgende:

Salg
Administration
Personale

Disse punkter er undermenuer. Når man klikker på disse så kommer der en ny menu frem.
Hovedmenuen er en PHP side, der henter alt ud der tilhører denne menu.
Fx. har den navnet (dvs. belongs2) menu_main.
I denne PHP fil henter den basalt set alt ud fra MySQL databasen (tabellen menu_links) der tilhører denne side (belongs2 = menu_main).

Undermenuerne, fx. menu_salg, er ligeledes en PHP fil, der ligesom den anden henter alt indhold ud der tilhører denne menu.

Dvs. indtil videre 2 PHP filer, hver er "hardcodet".

Dette betyder jo så at man for hvert menu punkt, altså undermenu punkt, skal oprette en sådan side, ind og redigere i den (hvad den skal hente ud, fx. menu_salg) og derefter gemme den igen.

Det var den ene ulempe.
Den anden ulempe er, at med alle disse PHP sider, for hvert menu punkt (undermenu), så skal der laves et query i MySQL databasen. Så når en person browser rundt i menuen så laver den ret mange querys.
På sigt så kunne virksomheden jo vokse og så er det ikke så skide smart med så mange querys.


Derfor, så har jeg brug for idéer til hvordan dette kan laves om.

1) Så man ikke skal oprette en PHP fil når et nyt menu punkt oprettes (undermenu), men måske i stedet kan være 1 PHP side, der somehow holder styr på det hele.

2) At man ved at have en side, der fx. hiver ALLE links ud og derefter sørger for at vise de rigtige (det nytter ikke ngoet at vise alle links frem med mindre man laver en træstruktur). Hvis man hiver alle links frem så skal den jo vise de rigtige når man er på hovedmenuen, salgs menuen osv.



Men mit problem ligger i at få det grebet an. Måske er det en dårlig måde at lave det på, måske er der andre, nemmere, hurtigere måder at lave det på?

Det skal i hvert fald være sådan at man kan få en 3. person til at lave det uden besvær. Og besvær er der jo hvis man skal oprette en ny PHP fil hver gang...


Hjalp det lidt?


ps. Skal lige nævne at jeg ikke har internet hjemme, så jeg kan først svare videre mandag :(
Avatar billede maniacdog Nybegynder
12. november 2003 - 08:06 #7
hmm jeg tænker/leder videre, du får lidt lidt point som tak for opmærksomheden.
Avatar billede rackbox Nybegynder
12. november 2003 - 13:58 #8
Jeg vender naturligvis tilbage til dit spørgsmål, når jeg også har tænkt lidt... Hvis jeg altså har forstået det rigtigt... Men held og lykke til dig!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester