Dynamisch menu met php

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lennart

Lennart

23/10/2007 14:45:00
Quote Anchor link
Hallo mensen,

ik ben bezig met een stage bij een bedrijf en moet daar een intranet opzetten. Ik heb daar een ftp waar met een public html map. Hier komt het intranet in te draaien. Een vriend van me heeft me geholpen een script te maken wat een directory uitleest en aan de hand van die mappenstructuur een menu opbouwt. Erg gebruiksvriendelijk want het berdijf kan nu de inhoud van hun intranet gewoon weggooien als het vervuilt raakt en in de avonduren compleet opnieuw uploaden. Ook nieuwe mappen staan gelijk in het menu. Nu komt het probleem; we hebben geen flauw idee waar opgebaseerd word welke volgorde hij gebruikt. We willen graag een numeriek volgorde. Kan iemand me hier mee helpen?

Hier de code;

<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title>Menu</title>
<script type="text/javascript" src="fsmenu.js"></script>
<link rel="stylesheet" type="text/css" id="listmenu-o" href="listmenu_o.css" title="Vertical 'Office'" />
<link rel="stylesheet" type="text/css" id="fsmenu-fallback" href="listmenu_fallback.css" />
<link rel="stylesheet" type="text/css" href="divmenu.css" />
</head>
<body>

<iframe frameborder="0" name="main" scrolling="auto" src="%%%%%%" width="80%" height="600%" align="right" hspace="15" vspace="9"></iframe>
<b>
<ul class="menulist" id="listMenuRoot">
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
$dir
= $_SERVER['DOCUMENT_ROOT'] . "/intranet";
if (is_dir($dir)) {
    $opendir = opendir($dir);
    while($file = readdir($opendir)) {
        if (is_dir($dir . "/" . $file) AND ($file != "..") AND ($file != ".")) {
            echo "<li><a href=\"documenten.php?docsmap=" . $dir . "/" . $file . "\" target=\"main\">" . $file . "</a></li>";
            
            // sub 1
            
            $subdir2 = $dir . "/" . $file;
            $opensubdir2 = opendir($subdir2);
            $totaal = "0";
            while ($subfile2 = readdir($opensubdir2)) {
                if (is_dir($subdir2 . "/" . $subfile2) AND ($subfile2 != "")) {
                    $totaal = $totaal + "1";
                }
            }

            if ($totaal != "2") {
                echo "<ul>";
            }

            $subdir = $dir . "/" . $file;
            $opensubdir = opendir($subdir);
            while ($subfile = readdir($opensubdir)) {
                if (is_dir($subdir . "/" . $subfile) AND ($subfile != "") AND ($subfile != "..") AND ($subfile != ".")) {
                    echo "<li><a href=\"documenten.php?docsmap=" . $subdir . "/" . $subfile . "\" target=\"main\">" . $subfile . "</a></li>";
                    
                    // nieuwe sub 2
                    
                        $subdir4 = $subdir . "/" . $subfile;
                        $opensubdir4 = opendir($subdir4);
                        $totaal2 = "0";
                        while ($subfile4 = readdir($opensubdir4)) {
                            if (is_dir($subdir4 . "/" . $subfile4) AND ($subfile4 != "")) {
                                $totaal2 = $totaal2 + "1";
                            }
                        }

                        if ($totaal2 != "2") {
                            echo "<ul>";
                        }

                        $subdir3 = $subdir . "/" . $subfile;
                        $opensubdir3 = opendir($subdir3);
                        while ($subfile3 = readdir($opensubdir3)) {
                            if (is_dir($subdir3 . "/" . $subfile3) AND ($subfile3 != "") AND ($subfile3 != "..") AND ($subfile3 != ".")) {
                                echo "<li><a href=\"documenten.php?docsmap=" . $subdir3 . "/" . $subfile3 . "\" target=\"main\">" . $subfile3 . "</a></li>";
                                
                                // nieuwe sub 3
                                
                                        $subdir6 = $subdir3 . "/" . $subfile3;
                                        $opensubdir6 = opendir($subdir6);
                                        $totaal3 = "0";
                                        while ($subfile6 = readdir($opensubdir6)) {
                                            if (is_dir($subdir6 . "/" . $subfile6) AND ($subfile6 != "")) {
                                                    $totaal3 = $totaal3 + "1";
                                            }
                                        }

                                        if ($totaal3 != "2") {
                                                echo "<ul>";
                                        }

                                        $subdir5 = $subdir3 . "/" . $subfile3;
                                        $opensubdir5 = opendir($subdir5);
                                        while ($subfile5 = readdir($opensubdir5)) {
                                            if (is_dir($subdir5 . "/" . $subfile5) AND ($subfile5 != "") AND ($subfile5 != "..") AND ($subfile5 != ".")) {
                                                echo "<li><a href=\"documenten.php?docsmap=" . $subdir5 . "/" . $subfile5 . "\" target=\"main\">" . $subfile5 . "</a></li>";
                                                
                                                // nieuwe sub 4
                                                
                                                        $subdir8 = $subdir5 . "/" . $subfile5;
                                                        $opensubdir8 = opendir($subdir8);
                                                        $totaal4 = "0";
                                                        while ($subfile8 = readdir($opensubdir8)) {
                                                            if (is_dir($subdir8 . "/" . $subfile8) AND ($subfile8 != "")) {
                                                                    $totaal4 = $totaal4 + "1";
                                                            }
                                                        }

                                                        if ($totaal4 != "2") {
                                                                echo "<ul>";
                                                        }

                                                        $subdir7 = $subdir5 . "/" . $subfile5;
                                                        $opensubdir7 = opendir($subdir7);
                                                        while ($subfile7 = readdir($opensubdir7)) {
                                                            if (is_dir($subdir7 . "/" . $subfile7) AND ($subfile7 != "") AND ($subfile7 != "..") AND ($subfile7 != ".")) {
                                                                echo "<li><a href=\"documenten.php?docsmap=" . $subdir7 . "/" . $subfile7 . "\" target=\"main\">" . $subfile7 . "</a></li>";
                                                            }
                                                        }

                                                        if ($totaal4 != "2") {
                                                            echo "</ul>";
                                                        }
            
                                                
                                                //einde sub 4
                                                
                                            }
                                        }

                                        if ($totaal3 != "2") {
                                            echo "</ul>";
                                        }
            
                                
                                // einde sub 3
                                
                            }
                        }

                        if ($totaal2 != "2") {
                            echo "</ul>";
                        }
            
                        
                        // einde sub 2
                        
                }
            }

            if ($totaal != "2") {
                echo "</ul>";
                
            // einde sub 1    
                
            }    
        }
    }
}

