• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

mehrere zuweisungen

stenz

Mitglied
Hallo,
ich habe einen Code quasi übernommen, bin leider nicht damit noch nicht voll zufrieden.
Der Code regelt das der Buchstabe hervorgehoben wird, der angeklickt wurde. In dem Bild die oberste Leiste. BILD http://img94.imageshack.us/img94/6605/heytbe.png
Das klappt ja auch, jedoch wenn ich z.B. einen Unterpunkt davon aussuche in dem Fall z.B. Akasya Duragi wird der Buchstabe nicht mehr gelb hervorgehoben, in dem Beispiel bleibt die Hervorhebung noch da, da dies ein älteres Bild ist und ich gerade nicht daheim bin. :)
PHP:
<?php
$url = array(
"index.php"      =>"Anasayfa",
"start_a.php"    =>"A",
"start_b.php"    =>"B",
"start_c.php"    =>"C",
"start_e.php"    =>"E",
"start_g.php"    =>"G",
"start_h.php"    =>"H",
"start_i.php"    =>"I",
"start_k.php"    =>"K",
"start_p.php"    =>"P",
"start_s.php"    =>"S",
"start_u.php"    =>"U",
"start_y.php"    =>"Y",);

echo '<ul>';
while(list($key,$val)=each($url))
         {
         echo '<li>';
         if(strstr($_SERVER['SCRIPT_NAME'],$key))
                 {
                 echo '<a href id="current">'.$val.'</a>';
                 }
         else
                 {
                 echo '<a href="'.$key.'">'.$val.'</a>';
                 }
         echo '</li>'."\n";
         }
echo '</ul>';
?>
Ich hatte überlegt den Code z.B. an dieser Stelle zu erweitern.
PHP:
<?php
$url = array(
"index.php"      =>"Anasayfa",
"start_a.php" und "akasyaduragi.php"    =>"A", 
?>
Würde das so klappen? Was ich als Problem ansehen würde, befürchte ich das ein neues A also in der Navi zwei As zu sehen sein werden. Werde ich natürlich daheim später überprüfen, außerdem welches ist das Zeichen für ein und in php?
MfG
Stenz
 
Ich würde das dann folgend aufbauen:
Code:
array(
    'A' => array('start_a.php', 'akasyaduragi.php')
);
 
Falls ich das so mache steht in der Navi nicht mehr A, B usw sondern immer array.
PHP:
<?php
$url = array(
"index.php"      =>"Anasayfa",
"A"      => array("start_a.php","adanali.php"));
...?>
 
Zuletzt bearbeitet:
for($i=chr('A');chr('A') =< chr('Z');i++)
echo '<a href="start.php?var='.$o=ord($i).'" '.(isset($_GET['var']) && $o == $_GET['var'])?'class="aktiv":'').'>'.$o.'</a>';

vom Prinzip her sollte dies funktionieren, habs natürlich nicht getestet
 
Ich sehe nicht, wo sich da jemals die Bedingung ändern soll (Endlosschleife). Den Code kann so auch niemand lesen.
 
ah, die bedingung ist murks chr('A'), muss natürlich mit $i ersetzt werden. ~.~

über die lesbarkeit lässt sich streiten :)

das ganze sollte eine liste mit einem link pro buchstabe erzeugen
 
Naja, hab jetzt mehrere Sachen gelesen inbesondere bin ich da auf mehrdimensionale Arrays gestoßen, aber hat irgendwie nicht geklappt. So wie es Flash da geschrieben hatte, habe ich auch versucht mit dem Ergebnis das in der Navi eben nur array stand.
http://img203.imageshack.us/img203/4585/dontworkm.jpg
PHP:
<?php
$url = array(
"Anasayfa"=>array("/hpdizi/index.php"),
"A"=>array("/hpdizi/start_a.php","hpdizi/dizi/001/001_vorlage.php"),
);

echo '<ul>';
while(list($key,$val)=each($url))
         {
         echo '<li>';
         if(strstr($_SERVER['SCRIPT_NAME'],$key))
                 {
                 echo '<a href id="current">'.$val.'</a>';
                 }
         else
                 {
                 echo '<a href="'.$key.'">'.$val.'</a>';
                 }
         echo '</li>'."\n";
         }
