Dynamisches Dropdownmenü - wie mache ich das?

Begonnen von Martin, 15 Juni 2006, 23:04:43

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Martin

Hi,

ich habe ein kleines Problem. Und zwar möchte ich ein Dropdownmenü erstellen, das beliebig viele Kategorien und Kategoriehierarchien darstellen kann.

Also beispielsweise

Europa
- Deutschland
-- Bayern
--- München
--- Nürnberg
-- Hessen
- Österreich
-- Voralberg
...
Amerika
- USA
-- Florida
-- Kalifornien
...

Das ganze gibt es so ähnlich in der myEGallery, nur da verstehe ich die über 2 Funktionen verteilte Lösung nicht... :(

Der Tabellenaufbau des Menüs ist auch daran angelehnt:
Cat_ID | Parent_ID | Bezeichnung | ...

Würde mich sehr über etwas Hilfe freuen! :)

Viele Grüße,
Martin

jubilee

Schreibe bitte einmal auf, wieviele Ebenen das Menü haben soll, was Du damit steuern möchtest.

Evt ist es am besten s etwas in DHTML oder Javascript zu erstellen.

MfG

Martin

Du meinst, wie viele Unterkategorien möglich sein sollen?

Also eigentlich wollte ich es ja so machen, dass man beliebig viele "Kategorien in Kategorien" erstellen kann, so wie in meinem Beispiel oben.

Nur ich hab jetzt schon die ganze Zeit gegrübelt und finde keine Logik, wie das gehen könnte. 4 Ebenen sollten es möglichst schon sein.

Steuern möchte ich damit einen Dateiupload in eine der in dem Feld dargestellten Kategorien.

(Hintergrund: ich bin gerade dabei ein Dateiverzeichnis-Modul zu basteln, in das Dateien hochgeladen werden können und dabei "on the fly" gezippt werden.)

Viele Grüße,
Martin

Martin

So, ich bin jetzt schon ein gutes Stück weitergekommen. Hier: http://www.tutorials.de/forum/php/231859-einen-hirarchischen-baum-aus-einer-liste-erstellen.html habe ich folgende Funktion gefunden, die wunderbar die Kategorien nach Eltern aufgelöst werden. (siehe unten).

Jetzt müsste ich nur noch das multidimensionale Array in ein Listenfeld ausgeben, wo ich aber aufgrund eben der multidimensionalität so meine Probleme hab.

Wäre super, wenn mir da noch jemand helfen könnte! :)

Hier die Sortierfunktion, vielleicht ja auch für Euch interessant :):

    <?php

      $inputArray 
= array(
          array( 
'cat_id' => 1'parent' => 0'title' => 'FHW' ),
          array( 
'cat_id' => 2'parent' => 0'title' => 'TUM' ),
          array( 
'cat_id' => 3'parent' => 1'title' => 'FB LE' ),
          array( 
'cat_id' => 4'parent' => 1'title' => 'FB LA' ),
          array( 
'cat_id' => 5'parent' => 2'title' => 'ErnWi' ),
          array( 
'cat_id' => 6'parent' => 3'title' => 'AM' ),
      );

  
      
$outputArray = array();
      
$nodeRefs = array(=> &$outputArray);

      foreach (
$inputArray as $element) {
          
$parent = &$nodeRefs[$element['parent']];
          
$parent[$element['cat_id']] = array('title' => $element['title']);
          
$nodeRefs[$element['cat_id']] = &$parent[$element['cat_id']];
      }

      
print_r($outputArray);

    
?>



Hier das Array, das ich ausgegeben bekomme und in ein Listenfeld ausgeben möchte:

Array
(
    [1] => Array
        (
            [bezeichnung] => FH Weihenstephan
            [4] => Array
                (
                    [bezeichnung] => Fachbereich LA
                )

            [3] => Array
                (
                    [bezeichnung] => Fachbereich LE
                    [6] => Array
                        (
                            [bezeichnung] => Agrarmarketing und -management
                            [8] => Array
                                (
                                    [bezeichnung] => Prüfungen
                                )

                            [7] => Array
                                (
                                    [bezeichnung] => Skripte und Ähnliches
                                )

                        )

                    [5] => Array
                        (
                            [bezeichnung] => Landwirtschaft
                        )

                )

        )

    [2] => Array
        (
            [bezeichnung] => TU München
            [10] => Array
                (
                    [bezeichnung] => Agrarwissenschaften
                    [11] => Array
                        (
                            [bezeichnung] => Prüfungen
                        )

                    [12] => Array
                        (
                            [bezeichnung] => Skripte u.ä.
                        )

                )

            [9] => Array
                (
                    [bezeichnung] => Ernährungswissenschaften
                )

        )

)

