Ergebnis 1 bis 4 von 4

Thema: Denkanstoß zum PHP Problem

  1. #1
    Interessierte/r
    Registriert seit
    24.06.2010
    Beiträge
    129
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard Denkanstoß zum PHP Problem

    Hiho liebe Community,

    ich hab' gerad' 'n ziemliches Loch im Kopf

    Ich hab' 'n CMS und das wollte ich jetzt um 'ne Produktfuntion erweitern.
    Produkte kann man auch schon anlegen und Kategorien dazu auch.
    Jetzt habe ich folgendes Problem.
    Ich will, dass man zu jeder Kategorie x-beliebige Unterkategorien anlegen kann.
    Dies wollte ich über "Ebenen" Regeln und habe dazu auch schon 'ne Ebenentabelle mit folgenden Spalten erstellt--> ebenenID, ebene, parentID.
    in der Kategorietabelle gibt's eine Spalte ebenenID und in der Produkttabelle dann 'ne Spalte kategorieID.

    Jetzt kommt mein Problem. Ich weiß immoment nicht so Recht, wie ich das umsetzen soll.
    Weil er muss ja schauen, ob das eine Unterkategorie oder eine Kategorie is', wenn es eine Kategorie is', soll er die ebene einfach auf 0 setzen, wenn nicht soll er immer einen hochzählen und in parentID soll die ID, der zugehörigen Ebene stehen :s
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Wenn du im Recht bist, kannst du dir leisten, die Ruhe zu bewahren; und wenn du im Unrecht bist, kannst du dir nicht leisten, sie zu verlieren.
    __________________________________________
    Software design is hard, and we need all the help we can get.
    – Bjarne Stroustrup

  2. #2
    Großmeister(in)
    Registriert seit
    09.12.2008
    Ort
    Berlin
    Alter
    38
    Beiträge
    666
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings
    Blog-Einträge
    1

    Standard AW: Denkanstoß zum PHP Problem

    Ich habe sowas in der Art mal bei einer Navigation gemacht, halt Menupunkte beliebig um Untermenupunkte erweiterbar und das ganze beliebig tief verschachtelt.
    Alle Menupunkte stehen in einer Tabelle, egal ob Hauptmenupunkt oder Untermenupunkt. Das - genauso wie die Tiefe der Verschachtelung - ergibt sich aus dem Feld `parent_id`. Hauptmenupunkte haben `parent_id`=0, Untermenupunkte - wer hätte es gedacht - die ID des Elternmenupunktes.
    Ich klatsch dir einfach mal eine Funktion rein, die das Menu aufbauen soll (ist aus einem Projekt das seit einer ganzen Weile auf Eis liegt und ungetestet. Soll aber ja sowieso nur als Inspirationsquelle dienen):
    PHP-Code:
        private function _getMenu($headline_id,$parent_id=0) {
            
    $sql "
            SELECT 
                n.id,n.link,n.title,n.position,n.isParent
            FROM 
                navigation n
            WHERE 
                n.isActive=1
                AND 
                n.headline_id=?
                AND    
                n.parent_id=?
            ORDER BY
                n.position ASC"
    ;
            
    $res $this->Application->db->prepare($sql);
            
    $res->bind_param('ii',$headline_id,$parent_id);
            
    $res->bind_result($id,$link,$title,$position,$isParent);
            
    $res->execute();
            
    $menu = array();
            while(
    $res->fetch()) {
                
    $submenu $isParent $this->_getMenu($headline_id,$parent_id) : null;
                
    $menu = array(
                    
    "id"=>$id,
                    
    "link"=>$link,
                    
    "title"=>stripslashes($title),
                    
    "position"=>$position,
                    
    "submenu"=>$submenu
                
    );
            }
            return 
    $menu;
        } 
    Vielleicht hilft dir das als kleiner Denkanstoß.
    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  3. #3
    Forum Guru Avatar von synaptic
    Registriert seit
    20.06.2007
    Ort
    Butzbach-Wiesental
    Beiträge
    10.901
    Danke
    45
    Bekam 48 mal "Danke" in 46 Postings
    Blog-Einträge
    1

    Standard AW: Denkanstoß zum PHP Problem

    ist auch, gklaube ich, der weg wie es realisiert wird..
    der erste einsprungspunkt hat die id 1 und es gibt nur eine tabelle die mit sich selber referenziert wird.
    also will sagen: ich kenn es nur so

    bei mehrsprachigkeit wird eben das erste element genommen und als eltern-element refernziert indem parent null ist (oder auch 0, wenn man da nen "ur-element" haben will mit ner festen außerdatenbnklichen ID)
    KEIN support via pn, email, messenger oder falsch geposteten threads
    Futter für deine Schnuffelzwerge gibts bei den Schnuffelzwergen TOP Qualität, also klicken und kaufen

  4. #4
    Interessierte/r
    Themenstarter

    Registriert seit
    24.06.2010
    Beiträge
    129
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Denkanstoß zum PHP Problem

    Ich hab' jetzt mal die Klasse soweit fertig geschrieben. Aber irgendwie will das noch nich' so, wie ich das will...z.B. wird in der Tabelle "parentID (ebenen)" nicht die ID gespeichert....und für das Ebenenhochzählen muss ich mir noch 'ne Funktion überlegen...
    Ich poste mal die zwei Klassen, vllt habt ihr ja ne Idee warum er die ParentID nicht reinschreibt.
    Die ParentID soll quasi die kategorie ID der darüberliegenden Klasse sein:

    Klasse Ebenen :
    PHP-Code:
    class Ebenen{
        
        private 
    $db;
        private 
    $strTabelle;    
        private 
    $parentID;
        private 
    $intEbene;
        private 
    $kategorie;
        private 
    $intID;
        private 
    $kate;
        
        function 
    ebenen(){ 
                
    $this->db = new Connect();
                
    $this->db $this->db->gibConnect();
                
    $this->strTabelle 'ebenen';
            }
            
        function 
    sucheEbene($parentID){
                if(
    is_numeric($parentID)){ 
                    
    $sql='SELECT COUNT(DISTINCT ebenenID) as anzahl 
                          FROM ebenen where parentID = '
    .$parentID;
                    
    $result$this->db->query($sql);
                    
    $zeile $result->fetch_assoc();
                    if(
    $zeile['anzahl'] == 0){
                        return 
    false;
                    }
                    else{
                        return 
    true;
                    }
                }else {
                    echo 
    'Es ist ein Fehler aufgetreten!';
                }
            }
            
        function 
    ebenenAdd($parentID){
            
    $sucheEbene $this->sucheEbene($parentID);
            if (
    $sucheEbene == false){
                
    $sql "INSERT INTO ebenen
                        (ebene, parentID)
                        VALUES
                        ('"
    .$this->intEbene."', '".$this->parentID."')";
                    
    $result $this->db->query($sql);
                    if(!
    $result): $ausgabe "Der Eintrag in der Ebenentabelle ist fehlgeschlagen.";
                    endif;
                    return 
    $ausgabe;
            }
            
    $sql='SELECT ebenenID from ebenen where parentID = '.$parentID.' LIMIT 0,1';
            
    $result $this->db->query($sql);
            
    $zeile $result->fetch_assoc();
            return 
    $zeile['ebenenID'];
        }

        function 
    ebeneHochzaehelen(){
            
        } 
    Klasse Kategorie:
    PHP-Code:
    class Kategorie {
            private 
    $intID;
            private 
    $intDatum;
            private 
    $strKategorie;
            private 
    $strBeschreibung;
            private 
    $intStatus;
            private 
    $strOrdner;
            private 
    $strTabelle;
            private 
    $db;
            private 
    $intEbene;
            private 
    $spracheID;
            private 
    $ebenen;
            
            function 
    Kategorie(){ 
                
    $this->db = new Connect();
                
    $this->db $this->db->gibConnect();
                
    $this->strTabelle 'kategorie';
                
    $this->ebenen = new Ebenen();
            }
            
            function 
    kategorieAdd($kategorie$eingabe$parentID){
                
    $this->strKategorie $kategorie;
                
    $this->strBeschreibung $eingabe;
                
    $this->spracheID 1;
                
    $this->intStatus 0;
                
    $sql "INSERT INTO kategorie
                        (kategorieTitel, kategorieBeschreibung, kategorieStatus, spracheID, ebenenID)
                        VALUES
                        ('"
    .$this->strKategorie."', '".$this->strBeschreibung."','".$this->intStatus."','".$this->spracheID."', '".$this->ebenen->ebenenAdd($parentID)."')";
                
    $result $this->db->query($sql);
                if(!
    $result): $ausgabe "Die Kategorie konnte nicht angelegt werden.";
                else: 
    $ausgabe "Die Kategorie wurde angelegt.";
                endif;
                return 
    $ausgabe;
            }
            
            function 
    sucheEbenen($parentID){
                
    $sql 'SELECT ebenenID from kategorie where '.$parentID'=' .$id;
                
    $result $this->db->query($sql);
                
    $zeile $result->fetch_assoc();
                return 
    $parentID;
            }
            
            function 
    kategorieGib($id){
                
    $this->intID $id;
                
    $sql "SELECT * FROM kategorie WHERE kategorieID = '".$this->intID."'";
                
    $result $this->db->query($sql);
                
    $zeile $result->fetch_assoc();
                
    $ausgabe = array($zeile['kategorieID'],$zeile['kategorieTitel'], $zeile['kategorieBeschreibung'], $zeile['ebenenID']);
                return 
    $ausgabe;
            }
            
            function 
    showMainsite($id$parentID){
                
    $ausgabe '';
                
    $sql ="SELECT * from kategorie where  kategorieID <> $id";
                
    $result=$this->db->query($sql);
                while(
    $zeile $result->fetch_assoc()){
                    if (
    $zeile['kategorieID'] == $parentID){
                        
    $ausgabe .=  '<option value="'.$zeile['kategorieID'].'" selected>'.$zeile['kategorieTitel'].'</option>';
                    }else{
                        
    $ausgabe .=  '<option value="'.$zeile['kategorieID'].'">'.$zeile['kategorieTitel'].'</option>';
                    }
                }
                return 
    $ausgabe;
            } 
    Das Formular, wo man dann quasi zu der Kategorie die unterkategorie auswählen kann sieht wie folgt aus:
    PHP-Code:
    <script type="text/javascript" language="javascript" src="./admin/tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
    <form id="formular" enctype="multipart/form-data" method="post">
    <div class="titel_background">
        <div>Kategorie:</div>
        <input name="kategorie"<?php if(!empty($ausgabe[1])){ echo 'value="'.$ausgabe[1].'"'; } ?> type="text" class=""/>
        <div>Unterkategorie von:</div>
        <select class="combobox" name="parentID">
            <option value="0">keine</option>
            <?php 
                $id 
    0;
                if (isset(
    $_GET['kategorie'])): $id $_GET['kategorie'];
                else: 
    $ausgabe[3] = 0;
                endif;
                
    $kategorie=new kategorie();
                echo 
    $kategorie->showMainsite($id,$ausgabe[3]);
            
    ?>
        </select>
    </div>
    <script type="text/javascript" language="javascript"> 
        tinyMCE.init({
            language : "de",
            mode : "textareas",
            theme : "advanced",
            plugins : "spellchecker,advhr,table,insertdatetime,preview,fullscreen,noneditable",
        theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,|,justifyleft,justifycenter,justifyright,fontselect,fontsizeselect,formatselect,cut,copy,paste,fullscreen",
        theme_advanced_buttons2 : "outdent,indent,|,undo,redo,|,link,unlink,anchor,image,|,code,preview,|,forecolor,backcolor,|,insertdate,inserttime,|,spellchecker,advhr,removeformat,|,sub,sup",
        theme_advanced_buttons3 : "tablecontrols,|,bullist,numlist,|,charmap,|,iespell,media",
        theme_advanced_toolbar_location : "top",
        theme_advanced_toolbar_align : "left",
        theme_advanced_statusbar_location : "bottom"
             });
    </script>
    <textarea name="eingabe" id="textbox" width="570" cols="60" rows="10"><?php if(!empty($ausgabe[2])){ echo $ausgabe[2]; }?></textarea>

        <div class="abschicken"><input name="abschicken" type="submit" value="Speichern" class="form_button" /></div>
         </form>
    Geändert von invidicult (23.12.2010 um 09:57 Uhr)
    Wenn du im Recht bist, kannst du dir leisten, die Ruhe zu bewahren; und wenn du im Unrecht bist, kannst du dir nicht leisten, sie zu verlieren.
    __________________________________________
    Software design is hard, and we need all the help we can get.
    – Bjarne Stroustrup

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •