if Abfrage

Bevor ich dir [post=1557621]meinen letzten Vorschlag[/post] anbot, habe ich diesen extra ausprobiert. Und er funktionierte auch wie gewünscht in allen Browsern (einschließtlich Internet Explorer und Firefox!). Deswegen war ich auch etwas verwundert, dass er plötzlich laut deiner Aussage doch nicht funktionieren solle.
Und dass du jetzt wieder an deiner alten Funktion herumbastelst, enttäuscht mich zudem etwas. Da hätte ich meine Vorschläge ja gleich für mich behalten können.
 
ich möchte dir nicht zu nahe treten.

Deine letzten Worten waren:

Funktioniert es denn nicht? Ich selbst habe kein Internet Explorer mit dem ich das testen kann. Also kann ich auch nicht beurteilen, ob der Internet Explorer das schluckt.

Wenn es nun nicht klappt, wirst du es selbst herausfinden müssen.

Es wurden die zwei siehe Bild angezeigt

Deine Antwort:
Schön, dann scheint es ja zu funktionieren.

Was soll da funktionieren. Ich bin kein Programmierer ich möchte nur dass, das Menü in allen Browsern funktioniert. Ich kann nichts dafür das die Browserhersteller nur an sich denken.
Hier ist die Funktion mit der ich tagelang herum probiert habe und es nicht hinbekomme.
Und was sie auch nicht darf mit UL anfangen da dieses Menü aus der Funktion heraus nur ein Teil eines Menü’s ist.