echo "</ul>";
?>

</body>
</html>
<script type="text/javascript">

var listMenu = new FSMenu('listMenu', true, 'display', 'block', 'none');
listMenu.animations[listMenu.animations.length] = FSMenu.animFade;
listMenu.animations[listMenu.animations.length] = FSMenu.animSwipeDown;
var arrow = null;
if (document.createElement && document.documentElement)
{
arrow = document.createElement('span');
arrow.appendChild(document.createTextNode('>'));
arrow.className = 'subind';
}
addEvent(window, 'load', new Function('listMenu.activateMenu("listMenuRoot", arrow)'));
</script>
 
PHP hulp

PHP hulp

20/04/2024 03:59:50
 
Martijn B

Martijn B

23/10/2007 15:07:00
Quote Anchor link
Ik denk dat je hiervoor een functie moet maken die recursief de bestanden/mappen uitleest. Zo is het allemaal wat overzichtelijker.

Voorbeeldje:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
lees_array($aArraytje);

function
lees_array( $_aArray )
{

  foreach( $_aArray as $k => $v )
  {

    echo 'sleutel: ' . $k;

    if( is_array($v) )
    {

      lees_array($v);
    }

    else
    {
      echo 'waarde: ' . $v;
    }
  }
}

?>


edit:

Misschien dat je hiermee wat verder komt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
error_reporting(E_ALL);

print_r(lees_dir('c:/map/'));

function
lees_dir( $_sFullPathDir )
{

    if( !is_dir($_sFullPathDir) || !($rDirHandle = opendir($_sFullPathDir)) )
    {

        return array();
    }


    $aResult = array();

    while( $sFile = readdir($rDirHandle) )
    {

        if( $sFile == '.' || $sFile == '..' )
        {

            continue;
        }

        
        if( is_file($_sFullPathDir . $sFile) )
        {

            $aResult[$sFile] = $_sFullPathDir . $sFile;
        }

        elseif( is_dir($_sFullPathDir . $sFile) )
        {

            $aResult[$sFile] = lees_dir($_sFullPathDir . $sFile);
        }
    }

    
    # Sleutels sorteren
    ksort($aResult);
    
    closedir($rDirHandle);
    return $aResult;
}

?>
Gewijzigd op 01/01/1970 01:00:00 door Martijn B
 
Lennart

Lennart