jubilee

Ich hab irgendwo ein Script welches mehrere von einander abhängige
Dropdown Listenfelder beinhaltet.
Liste eins steuert Liste 2 und diese Liste 3 über einen Ajax requester (also ohne neuladen der Seite)
Ich weiss im Moment blos nicht, wo ich das abgelegt habe. Da kann ich erst nächste Woche danach suchen.
MfG

Martin

Hi Jubilee,

das wäre super :)

Allerdings würde es mir sogar reichen, aus dem Array ein einziges Dropdown-Menü zu machen, das - um bei vorigem Beispiel zu bleiben -  so aussieht:

FH Weihenstephan
- Fachbereich LA
- Fachbereich LE
-- Agrarmarketing und -management
--- Prüfungen
--- Skripte und Ähnliches
-- Landwirtschaft
TU München
- Agrarwissenschaften
-- Prüfungen
-- Skripte u.ä.
- Ernährungswissenschaften

Viele Grüße,
Martin

jubilee

Hier einmal ein Beispiel von 2 voneinander abhängigen Dropdown Listen :

<html><head><title>test</title>
<script language="JavaScript">
autoren=new Array();

autoren["Thomas Mann"]=new Array;
autoren["Thomas Mann"][0]="Buddenbrocks";
autoren["Thomas Mann"][1]="Zauberberg";
autoren["Thomas Mann"][2]="Felix Krull";
autoren["Thomas Mann"][3]="Joseph und seine Brüder";
autoren["Thomas Mann"][4]="Lotte in Weimar";

autoren["Goethe"]=new Array;
autoren["Goethe"][0]="Faust";
autoren["Goethe"][1]="Iphiginie auf Tauris";
autoren["Goethe"][2]="Egmont";
autoren["Goethe"][3]="Torquato Tasso";
autoren["Goethe"][4]="Götz von Berlichingen";

autoren["Adorno"]=new Array;
autoren["Adorno"][0]="Minima Moralia";
autoren["Adorno"][1]="Ästhetische Theorie";
autoren["Adorno"][2]="Negative Dialektik";
autoren["Adorno"][3]="Aufklärung als Massenbetrug";
autoren["Adorno"][4]="Drei Studien zu Kant";

autoren["Mario Vargas Llosa"]=new Array;
autoren["Mario Vargas Llosa"][0]="Conversación en la catedral";
autoren["Mario Vargas Llosa"][1]="La guerra del fin del mundo";
autoren["Mario Vargas Llosa"][2]="La casa verde";
autoren["Mario Vargas Llosa"][3]="tia Julia y el escribidor";
autoren["Mario Vargas Llosa"][4]="Pantaleón y los usurpadores";

function zeigen()
{
gewaehlter_Wert=document.banane.eins.options[document.banane.eins.options.selectedIndex].value;


for(i=0;i<autoren[gewaehlter_Wert].length;i++)
{
optionen=new Option(autoren[gewaehlter_Wert][i]);
document.banane.zwei.options[i]=optionen;
document.banane.zwei.options[i].value=autoren[gewaehlter_Wert][i];
}
}
function zeigen2()
{
alert("Sie haben "+document.banane.zwei.options[document.banane.zwei.options.selectedIndex].value+" gewählt");
}

</script>
<body>
<form name="banane">
<select name="eins" onChange=zeigen();>
<option value="Thomas Mann">Thomas Mann
<option value="Goethe">Goethe
<option value="Adorno">Adorno
<option value="Mario Vargas Llosa">Mario Vargas Llosa
</select>
<select name="zwei" onChange=zeigen2();>
<option value="Buddenbrocks">Buddenbrocks
<option value="Zauberberg">Zauberberg
<option value="Felix Krull">Felix Krull
<option value="Joseph und seine Brüder">Joseph und seine Brüder
<option value="Lotte in Weimar">Lotte in Weimar
</select>
</form>
</body>
</html>



MfG

Martin

Hi!

Vielen Dank für den Vorschlag! Finde ich super interessant.

Nur, für mein Zweck bräuchte ich wirklich nur ein Menü, dass sich auch garnicht automatisch aktualisiert.

Ich bräuchte nur noch einen Tipp, wie ich das oben gepostete, verschachtelte Array als Liste ausgeben kann. Leider übersteigt dass meine Hobbycoderfähigkeiten :(