Select Box mit MySQL und Unterkategorien

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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]

    Comment


    • #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

      Comment


      • #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]

        Comment


        • #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

          Comment


          • #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]

            Comment

            Working...