Hauptnavigation mit Rechten ?

Gesperrt
Condor
Beiträge: 107
Registriert: Mo 14. Mär 2005, 17:31
Kontaktdaten:

Hauptnavigation mit Rechten ?

Beitrag von Condor »

Hallo,

wie ist es möglich das eine Navigation die Punkte aufklappt die man nur sehen darf. Also, die Navigation soll in der DB nachschauen was man für Rechte hat und dann halt entscheiden welche Menüpunkte angezeigt werden sollen oder nicht. Ich habe in der tabelle con_phplib_auth_user_md5 mehrere Spalten eingefügt, z.B "Mitglied", "Gruppe" usw. Jetzt sollte die Navigation dort nachschauen und gucken: Wenn bei Mitglied "Ja" steht dann mache ich Menüpunkt A auf, steht bei Gruppe eine 2, bleibt Menüpunkt B zugeklappt, wenn aber bei Gruppe eine 1 steht dann klappe ich Menüpunkt B auf. Achso, ich verwende folgende Hauptnavigation:
INPUT:

Code: Alles auswählen

/** 
 * Navigation 
 * 
 * INPUT 
 * 
 * @autor Jan Lengowski <Jan.Lengowski@4fb.de> 
 * @copyright four for business AG 2003 
 */ 

?> 
<table cellspacing="0" cellpadding="0" cellpadding="4"> 

    <tr> 
        <td class="text">Baum wählen:</td> 
        <td> 
            <select name="CMS_VAR[0]"> 
            <option value="0">-- kein --</option> 
            <?php 

                $sql = "SELECT 
                            A.idcat, 
                            C.name 
                        FROM 
                            ".$cfg["tab"]["cat_tree"]." AS A, 
                            ".$cfg["tab"]["cat"]." AS B, 
                            ".$cfg["tab"]["cat_lang"]." AS C 
                        WHERE 
                            A.idcat     = B.idcat AND 
                            B.idcat     = C.idcat AND 
                            C.idlang    = '".$lang."' AND 
                            B.idclient  = '".$client."' AND 
                            C.visible   = 1 AND 
                            A.level     = '0' 
                        ORDER BY 
                            A.idtree"; 

                $db->query($sql); 

                while ( $db->next_record() ) { 

                    if ( "CMS_VALUE[0]" == $db->f("idcat") ) { 
                        echo '<option selected="selected" value="'.$db->f("idcat").'">'.$db->f("name").'</option>'; 

                    } else { 
                        echo '<option value="'.$db->f("idcat").'">'.$db->f("name").'</option>'; 

                    } 
                } 

            ?> 
            </select> 
        </td> 
    </tr> 

</table> 

<?php
Und OUTPUT:

Code: Alles auswählen

<?php 

/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname   :     Navigation 1.1 
* Author      :     Jan Lengowski 
* Copyright   :     Contenido - four for business 
* Created     :     15-05-2003 
* Modified    :     26-05-2003 
* Modified    :     25-06-2004 - Andreas Jänschke (4. Ebene eingefügt) 
************************************************/ 

if ( !is_object($db2) ) { 
    $db2 = new DB_Contenido; 
} 

/** 
 * Check if a category is child 
 * of another category 
 * 
 * @return boolean true/false 
 * @author Jan Lengowski <Jan.Lengowski@4fb.de> 
 * @copyright four for business AG 2003 
 */ 
if (!function_exists("catIsChildOf")) 
{ 
    function catIsChildOf($id, $idparent) { 
    
        global $cfg, $client, $lang; 
    
        $db = new DB_Contenido; 
    
        $parent = $id; 
    
        while ( $parent != 0 ) { 
    
            $sql = "SELECT 
                        a.parentid 
                    FROM 
                        ".$cfg["tab"]["cat"]." AS a, 
                        ".$cfg["tab"]["cat_lang"]." AS b 
                    WHERE 
                        a.idclient  = '".$client."' AND 
                        b.idlang    = '".$lang."' AND 
                        a.idcat     = b.idcat AND 
                        a.idcat   = '".$parent."'"; 
    
            $db->query($sql); 
            $db->next_record(); 
    
            $parent = $db->f("parentid"); 
    
            if ($parent == $idparent) { 
                return true; 
            } 
    
        } 
    
        return false; 
    
    } 
} 

