Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]923[/thread]

CGI.pm popup_menu und optgroup: Quelle ist ein Nested Set



<< >> 3 Einträge, 1 Seite
MartinR
 2007-05-04 13:35
#29 #29
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
Hi,

ich habe eine bestimmte Struktur als Nested Set in meiner MySQL-DB abgelegt. Diese Struktur möchte ich mit cgi.pm in einem popup_menu darstellen. Das funktioniert auch soweit.

Code: (dl )
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
my $sql_query = <<"_EOF";
SELECT
TS1.struktur_id,
TS1.struktur_txt,
TS1.links,
TS1.rechts
FROM
t_struktur AS TS1,
t_struktur AS TS2
WHERE
TS1.links BETWEEN TS2.links AND TS2.rechts
GROUP BY
TS1.links
ORDER BY
TS1.links
_EOF

my $sth = $Datenbank->DoSQLPrepare(sql_query=>$sql_query);
$sth->execute();

my (%Label_Struktur, @Value_Struktur);
while ( my $Zeile = $sth->fetch() ) {
push (@Value_Struktur, $Zeile->[0]);
$Label_Struktur{$Zeile->[0]} = "Zeile->[1]";
}

my $struktur_menu = $cgi->popup_menu (
-name     => 'id',
-values   => \@Value_Struktur,
-labels   => \%Label_Struktur,
)
);


Nun möchte ich aber mittels optgroup erreichen, dass nur die Einträge der untersten Ebenen - also die Einträge wo gilt "rechts = links+1" - im Menu auswählbar sind. Und da hakt es bei mir.

Hat da jemand einen Tipp für mich?
Geht es überhaupt auf "einfache" weise?
Gast Gast
 2007-05-04 17:06
#30 #30
(Durchblicke das Ziel leider nicht vollständig, aber da bis jetzt sonst noch niemand geantwortet hat probier ichs trotzdem mal.)

Würde vielleicht etwas in der Art DESC LIMIT 1 weiterhelfen? (Ich bitte um Nachsicht falls es nicht funktioniert.)
MartinR
 2007-05-05 14:16
#31 #31
User since
2004-06-17
305 Artikel
BenutzerIn
[default_avatar]
[quote=Guest,04.05.2007, 15:06](Durchblicke das Ziel leider nicht vollständig, aber da bis jetzt sonst noch niemand geantwortet hat probier ichs trotzdem mal.)

Würde vielleicht etwas in der Art DESC LIMIT 1 weiterhelfen? (Ich bitte um Nachsicht falls es nicht funktioniert.)[/quote]
Hallo Ralph,

danke für die Antwort. Leider hast Du mein Problem nicht richtig verstanden. Hier deshalb ein Beispiel:

Code: (dl )
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
<form>
<p>das hab ich</p>
<select name="select">
    <option value="1">autos</option>
    <option value="2">opel</option>
    <option value="3">bmw</option>
    <option value="12">3er</option>
    <option value="13">5er</option>
    <option value="4">audi</option>
    <option value="5">flugzeuge</option>
    <option value="6">airbus</option>
    <option value="7">boeing</option>
    <option value="8">schiffe</option>
    <option value="9">container</option>
    <option value="10">passagier</option>
    <option value="11">ruderboot</option>
</select>
<p>das will ich</p>
<select name="Namen" size="3">
    <optgroup label="autos">
        <option value="1">opel</option>

        <optgroup label="bmw">
            <option value="12">3er</option>
            <option value="13">5er</option>
        </optgroup>
    
        <option value="3">audi</option>
    </optgroup>
    <optgroup label="flugzeuge">
        <option value="6">airbus</option>
        <option value="7">boeing</option>
    </optgroup>
    <optgroup label="schiffe">
        <option value="9">container</option>
        <option value="10">passagier</option>
        <option value="11">ruderboot</option>
    </optgroup>
</select>
</form>


Die SQL-Tabelle

struktur_id | links | rechts | ebene | struktur_txt
1  | 1     | 12     | 1     | autos
2  | 2     | 3      | 2     | opel
3  | 4     | 9      | 2     | bmw
12 | 5     | 6      | 3     | 3er
13 | 7     | 8      | 3     | 5er
4  | 10    | 11     | 2     | audi
5  | 13    | 18     | 1     | flugzeuge
6  | 14    | 15     | 2     | airbus
7  | 16    | 17     | 2     | boeing
8  | 19    | 26     | 1     | schiffe
9  | 20    | 21     | 2     | container
10 | 22    | 23     | 2     | passagier
11 | 24    | 25     | 2     | ruderboot


Ich befürchte allerdings, dass es mit cgi.pm-Bordmitteln nicht gehen wird ...
<< >> 3 Einträge, 1 Seite



View all threads created 2007-05-04 13:35.