echo '</ul>';
?>
Das von freak131 habe ich auch vergeblich versucht, ich krieg das nicht gebacken den Code von ihm richtig einzuordnen, will auch nicht funktionieren.
Perfekt wäre wenn Flash seine Version klappen würde, da ich eigtl. die Logik dahinter verstehe, bei freak131s seiner Version schauts mager aus. :)

So während ich das hier schrieb merkte ich das ich den Code also den in der Schleife ja auch ändern musste, kommt ja davon wenn man es nur kopiert nicht auf alle Einzelheiten achtet. :) Denn wenn ich es wie Flash machen will tauschen sich ja die Plätze bei $val und $key, so simpel...
PHP:
<?php
$url = array(
"Anasayfa"=>"/hpdizi/index.php",
"A"=>array("/hpdizi/start_a.php","hpdizi/dizi/001/001_vorlage.php"),
);

echo '<ul>';
while(list($key,$val)=each($url))
         {
         echo '<li>';
         if(strstr($_SERVER['SCRIPT_NAME'],$val)) //ZEILE 11
                 {
                 echo '<a href id="current">'.$key.'</a>';
                 }
         else
                 {
                 echo '<a href="'.$val.'">'.$key.'</a>';
                 }
         echo '</li>'."\n";
         }
echo '</ul>';
?>
Bekomme aber jetzt die Fehlermeldung
"Warning: strstr() [function.strstr]: needle is not a string or an integer in E:\xampplite\htdocs\hpdizi\navi.php on line 11"
Hab jetzt zwar bei Google unter php strstr array gesucht, aber nichts gleich verwertbares gefunden. :(
Gruß Stenz
 
Habe mal was gebastelt, das die bestehenden Ansätze vereint.

PHP:
<style type="text/css">
#current {
    background: #f00;
}
</style>

<?php

/**
 * Hier alle Zuordnungen Buchstabe->URL erzeugen
 *
 * @return array
 */
function createUrlMap()
{
    $urlMap = array(
        "Anasayfa" => "/hpdizi/index.php",
        "A"        => array(
                          "hpdizi/dizi/001/001_vorlage.php"
                      )
    );

    // Automatisch für jeden Buchstaben eine Startseite hinzufügen
    foreach (range('A', 'Z') as $letter) {
        $urlMap[$letter][] = '/hpdizi/start_' . strtolower($letter) . '.php';
    }

    return $urlMap;
}

/**
 * Überprüft, ob die übergebene URL ($requestUrl) einem Schlüssel zugeordnet ist
 * und liefert gegebenenfalls diesen Schlüssel (etwa ein Buchstabe) zurück
 *
 * @param array $urlMap
 * @param string $requestUrl
 * @return string
 */
function getActiveIndex($urlMap, $requestUrl)
{
    foreach (array_keys($urlMap) as $key) {
        if (isset($urlMap[$key])) {
            $test = $urlMap[$key];

            if (is_array($test)) {
                foreach ($test as $t) {
                    if (strpos($t, $requestUrl) !== false) {
                        return $key;
                    }
                }
            } else {
                if (strpos($test, $requestUrl) !== false) {
                    return $key;
                }
            }
        }
    }

    return '';
}

$urlMap = createUrlMap();



// Ich setze hier testweise den Wert von Hand. Das braucht in einer Anwendung
// mit bestehender Verlinkung natürlich nicht zu geschehen

#$_SERVER['SCRIPT_NAME'] = 'hpdizi/dizi/001/001_vorlage.php';
$_SERVER['SCRIPT_NAME'] = '/hpdizi/start_j.php';

$activeIndex = getActiveIndex($urlMap, $_SERVER['SCRIPT_NAME']);



echo '<ul>';

foreach (range('A', 'Z') as $letter) {
    echo '<li>';   
    echo '<a href=""' . (($activeIndex == $letter) ? ' id="current"' : '') . '>'
       . $letter . '</a>';
    echo '</li>' . "\n";
}

echo '</ul>';
 
Zurück
Oben