if ( catIsChildOf($idcat, "CMS_VALUE[0]") ) { 
    $sel_idcat = $idcat; 
} else { 
    $sel_idcat = "CMS_VALUE[0]"; 
} 

/* Include Template Class */ 
include_once($cfg["path"]["contenido"] . 'classes/class.template.php'); 

/** 
 * Array storing alle the 
 * navigation data 
 */ 
$navitems = array(); 


/* Template Instance */ 
$tpl = new Template; 

/** 
 * Recursive function for creating 
 * the navigation array 
 * @param Int $idcat Category id 
 */ 
function nav($idcat) { 

        global $navitems, $client, $lang, $cfg; 

        $db  = new DB_Contenido; 
        $db2 = new DB_Contenido; 

        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat = '$idcat'"; 

        $db->query($sql); 
        $db->next_record(); 

        $parentid = $db->f("parentid"); 

        if ( $parentid == 0 ) { 

           if ( $idcat != "CMS_VALUE[0]" ){ 

                $navitems = array(); 
              
                $sql = "SELECT 
                            A.idcat, 
                            C.name 
                        FROM 
                            ".$cfg["tab"]["cat_tree"]." AS A, 
                            ".$cfg["tab"]["cat"]." AS B, 
                            ".$cfg["tab"]["cat_lang"]." AS C 
                        WHERE 
                            A.idcat     = B.idcat   AND 
                            B.idcat     = C.idcat   AND 
                            B.idclient  = '$client' AND 
                            C.idlang    = '$lang'   AND 
                            C.visible   = '1'       AND 
                            B.parentid  = 'CMS_VALUE[0]' 
                        ORDER 
                            BY A.idtree"; 

                      $db->query($sql); 

                      while ($db->next_record()) { 

                            /* Check for external redirects... */ 
                            $sql = "SELECT 
                                        a.external_redirect AS ext 
                                    FROM 
                                        ".$cfg["tab"]["art_lang"]." AS a, 
                                        ".$cfg["tab"]["cat_art"]." AS b, 
                                        ".$cfg["tab"]["cat"]." AS c 
                                    WHERE 
                                        b.idcat     = '".$db->f("idcat")."' AND 
                                        b.is_start  = '1' AND 
                                        c.idclient  = '".$client."' AND 
                                        c.idcat     = b.idcat AND 
                                        a.idart     = b.idart AND 
                                        a.idlang    = '".$lang."'"; 

                            $db2->query($sql); 
                            $db2->next_record(); 

                            $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 

                            $navitems[$db->f("idcat")] = array("idcat"      => $db->f("idcat"), 
                                                                "name"      => $db->f("name"), 
                                                                "target"    => $target); 
                      } 

           } 
            
           return true; 
        } 

        $sql = "SELECT 
                    A.idcat, 
                    C.name 
                FROM 
                    ".$cfg["tab"]["cat_tree"]." AS A, 
                    ".$cfg["tab"]["cat"]." AS B, 
                    ".$cfg["tab"]["cat_lang"]." AS C 
                WHERE 
                    A.idcat     = B.idcat   AND 
                    B.idcat     = C.idcat   AND 
                    B.idclient  = '$client' AND 
                    C.idlang    = '$lang'   AND 
                    C.visible   = '1'       AND 
                    B.parentid  = '$parentid' 
                ORDER BY 
                    A.idtree"; 

        $db->query($sql); 

        while ($db->next_record()) { 

                /* Check for external redirects... */ 
                $sql = "SELECT 
                            a.external_redirect AS ext 
                        FROM 
                            ".$cfg["tab"]["art_lang"]." AS a, 
                            ".$cfg["tab"]["cat_art"]." AS b, 
                            ".$cfg["tab"]["cat"]." AS c 
                        WHERE 
                            b.idcat     = '".$db->f("idcat")."' AND 
                            b.is_start  = '1' AND 
                            c.idclient  = '".$client."' AND 
                            c.idcat     = b.idcat AND 
                            a.idart     = b.idart AND 
                            a.idlang    = '".$lang."'"; 

                $db2->query($sql); 
                $db2->next_record(); 

                $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 
                
                $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"), 
                                                  "name"    => $db->f("name"), 
                                                  "target"  => $target); 
        } 

        $tmp_nav[$idcat]["sub"] = $navitems; 
        $navitems = $tmp_nav; 

        /* Function call */ 
        nav($parentid); 

}  // end function 