23/10/2007 15:33:00
Quote Anchor link
Hey bedankt voor je vlotte reactie! Maar waar plaats ik dan die functie van jou in dit script. Ik ben zelf echt helemaal nieuw in php. Die vriend die me hielp het script te maken is op vakantie. Zou je jou code erin willen plakken waar jij denkt dat ie werkt? Ik krijg hier namelijk foutmeldingen en moet en deathline halen :(. Alvast bedankt voor je hulp!
 
Martijn B

Martijn B

23/10/2007 15:51:00
Quote Anchor link
Je moet van het resultaat van lees_dir nog een lijst maken dit zou je op dezelfde manier kunnen doen als in de functien lees_array.
 
Lennart

Lennart

23/10/2007 15:54:00
Quote Anchor link
Ik heb inmiddels zelf natuurlijk ook wat geprobeerd met de tip die je me gaf. Ik krijg alleen maar errors. Ik weet zeker dat het aan mij ligt want ik kan zelf weinig tot niks met php. Kan iemand de code die ik boven toon met daar een oplossing in om nummeriek te sorteren terug posten? Het is niet omdat ik te lui ben maar simpel weg omdat ik het (nog) niet kan en in tijd gebrek zit.
 
Martijn B

Martijn B

23/10/2007 16:13:00
Quote Anchor link
Nu komt er een lijst in beeld:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<?php
error_reporting(E_ALL);

$aResultaat = lees_dir('c:/map/');
//print_r($aResultaat);
laatzien($aResultaat);

function
laatzien( $_aArray )
{

    echo '<ul>';
    foreach( $_aArray as $k => $v )
    {

        //print_r($_aArray);
        
        if( is_array($v) )
        {

            echo '<li>naam:' . $k;
            laatzien($v);
            echo '</li>';
        }

        else
        {
            echo '<li>naam: ' . $k . ' pad: ' . $v . '</li>';
        }
    }

    echo '</ul>';
}

function
lees_dir( $_sFullPathDir )
{

    if( !is_dir($_sFullPathDir) || !($rDirHandle = opendir($_sFullPathDir)) )
    {

        return array();
    }


    $aResult = array();

    while( $sFile = readdir($rDirHandle) )
    {

        if( $sFile == '.' || $sFile == '..' )
        {

            continue;
        }

        
        if( is_file($_sFullPathDir . $sFile) )
        {

            $aResult[$sFile] = $_sFullPathDir . $sFile;
        }

        else
        {
            $aResult[$sFile] = lees_dir($_sFullPathDir . $sFile . '/');
        }
    }

    
    # Sleutels sorteren
    ksort($aResult);
    
    closedir($rDirHandle);
    //print_r($aResult);
    return $aResult;
}

?>
 
Lennart

Lennart

23/10/2007 16:14:00
Quote Anchor link
En waar plaats ik deze in mijn php script? Of denk ik nou verkeerd?
Gewijzigd op 01/01/1970 01:00:00 door Lennart
 
Martijn B

Martijn B

23/10/2007 16:21:00
Quote Anchor link
Als dit is wat je wil, dan kun je de php code die je hebt vervangen door de code hierboven.

Regel 2 wel verwijderen.
Op regel 4 'c:/map/' vervangen door de directory die je wil laten zien.
 
Lennart

Lennart

23/10/2007 16:23:00
Quote Anchor link
Dus je heb het hele script vervangen?
 
Lennart

Lennart

23/10/2007 16:28:00
Quote Anchor link
Maar kan er niet in het script wat ik heb een commando worden toegevoegt dat hij het menu of de directory die hij uitleest in numerieke volgorde kan zetten?
 
Lennart

Lennart

24/10/2007 11:42:00
Quote Anchor link
Iemand een idee?
 
Arjan Kapteijn

Arjan Kapteijn

24/10/2007 11:46:00
Quote Anchor link
Waarom gebruik je heen GLOB(), ik zie allemaal wazige stukjes code boven mij terwijl het allemaal zo simpel kan. En wat bedoel je met numerieke volgorde?
 
Kees Schepers

kees Schepers

24/10/2007 12:13:00
Quote Anchor link
http://www.phphulp.nl/php/scripts/1/1149/

Ik zou sowieso eens daar naar kijken. En daarnaast een mooi stukje code (liefst OO) maken dat de directies uitleest.


edit:

Numerieke volgorde kan ook simpel denk ik door <ol> te gebruiken inplaatsvan <ul>. (ol=ordered list)
Gewijzigd op 01/01/1970 01:00:00 door kees Schepers
 
Lennart

Lennart

24/10/2007 12:16:00
Quote Anchor link
Ik heb een aantal mappen en die moeten in een bepaalde volgorde in het menu komen te staan.
Dus als voorbeeld;

01 algeen
02 engineering
03 administratie.

Zoals het script nu werkt mikt ie zonder cijfers ze niet op alfabet en met cijfers krijg je ongeveer dit:
06
01
05
08
 
- SanThe -

- SanThe -

24/10/2007 12:52:00
Quote Anchor link
Eerst in een array() inlezen, dan sorteren en pas daarna op het scherm zetten.
 
Lennart

Lennart

24/10/2007 12:58:00
Quote Anchor link
Maar hoe plaats ik dat al in de huidige code. Ik heb de code niet zelf gemaakt maar een vriend van me. Die is op vakantie en ik zit met en deathline. Kan iemand mijn code kopieren en plakken en dan met een sorteer code erin?
 
Crispijn -

Crispijn -

24/10/2007 13:18:00
Quote Anchor link
Als het echt een deathline is zou ik me snel verdiepen in php ;)
Gewijzigd op 01/01/1970 01:00:00 door Crispijn -
 
Lennart

Lennart

24/10/2007 13:57:00
Quote Anchor link
Lol, maar voor dat soort opmerkingen plaatste ik niet bericht voor hulp.
 
Lennart

Lennart

25/10/2007 12:07:00
Quote Anchor link
Niemand die kan helpen :(
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.