/ 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
Include af menuer
Fra : Rune Jensen


Dato : 13-04-06 08:29

I forbindelse med en diskussion i Ris+ros om menuer skrev Benny Nissen

> Jeg bruger ofte php til at aflæse sidens filnavn, og på baggrund af
det
> sætte menu'er o.s.v. til at afspejle den aktuelle side.
> Det skal kun skrives én gang og includes på alle sider (sammen med
selve
> menu'en).

Er der nogle her, som ligger inde med links, hvor man kan se nævnte
kode, den burde være rimelig almen? Gerne med forklaring, da jeg er
meget grøn i PHP.

MVH
Rune

--
webmaster for www.discolight.dk udlejning af diskoteksudstyr



 
 
Bertel Lund Hansen (13-04-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 13-04-06 11:44

Rune Jensen skrev:

> Er der nogle her, som ligger inde med links, hvor man kan se nævnte
> kode, den burde være rimelig almen? Gerne med forklaring, da jeg er
> meget grøn i PHP.

Jeg bruger ikke kode der læser filnavnene. Dem angiver jeg selv i
starten af programmet fordi de skal passe sammen med en
overskrift.

Princippet er at man sammenligner koden fra adressefeltet
("page=bridge") med listen over sider, og hvis den findes, slås
den tilsvarende titel op. Ubder alle omstændigheder sættes
filnavnet i variablen $content ved at føje ".inc" til koden.
Datoen aflæses også, men det kan man springe over.

På selve siden skrives så bl.a. titlen både i headersektionen og
som en egentlig overskrift. Derefter laves menuen ud fra
fillisten, og den aktuelle seide skrives bare almindeligt, mens
de andre laves som links. Nedenunder inkluderes $content så
hvilket bevirker at hele den tilsvarende fil vises inden for
hovedsidens rammer.

At de inkluderede sider hedder .inc er mit eget valg, men det er
normalt at benytte det efternavn.

<?
   $sider = array (
      'index' => 'Forside ', //
      'bridge' => 'Bridge',
      'dialog' => 'Dialog',
   );

   $code='index'; $title=$sider[$code];
   $order=$_GET['page'];
   if (isset($sider[$order])) { $code=$order; $title=$sider[$order]; }
   $content=$code.'.inc';
   $dato=date('j/n-Y.',filemtime($content));
?>
<!DOCTYPE html PUBLIC '-//W3C//DTD HTML 4.01//EN' ''>http://www.w3.org/TR/html4/strict.dtd'>
<html>
<head>
<? echo "<title>$title</title>\r\n"; ?>
<meta http-equiv='Content-Type' content='text/html; charset=ISO-8859-1'>
<link rel='stylesheet' type='text/css' href='style.css'>
</head>

<body>

<?
echo "<div class='kant'><p class='overskrift'><a href='./'>$title</a></p></div>";
?>

<div class='indholdsramme'>
<div class='menu'>
<?
   // Menu
   foreach($sider as $key => $entry) {
      if ($code==$key) print "&nbsp;$entry<br>\r\n";
      else print "<a href='?page=$key'>&nbsp;$entry&nbsp;</a><br>\r\n";
   };
   echo "<br>\r\n </div>\r\n";

   include ($content);
?>
<p class='dato'><? print "Sidst rettet $dato\r\n" ?></p>
</div>
</div>

</body>
</html>


--
Bertel
http://bertel.lundhansen.dk/      http://fiduso.dk/

Benny Nissen (13-04-2006)
Kommentar
Fra : Benny Nissen


Dato : 13-04-06 11:49

Bertel Lund Hansen ramte sit keyboard den 13-04-2006 12:43 og fik dette
ud af det:

> At de inkluderede sider hedder .inc er mit eget valg, men det er
> normalt at benytte det efternavn.

Sandelig kun hvis serveren er sat op til at parse .inc filer som .php filer.

Ellers har du en sikkerhedsbrist af stor størrelse.

Forestil dig en forbindelse til en database med adangskode o.s.v.
Den vil virke fint, hvis den inkluderes som en .inc fil, men hvis en
bruger gætter navnet på den og kalder den direkte kommer adgangskode
o.s.v. frem i browseren i klartekst (da serveren ikke aner hvad den skal
med en .inc fil og sender den som tekst til browseren).


--
Benny Nissen
www.bennynissen.dk

Rune Jensen (13-04-2006)
Kommentar
Fra : Rune Jensen


Dato : 13-04-06 23:44

"Bertel Lund Hansen" wrote in message ...

> Jeg bruger ikke kode der læser filnavnene. Dem angiver jeg selv i
> starten af programmet fordi de skal passe sammen med en
> overskrift.


> Princippet er at man sammenligner koden fra adressefeltet
> ("page=bridge") med listen over sider, og hvis den findes, slås
> den tilsvarende titel op. Ubder alle omstændigheder sættes
> filnavnet i variablen $content ved at føje ".inc" til koden.
> Datoen aflæses også, men det kan man springe over.
>
> På selve siden skrives så bl.a. titlen både i headersektionen og
> som en egentlig overskrift. Derefter laves menuen ud fra
> fillisten, og den aktuelle seide skrives bare almindeligt, mens
> de andre laves som links. Nedenunder inkluderes $content så
> hvilket bevirker at hele den tilsvarende fil vises inden for
> hovedsidens rammer.

Hvis jeg har forstået dig ret, så definerer du "navne" på menupunkter i
et array - men er det ikke tidskrævende, jeg mener, hvis du skal gøre
det for alle sider også undersider? Det, jeg tænkte på, var at lave en
menuliste udfra filnavne alene.. Det kan selvfølgelig være et problem
med mellemrum og danske bogstaver. Men formålet skulle være at modsvare
sådan en drag n drop menu, som åbenbart findes i Visual Studio og som
netop dannes udfra de sider, man allerede har (sådan har jeg forstået
det). Den holder så styr på alle menupunkter, og aktuelt menupunkt får
f.eks. sin egen class automatisk (det gør din også, så vidt jeg kan se).
Det burde vel også være muligt at efterligne en foldeud effekt med
serverside. Altså uden, man skal kode mere end én gang. Idéen skulle så
være, at sådan en løsning vil kunne være bedre kodet end Visual Studios
(halvvejs javascript) løsning, men med nogle af de samme fordele, at man
ikke behøver at tænke mere over menuen, når først den er kodet én gang.

Jeg siger i hvert fald mange tak for det hurtige svar og koden.. Jeg
tror lige jeg bruger noget af dagen i morgen til at sætte mig ind i den,
jeg kan jo kun lære af det

MVH
Rune



Bertel Lund Hansen (14-04-2006)
Kommentar
Fra : Bertel Lund Hansen


Dato : 14-04-06 06:40

Rune Jensen skrev:

> Hvis jeg har forstået dig ret, så definerer du "navne" på menupunkter i
> et array - men er det ikke tidskrævende

Næ. Der var vel 20 sider da jeg begyndte, og resten er kommet til
senere. Det tager ca. 17,4 sekunder at indføje en ny linje i det
array der indeholder filnavne og overskrifter. Det er alt. Det
tager selvfølgelig lidt længere tid at lave filen med det nye
indhold, men det kan jo ikke være anderledes.

> jeg mener, hvis du skal gøre det for alle sider også
> undersider? Det, jeg tænkte på, var at lave en menuliste udfra
> filnavne alene.. Det kan selvfølgelig være et problem med
> mellemrum og danske bogstaver.

Nemlig. Jeg bruger kun websikre tegn til filnavnene, og så er det
umuligt at bruge dem til overskrifter.

> det). Den holder så styr på alle menupunkter, og aktuelt menupunkt får
> f.eks. sin egen class automatisk (det gør din også, så vidt jeg kan se).

Den får ikke sin egen klasse, men den står bare ikke som link i
menuen. Du kan se på Fidusos sider hvordan det fungerer, for
bl.a. der bruger jeg den opbygning.

   http://fiduso.dk/

På min egen hjemmeside bruger jeg samme model, men lidt mere
kompleks, for der har jeg lavet det så der kan optræde undersider
med deres egen menu, men den har igen så samme struktur.

   http://bertel.lundhansen.dk/

> Det burde vel også være muligt at efterligne en foldeud effekt med
> serverside.

Ja, men det bliver for tungt til at være brugervenligt. Det vil
tage et par sekunder fra man klikker til den ændrede menu dukker
op, og pegning alene kan ikke udløse en handling. Hvis jeg skulle
lave en foldeudmenu, ville jeg bruge JavaScript og så sørge for
at hele menuen er fremme hvis det er slået fra.

> Altså uden, man skal kode mere end én gang. Idéen skulle så
> være, at sådan en løsning vil kunne være bedre kodet end Visual Studios
> (halvvejs javascript) løsning, men med nogle af de samme fordele, at man
> ikke behøver at tænke mere over menuen, når først den er kodet én gang.

Jamen, jeg tænker skam ikke mere over menuen på Fiduso, men det
er rigtigt at man kunne spare de 17,4 sekunders skrivning ved at
lade filnavnene være overkrifter.

Jeg synes at en god og beskrivende overskrift er så vigtig at jeg
slet ikke overvejer at man kunne spare noget tid på den.

> Jeg siger i hvert fald mange tak for det hurtige svar og koden.

Velbekomme. Du kan bare spørge igen.

--
Bertel

Rune Jensen (14-04-2006)
Kommentar
Fra : Rune Jensen


Dato : 14-04-06 10:55

"Bertel Lund Hansen" wrote in message...

> Næ. Der var vel 20 sider da jeg begyndte, og resten er kommet til
> senere. Det tager ca. 17,4 sekunder at indføje en ny linje i det
> array der indeholder filnavne og overskrifter.

Hæhæ. OK, jeg lytter, så må jeg tage det med i mine overvejelser. Ingen
grund til at opfinde den dybe tallerken igen.

> > Det burde vel også være muligt at efterligne en foldeud effekt med
> > serverside.
>
> Ja, men det bliver for tungt til at være brugervenligt. Det vil
> tage et par sekunder fra man klikker til den ændrede menu dukker
> op, og pegning alene kan ikke udløse en handling.

Jeg havde en idé med den foldeudeffekt, men jeg tror jeg lader det ligge
indtil jeg har sat mig mere ind i tingene. Ellers bliver det nok for
uoverskueligt. Så vidt jeg kan se, vil din foreslåede kode med lidt
tilretning fint kunne bruges på min egen side.

> Hvis jeg skulle
> lave en foldeudmenu, ville jeg bruge JavaScript og så sørge for
> at hele menuen er fremme hvis det er slået fra.

Jo, det er da rigtigt nok. Jeg synes bare lidt Javascript menuer er
gammeldags, specielt efter jeg har rodet med Javascript, som jeg fik til
at virke i én browser men ikke i en anden - det virker som om, der ikke
er fælles standarder for det. Men som sagt, så lader jeg det ligge lidt
og går videre med din løsning i stedet.

> Velbekomme. Du kan bare spørge igen.

Tak, det kommer jeg nok til Der er mange ting at sætte sig ind i,
selv om jeg godt forstår princippet i din kode.


MVH
Rune



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

Månedens bedste
Årets bedste
Sidste års bedste