$sql = "SELECT 
            A.idcat, 
            C.name 
        FROM 
            ".$cfg["tab"]["cat_tree"]." AS A, 
            ".$cfg["tab"]["cat"]." AS B, 
            ".$cfg["tab"]["cat_lang"]." AS C 
        WHERE 
            A.idcat     = B.idcat   AND 
            B.idcat     = C.idcat   AND 
            B.idclient  = '$client' AND 
            C.idlang    = '$lang'   AND 
            C.visible   = '1'       AND 
            B.parentid  = '$sel_idcat' 
        ORDER BY 
            A.idtree"; 

$db->query($sql); 

while ( $db->next_record() ) { 

        /* Check for external redirects... */ 
        $sql = "SELECT 
                    a.external_redirect AS ext 
                FROM 
                    ".$cfg["tab"]["art_lang"]." AS a, 
                    ".$cfg["tab"]["cat_art"]." AS b, 
                    ".$cfg["tab"]["cat"]." AS c 
                WHERE 
                    b.idcat     = '".$db->f("idcat")."' AND 
                    b.is_start  = '1' AND 
                    c.idclient  = '".$client."' AND 
                    c.idcat     = b.idcat AND 
                    a.idart     = b.idart AND 
                    a.idlang    = '".$lang."'"; 

        $db2->query($sql); 
        $db2->next_record(); 

        $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 

        $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"), 
                                           "name"   => $db->f("name"), 
                                           "target" => $target); 
} 

/* Create Navigation Array */ 
nav($sel_idcat); 

/* Start Output buffer */ 
ob_start(); 

echo '<table cellspacing="0" cellpadding="0" border="0">'; 

foreach ($navitems as $key => $data) { 

    /* 1. Navigations Ebene */ 
    $tpl->reset(); 
    $tpl->set('d', 'NAME',  $data['name']); 
    $tpl->set('d', 'TARGET', $data['target']); 
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
    $tpl->next(); 

    if ($idcat == $data['idcat'] || is_array($data['sub'])) { 
        $tpl->generate('templates/navfirst_on.html'); 
    } else { 
        $tpl->generate('templates/navfirst_off.html'); 
    } 

    if (is_array($data['sub'])) { 

        foreach ($data['sub'] as $key => $data) { 

            /* 2. Navigations Ebene */ 
            $tpl->reset(); 
            $tpl->set('d', 'NAME',  $data['name']); 
            $tpl->set('d', 'TARGET', $data['target']); 
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
            $tpl->next(); 

            if ($idcat == $data['idcat'] || is_array($data['sub'])) { 
                $tpl->generate('templates/navsecond_on.html'); 
            } else { 
                $tpl->generate('templates/navsecond_off.html'); 
            } 

            if (is_array($data['sub'])) { 

                foreach ($data['sub'] as $key => $data) { 

                    /* 3. Navigations Ebene */ 
                    $tpl->reset(); 
                    $tpl->set('d', 'NAME',  $data['name']); 
                    $tpl->set('d', 'TARGET', $data['target']); 
                    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
                    $tpl->next(); 

                    if ($idcat == $data['idcat']) { 
                        $tpl->generate('templates/navthird_on.html'); 
                    } else { 
                        $tpl->generate('templates/navthird_off.html'); 
                    } 

                  if (is_array($data['sub'])) { 
        
                      foreach ($data['sub'] as $key => $data) { 
        
                          /* 4. Navigations Ebene */ 
                          $tpl->reset(); 
                          $tpl->set('d', 'NAME', $data['name']); 
                          $tpl->set('d', 'TARGET', $data['target']); 
                          $tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat'])); 
                          $tpl->next(); 
        
                          if ($idcat == $data['idcat']) { 
                              $tpl->generate('templates/navfourth_on.html'); 
                          } else { 
                              $tpl->generate('templates/navfourth_off.html'); 
                          } 
        
                  } // end foreach 
                  } // end if 

            } // end foreach 
            } // end if 

      } // end foreach 

    } // end if 
} // end foreach 

