Verona: Array_Problem noch immer nicht im Griff. :-(

Ich bekomme es einfach nicht hin. Arrays sind bömsche Dörfer für mich. Dabei soll mein Array dynamisch sein - nicht bömisch. ;-)

Das Ganze Problem liegt im Grunde schon an meiner Art eine Seite zu erstellen. Ich habe mich für PHP entschieden und erstelle meine HTML-Seiten so, dass ich immer die gleiche Datei aufrufen - die index.php!

Wenn ich jetzt Inhalte ändern will, z.B. eine Seite eines Buches umblättern, dann gebe ich das dem Link in der Form mit:

<a href="index.php?buchseite=seite5"....

Mittels "switch" wechsel ich dann die entsprechenden Inhalte.

Das Problem liegt bei dieser Vorgehensweise bei CSS und den Pseudo-Elementen :active, :hover, udg. für Links. Wenn ich nämlich jedesmal dieselbe Seite neu aufrufe, dann ist das Pseudo-Element immer :link aber niemals :active. Bis hier hin klar?

Also habe ich mir gedacht zwei Klassen zu nehmen. Eine Klasse wenn der Link nicht :active ist und eine wenn er :active ist.

Das sieht dann so aus:

<a href="index.php?seite=5" class="<?php $class ?>"....
<a href="index.php?seite=6" class="<?php $class ?>"....
<a href="index.php?seite=7" class="<?php $class ?>"....

Wenn $buchseite=5 dann $class="on"

Jetzt sind aber alle Links auf "on". Ich sehe aber nicht den Sinn darin, dass so zu machen:

<a href="index.php?seite=5" class5="<?php $class ?>"....
<a href="index.php?seite=6" class6="<?php $class ?>"....
<a href="index.php?seite=7" class7="<?php $class ?>"....

Sind tausende Variablen. Das kann es ja wohl nicht sein, oder?! Außerdem müsste ich dann in der if- oder switch-Anweisung alle Variablen schreiben. Dann kann ich es ja auch gleich in HTML machen.

Was nun? Ich habe da an Arrays gedacht. Und zwar so:

<a href="index.php?seite=5" class[$seite]="<?php $class ?>"....
<a href="index.php?seite=6" class[$seite]="<?php $class ?>"....
<a href="index.php?seite=7" class[$seite]="<?php $class ?>"....

Jetzt sollte anhand der $seite ein array erstellt werden. Wenn z.B. die Variable $seite=5 ist, dann soll die Variable $class mit dem Index 5 den Wert "on" erhalten, und alle $class mit anderem Index den Wert "off".

$class array();
$class [0] = "off";
...
$class [5] = "on";
$class [6] = "off";
$class [7] = "off";
...
usw.

Ich hoffe das mir jemand aus diesem Problem heraushelfen kann.

V

  1. Huhu Verona

    wenn ich Dich richtig verstanden habe möchtest Du für den Link der aktuell gewählten Seite eine andere CSS-Klasse verwenden als für die anderen Links.

    Jetzt sind aber alle Links auf "on". Ich sehe aber nicht den Sinn darin, dass so zu machen:

    <a href="index.php?seite=5" class5="<?php $class ?>"....
    <a href="index.php?seite=6" class6="<?php $class ?>"....
    <a href="index.php?seite=7" class7="<?php $class ?>"....

    mmmh, class5, class6 etc. sind wohl eher keine gültigen Attribute

    Was nun? Ich habe da an Arrays gedacht. Und zwar so:

    <a href="index.php?seite=5" class[$seite]="<?php $class ?>"....
    <a href="index.php?seite=6" class[$seite]="<?php $class ?>"....
    <a href="index.php?seite=7" class[$seite]="<?php $class ?>"....

    class[1] etc. wohl auch nicht

    so wie Deine Links untereinanderstehen schreit das geradezu nach einer Funktion die den A-Tag zusammenbaut.

    z.B.

    function BuildAnchorTag($lbl, $n)
    {
     $class = $_GET['seite'] == $n ? 'on':'off';
     return sprintf( '<a href="index.php?seite=%d" class="%s">%s</a>', $n, $class, $lbl );

    }

    echo BuildAnchorTag('Eine weitere nützliche Seite',12);

    Angenommen Du hast ein Array für Deine Seiten

    $pages = array(1 => 'Seite1', 2 => 'Noch eine', 3 => 'eine weitere');

    dann erzeugst du mit

    foreach( $pages as $k => $v)
    {
     echo BuildAnchorTag($v, $k);
    }

    eine, wenn auch nicht besonders hübsche, Auflistung aller Links

    so far...

    Viele Grüße

    lulu