Avatar billede comeback Nybegynder
27. oktober 2005 - 12:16 Der er 13 kommentarer og
1 løsning

Dynamisk menu ud fra filer i en mappe

Udfordring! JEg har tænkt på noget smart - men ved ikke hvordan jeg liiiiiiige skal skrue det sammen. Jeg vil gerne smide en masse point i i boksen for at få det løst.

Jeg vil gerne følgende:

menu 1 består af 4 punkter:
punkt1 - punkt2 - punkt3 - punkt4

"Menu2" skal genereres ud fra filnavne i en mappe.

Altså, når man klikker på "punkt1" i menu 1 kigger systemet ned i mappen (som er oprettet) "mappe_til_punkt1" og der ligger der, lad os sige, 3 filer. De hedder
"underpunkt1.htm" - "underpunkt2.htm" - "underpunkt3.htm".

Ud fra hvad filerne hedder skal der så laves indholdet til "Menu 2" (som er en undermenu til .

Dvs. sige den skal putte filnavnene i et array og slette ".htm" og derefter levere resultatet som menu punkter.

Gav det mening? Det håber jeg eller så sig lige til - Hvis nogen kan lave et eksempel ville det være SUPER - Er slet ikke en ørn til php.
Avatar billede jakobdo Ekspert
27. oktober 2005 - 15:00 #1
Måske noget i denne stil:

<?php
//http://www.eksperten.dk/spm/659563

$dir = getcwd();
$menu = "/";


if(isset($_GET["menu"]) && preg_match('/^[a-z0-9_-]/im', $_GET["menu"]))
{
    $menu .= $_GET["menu"] . "/";
}

// Open a known directory, and proceed to read its contents
if (is_dir($dir . $menu))
{
    if ($dh = opendir($dir . $menu))
    {
        while (($file = readdir($dh)) !== false)
        {
            if($file != "." && $file != "..")
            {
                if(is_dir($dir . $menu . $file))
                    echo "<a href=\"".$_SERVER["PHP_SELF"]."?menu=".$file."\">".$file."</a><br>";
                else
                    echo "<a href=\"".$_SERVER["PHP_SELF"]."\">".$file."</a><br>";
            }
           
        }
        closedir($dh);
    }
}

?>

Der mangler meget tilretning, men det kan komme.
Avatar billede comeback Nybegynder
30. oktober 2005 - 21:48 #2
Tak for svaret! det ser umiddelbart meget fint ud...Vil du ikke kommentere koden?
Avatar billede jakobdo Ekspert
30. oktober 2005 - 21:51 #3
Mener du hele koden?
Eller er det stumper du er i tvivl om?
Avatar billede comeback Nybegynder
30. oktober 2005 - 21:54 #4
SOm det er lige nu bruger jeg en "switch" funktion på for at se hvilken "side der skal includes på siden. F.eks. :

switch ($id) {

//Hvilken side skal includes

case "oversigt":
include ('oversigt.htm');
break;

case "priser":
include ('priser.htm');
break;

etc......

Men hvordan kan jeg bruge den funktion hvis jeg på forhånd ikke ved hvad filerne i mappen hedder? Hmmmmm
Avatar billede comeback Nybegynder
30. oktober 2005 - 21:56 #5
Nej mest lige de sidste ....

        while (($file = readdir($dh)) !== false)
        {
            if($file != "." && $file != "..")
            {
                if(is_dir($dir . $menu . $file))
                    echo "<a href=\"".$_SERVER["PHP_SELF"]."?menu=".$file."\">".$file."</a><br>";
                else
                    echo "<a href=\"".$_SERVER["PHP_SELF"]."\">".$file."</a><br>";
Avatar billede jakobdo Ekspert
31. oktober 2005 - 07:59 #6
<?php
//http://www.eksperten.dk/spm/659563

//Finder stien til på det dir hvori filen lægges.
$dir = getcwd();
$menu = "/";

//Hvis menu er sat og starter med et bogstav,tal,- eller_
if(isset($_GET["menu"]) && preg_match('/^[a-z0-9_-]/im', $_GET["menu"]))
{
    $menu .= $_GET["menu"] . "/";
}

//Er det et dir vi har fat i?
if (is_dir($dir . $menu))
{
    //Vi åbner dir
    if ($dh = opendir($dir . $menu))
    {
        //Så længe vi læser en fil køre vi på
        while (($file = readdir($dh)) !== false)
        {
            //Hvis fil er anderledes end . og ..
            if($file != "." && $file != "..")
            {
                //Er det et dir.
                if(is_dir($dir . $menu . $file))
                {
                    //Vi laver et link som så bliver åbner som dir
                    echo "<a href=\"".$_SERVER["PHP_SELF"]."?menu=".$file."\">".$file."</a><br>";
                }
                //Eller er det ikke er dir
                else
                {
                    //Vi laver et direkte link til filen.
                    echo "<a href=\"".$_SERVER["PHP_SELF"]."\">".$file."</a><br>";
                }
            }
        }
        //Luk dir
        closedir($dh);
    }
}

?>
Avatar billede comeback Nybegynder
31. oktober 2005 - 22:14 #7
Tak for kommenteringen - Jeg blve klogere!

Forstod du mit "switch" spørgsmål? JEg smider gerne lidt flere point i
Avatar billede jakobdo Ekspert
01. november 2005 - 07:57 #8
Switch, kan du forklare lidt nærmere?
Avatar billede comeback Nybegynder
01. november 2005 - 13:11 #9
Se spørgsmål 30/10-2005 21:54:50

Jeg har en webside med en menu på, når jeg trykker på en menu punkt (index.php?id=3) loader siden med den variabel. (id=3) jeg bruger så en switch til at bestemme hvilket indhold der skal includes på siden. Det kunne se således ud:

switch ($id) {

//Hvilken side skal includes
//hvis id = 2...
case "2":
include ('oversigt.htm');
break;

//hvis id = 3...
case "3":
include ('priser.htm');
break;

etc etc.

Men nu ved jeg jo ikke i forvejen hvad variablen hedder da den bliver i "din" nye menu. SÅ der kan være at det ser således ud index.php?id=priser.htm
(index.php?id=$indholdet_fra_mappen) og så skal min switch jo også sige:

switch ($id) {

//Hvilken side skal includes
//hvis id = 1. fil i mappen...
case "$indholdet_fra_mappen":
include ('oversigt.htm');
break;

//hvis id = 2. fil i mappen...
case "$indholdet_fra_mappen":
include ('priser.htm');
break;

etc etc.


Er du med på hvad jeg mener?
Avatar billede jakobdo Ekspert
01. november 2005 - 22:11 #10
Ja, men hvad er det du ønsker nu?
Først snakker du om at lave menu ud fra en mappe og filer.
Nu snakker du om at lave en switch case!
Hvad er det helt præcist du vil have? :o)
Avatar billede comeback Nybegynder
01. november 2005 - 22:39 #11
Jeg så bare endnu en problem stilling... -
Tak for dit svar - Jeg oprettter ey nyt spørgsmål
Avatar billede comeback Nybegynder
01. november 2005 - 22:40 #12
Smid lige et svar
Avatar billede jakobdo Ekspert
02. november 2005 - 07:02 #13
Et svar (og det var altså ikke for at få flere point, det var bare mere for at finde ud af hvad du præcist ønskede) :o)
Avatar billede jakobdo Ekspert
02. november 2005 - 19:59 #14
Takker for point!
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