echo '</table>'; 

/* Read out buffer */ 
$html = ob_get_contents(); 

/* Clean buffer */ 
ob_end_clean(); 

/* Output buffer-contents */ 
echo $html; 

?>
Wie kann ich sowas realisieren bzw. die Navigation erweitern? Hat das jemand schon gemacht oder eine Codesnipsel zur Hand ? Ich bräuchte so ein Modul unbedingt :wink:
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

such mal nach -> have_perm
da gibts schon einige module die entsprechend angepasst wurden...
vielleicht ist das ja brauchbar....
*** make your own tools (wishlist :: thx)
Condor
Beiträge: 107
Registriert: Mo 14. Mär 2005, 17:31
Kontaktdaten:

Beitrag von Condor »

Hi,

jo danke, werde ich mir mal anschauen. Ansonsten lasse ich das wie es ist. Je nachdem was man ist, leitet das Modul einen auf die entsprechende Seite. Das ist so erstmal ok. Sonst wird das alles zu kompliziert. Ich bräuchte eigentlich ein professionelles Rechte-System für Contenido und sowas gibts nicht, leider. Bis dann und danke für all deine Ratschläge. Achso eins könntest du mir vll. noch sagen. Ich versuche aus einer DB, Daten bzw. Datensätzte auszulesen und diese z.B in ein PullDown-Menü zu stecken. Ich kriege das aber nicht hin. Es wird nur ein leeres PullDown-Menü erzeugt. Ich würde es hier posten, habs aber schon gelöscht. Hast du da eine Lösung oder vll. sogar ein Code-Snipsel ?
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

bestes beispiel für so ein code snippet

-> sieh dir den input bereich des moduls hauptnvaigation an...
dort wird sowas gemacht...
*** make your own tools (wishlist :: thx)
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

Condor hat geschrieben:Ich bräuchte eigentlich ein professionelles Rechte-System für Contenido und sowas gibts nicht, leider.
Was ist ein professionelles Rechte-System?
Condor
Beiträge: 107
Registriert: Mo 14. Mär 2005, 17:31
Kontaktdaten:

Beitrag von Condor »

Hallo,

@emergence: Werde ich mir gleich mal angucken.

@timo: Ein System, indem ich jeden User der bei mir angemeldet ist individuell Rechte vergeben kann. Wenn er sich einloggt, dann wird bei jeder Tätigkeit was der User macht, geprüft ob er überhaupt sowas darf z.B in diese Forum gehen oder diese Seite bearbeiten usw.
Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix »

Da ist Contenido gar nicht weit von entfernt. Im Backend ist schon alles vorbereitet, du kannst für jeden Benutzer jede Kategorie einzeln freigeben.

Wenn du jetzt noch die Abfrage fürs Frontend programmierst, dann hast du genau, was du brauchst.

Bitte dann aber auch veröffentlichen, immerhin ist Contenido ein Open Source System und lebt von Inputs der Benutzer.

Gruß
Florian
Condor
Beiträge: 107
Registriert: Mo 14. Mär 2005, 17:31
Kontaktdaten:

Beitrag von Condor »

Hi,

ist mir schon klar das sowas im Backend läuft. Aber programmier mal "ebend" sowas läuft nicht :) Ausserdem hab ich hier noch andere Sachen bzw. Probleme die ich in Contenido lösen muss. Und wenn ich sowas machen würde, würde ich es natürlich sofort hier reinstellen. Schliesslich suche ich mir hier auch Codes raus. Es müsste hier ein Forum geben, wo nur fertige Scripte bzw. Module rein kommen. Dann braucht man nicht soviel suchen.
Gesperrt