PHP:
function navigation($katid)
{
    $retVal = false;
    $res1 = mysql_query("
                SELECT
                        kat_id,
                        kat_bez,
                        eb
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

    if( mysql_num_rows($res1) ) {
        $retVal = '<ul>';
        while( $erg1 = mysql_fetch_assoc($res1) ) {
            if( zaehlen($erg1["kat_id"]) ==0 ) {
                continue;

            }
            $retVal .= '<li class=\"sub\">';
            if( ($buffer = navigation($erg1['kat_id'])) === false ) {
                $retVal .= '<a href="'.htmlspecialchars($_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id'])).'">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')';
                $retVal .= '<!--[if IE 7]><!--></a><!--<![endif]--><!--[if lte IE 6]><a href="'.htmlspecialchars($_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id'])).'">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')<table><tr><td><![endif]-->';
            } else {
                $retVal .= '<a class="hide">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).')';
                $retVal .= '<!--[if IE 7]><!--></a><!--<![endif]--><!--[if lte IE 6]><a href="'.htmlspecialchars($_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id'])).'">'.htmlspecialchars($erg1['kat_bez']).' ('.zaehlen($erg1['kat_id']).') <table><tr><td><![endif]-->';

                $retVal .= $buffer;
                $retVal .= '<!--[if lte IE 6]></td></tr></table></a><![endif]-->';
            }
            $retVal .= '</li>';
        }
        $retVal .= '</ul>';
    }
    mysql_free_result($res1);
    return $retVal;
}



echo navigation(0);

function zaehlen($katid)
{
        list ($anzahl) = mysql_fetch_row(mysql_query("
                SELECT
                        count(*)
                FROM
                        bm_kat
                WHERE
                        bm_kat = ".$katid."
        "));

        $res1 = mysql_query("
                SELECT
                        kat_id
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

        while($erg1 = mysql_fetch_assoc($res1))
                $anzahl += zaehlen($erg1["kat_id"]);

        mysql_free_result($res1);

        return $anzahl;
}


echo "</ul>";

echo "</div>";


mfg
gg
 

Anhänge

  • foo-bar.gif
    foo-bar.gif
    2,4 KB · Aufrufe: 10
Du musst erst einmal zwei Dinge unterschieden: das Markup (HTML) und die Darstellungsformatierungen (CSS). Das eine beschreibt die Struktur und das andere die Darstellung (und teilweise das Verhalten) dieser Struktur.

Die vorgeschlagene Funktion liefert aber nur erstes, nämlich die Struktur des Menüs. Und das exakt so wie das zuletzt genannte CSS-Menü es benötigt: jede Liste innerhalb eines Listenelements wird zusätzlich von Folgendem umgeben:
Code:
<!--[if IE 7]><!--></a><!--<![endif]--><!--[if lte IE 6]><table><tr><td><![endif]-->
…
<!--[if lte IE 6]></td></tr></table></a><![endif]-->
Wenn du dir mal den Rückgabewert der Funktion anschaust, siehtst du, das es dieser Eigenschaft entspricht. Der Algorithmus ist also korrekt.

Dass diese Struktur nun aber falsch dargestellt wird oder sich falsch verhält, ist dann also Ursache des verwendeten CSS oder der Implementierung des CSS-Menüs.

Ich habe dir mal die Datei angehängt, die ich beim Test verwendet habe.
 

Anhänge

Dafür hatte ich ja bereits eine zusätzliche [post=1557497]getNavigation()-Funktion[/post] vorgeschlagen, die nur die Struktur der Navigation in der Form eines mehrdimensionalen Arrays zurückgibt.
 
Habe es jetzt so gemacht;
Fehler anzeige
Warning: Invalid argument supplied for foreach() in on line 405
Zeile 405 = foreach( $structure as $key => $val ) {

PHP:
function getNavigation( $katid )
{
    $retVal = false;
    $res1 = mysql_query("
                SELECT
                        kat_id,
                        kat_bez,
                        eb
                FROM
                        bm_kategorien
                WHERE
                        bm_kategorien.kat_id1 = ".$katid."
        ");

    if( mysql_num_rows($res1) ) {
        $retVal = array();
        while( $erg1 = mysql_fetch_assoc($res1) ) {
            if( zaehlen($erg1["kat_id"]) ==0 ) {
                continue;
            }
            $key = $erg1['kat_bez'].' ('.zaehlen($erg1['kat_id']).')';
            if( ($buffer = getNavigation($erg1['kat_id'])) === false ) {
                $retVal[$key] = $_SERVER['PHP_SELF'].'?id='.$erg1['kat_id'].'&wert='.zaehlen($erg1['kat_id']);
            } else {
                $retVal[$key] = $buffer;
            }
        }
    }
    mysql_free_result($res1);
    return $retVal;
}

function buildNavigation( $structure )
{
    $retVal = '<ul>';
    foreach( $structure as $key => $val ) {
        if( is_array($val) ) {
            $retVal .= '<li class="sub"><a>'.htmlspecialchars($key);
            $retVal .= '<!--[if IE 7]><!--></a><!--<![endif]--><!--[if lte IE 6]><table><tr><td><![endif]-->';
            $retVal .= buildNavigation($val);
            $retVal .= '<!--[if lte IE 6]></td></tr></table></a><![endif]-->';
        } else {
            $retVal .= '<li><a href="'.htmlspecialchars($val).'">'.htmlspecialchars($key).'</a></li>';
        }
    }
    $retVal .= '</ul>';
    return $retVal;
}

echo buildNavigation($structure);
 
Lass dir mal den Wert von $structure ausgeben und prüfe diesen. Vermutlich schlug nämlich die Datenbankabfrage fehl.
 
echo $structure;

kein Inhalt von $structure wenn du das so meinst und zeigt er den selben Fehler an.
Mit der alten Funktion tägt er alles in das Menü ein.
 
die zaehlen()-Funktion
dient dazu die z.B.
Hosen (345)
Hemden (438)
usw.
Wie gesagt das hat alles gut funktioniert wenn es da nicht die Leute gibt die Browser programmieren.
Ich bekomme es einfach nicht hin.

ich habe vergessen zu schreiben dass, die $structure NULL angezeigt hat.
Habe das array von dir wieder drunter gesetzt und es werden im Menü die zwei Button angezeigt nur nicht im IE

PHP:
$structure = array(
    'foo' => '/foo',
    'bar' => array(
        'foi' => '/foo',
        'bar' => '/bar',
    ),
);


Jetzt hab ich noch mal eine Frage. Mit
foreach( $structure as $key => $val ) {
wird doch das array $structure abgearbeitet. Nur wo wird es denn gefüllt.
Ich möchte es nämlich verstehen.

mfg
gg
 
Zurück