Select Box mit MySQL und Unterkategorien

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Select Box mit MySQL und Unterkategorien

    Ich nutze sslinks als Link-Index.
    Dieses Script-Set arbeitet mit Kategorien und Sub-Kategorien.

    Die Kategorie-Datenbank hat folgende Struktur
    Code:
    CREATE TABLE /*!32300 IF NOT EXISTS*/ sslinkcats (
      lcat_id int(11) NOT NULL auto_increment, //  Kategorie-ID 
      lcat_cat int(11) NOT NULL DEFAULT '0' , // Übergeordnete Kategorie ( 0 ist Index) 
      lcat_name varchar(100) NOT NULL DEFAULT '' , // Kategorie-Name
      lcat_header text , // Kategorie-Beschreibung
      lcat_ranking int(11) , // Ranking
      lcat_numlinks int(11) NOT NULL DEFAULT '0' , // Anzahl der Links
      PRIMARY KEY (lcat_id)
    );
    Aus dieser Tabelle wird im Admin-Bereich eine Select-Box erstellt.
    Bisher habe ich es zumindest geschafft ,
    dass die direkt übergeordnete Kategorie mit angezeigt wird in der Form
    Code:
    <option value="2">Haupt_Kateg -> Aktuelle_Kategorie</option>
    Leider klappt das nicht, wenn die aktuelle Kategorie
    in der 3. Ebene oder tiefer ist.
    Dort gibt er mir nur die direkt übergeordnete Kategorie aus.
    Die Funktion dazu lautet
    PHP-Code:
    function select_parent_cat($par_id)
    {
        
    // Funktion 'Übergeordnete Kategorie'
        // wird von Function 'select_category()' aufgerufen,
        // falls diese nicht der Hauptkategorie zugeordnet ist
        
    global $db_host$db_name$db_user$db_pass$sent3$sent4$sent9;
        
    $cnx mysql_connect($db_host$db_user$db_pass)
            or 
    custom_die("$sent3");
        
    mysql_select_db($db_name$cnx)
            or 
    custom_die("$sent4");
        
    $result mysql_query("SELECT lcat_name FROM sslinkcats WHERE lcat_id = '$par_id'");
        if (!
    $result)
            
    custom_die("$sent9");
        while (
    $row mysql_fetch_array($result))
        {
            
    // Name der abgefragten Kategorie
            
    $p_result $row["lcat_name"];
        }
        
    $p_result .= " -> "// Trenner in der Selectbox-Ausgabe
                             // z.B. "Haupt_Kategorie -> Aktuelle_Kategorie"
        //mysql_close();
        
    return $p_result;        
    }


    function 
    select_category($id)
    {
        global 
    $db_host$db_name$db_user$db_pass$sent3$sent4$sent9;
        
    // Fragt alle Kategorien ab und gibt diese an Select-Box
        
    $cnx mysql_connect($db_host$db_user$db_pass)
            or 
    custom_die("$sent3");
        
    mysql_select_db($db_name$cnx)
            or 
    custom_die("$sent4");
        
    $resultcat mysql_query("SELECT * FROM sslinkcats Order by lcat_name asc");
        if (!
    $resultcat)
            
    custom_die("$sent9");
        
        
    $catfrontid "lcat_cat"// ID der übergeordneten Kategorie
        
    $catselid "lcat_id"// ID aktuelle Kategorie
        
    $catselname "lcat_name"// Name der Kategorie
        
    $catsel $id;

        if (
    mysql_Numrows($resultcat)>0//if there are records in the fields
        

          
    $numrows=mysql_NumRows($resultcat); //count them
          
    $x=0
          while (
    $x<$numrows){ //loop through the records
            
    $theId=mysql_result($resultcat,$x,$catselid); // Kateg-ID
            
    $theName=mysql_result($resultcat,$x,$catselname); // Name der Kategorie
            
    $theParent=mysql_result($resultcat,$x,$catfrontid); // ID der Parent-Kategorie
            
            // Gehört die Kategorie einer übergeordneten Kat. an ('lcat_cat' größer 0 ), 
            // wird Funktion 'select_parent_cat()' aufgerufen
            // und in der Selectbox erscheint "Haupt_Kategorie -> Aktuelle_Kategorie"
            
    $parentcat "";
            if (
    $theParent!="0") {
                
    $parentname select_parent_cat($theParent);
                
    $parentcat .= $parentname;
            }
            
            if (
    $theId == $id) {
                
    $return .= ss_template('categories_selectopt_y.tmpl', array(
                    
    '%parent%' => $parentcat,
                    
    '%optval%' => $theId,
                    
    '%optselected%' => 'selected',
                    
    '%optname%' => $theName
                
    ));
            } else {
                
    $return .= ss_template('categories_selectopt_y.tmpl', array(
                    
    '%parent%' => $parentcat,
                    
    '%optval%' => $theId,
                    
    '%optselected%' => '',
                    
    '%optname%' => $theName
                
    ));
            
            }
            
    // Das erzeugte Select-Auswahlfeld hat folgenden Aufbau:
            // <option value="%optval%" %optselected%>%parent% %optname%</option>
            
    $x++;
          }
        }
        
    mysql_close();
        return 
    $return;

    Wie kann ich nun realisieren, dass das Script mir auch eine Select-Box erzeugt,
    in der alle übergeordneten Kategorien angezeigt werden?

    Schon mal Danke an die beste PHP-Community, die es gibt.

  • #2
    Ich persönlich würde ja mal wieder den rekursiven Ansatz bevorzugen und zusätzlich das Prefix mit übergeben.

    PHP-Code:
    function fetchCategory($cat=0$prefix="") {
        
    $result="";
        if ( 
    $res mysql_query("SELECT lcat_id, lcat_name FROM sslinkcats WHERE lcat_cat = $cat") ) {
            while ( 
    $row=mysql_fetch_array($resMYSQL_ASSOC) ) {
                if ( 
    $prefix!="" $prefix2=$prefix." -> ".$row["lcat_name"]; else $prefix2=$row["lcat_name"];
                
    $result.="<option value=\"".$row["lcat_id"]."\">".$prefix2."</option>\n";
                
    $result.=fetchCategory($row["lcat_id"], $prefix2);
            }
            
    mysql_free_result($res);
        }
        return 
    $result;

    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Vielen Dank, hat prima geklappt,
      nachdem ich dass zweimal durchgelesen habe.

      Ich sag doch:
      Die beste PHP-Community der Welt!

      Übrigens, die sslinks-Macher scheint es nicht mehr zu geben, zumindest nicht unter www.sslinks.co.uk

      Kommentar


      • #4
        Och ... so schlimm fand ich's gar nicht ...
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Übrigens, Dein Name und dein Motto hören sich ganz nach Pfingsten in Leipzig an?!
          Wir haben dort gedreht (viele Konzert-Aufnahmen und Exklusiv-Interviews).
          Die gibts ab 1. Juni bei Halle-WebTV.de

          Jedenfalls noch mal danke

          Kommentar


          • #6
            Schick ... vielleicht habe wir uns da sogar getroffen ...
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar

            Lädt...
            X