Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 24. Januar 2012 21:34

ampelmann
probiert CMSMS aus
Registriert: 24. Januar 2012
Beiträge: 31

Re:

Hallo liebe Experten,

ich benutze CMSMS V. 1.10 und habe das schöne Modul 'AdvancedContent' sowie FrontEndUsers installiert.

Es gibt im Layout eine horizontale Top-Navigation, welche alle Seiten anzeigt.

Nun möchte ich aber eingeloggten Benutzern über eine vertikale Sidebar-Navigation nur solche Seiten anzeigen, auf die ich in "Erweiterte Einstellungen" den Frontend-Zugriff auf eine Benutzergruppe festgelegt habe.

Das vertikale Menü anzuzeigen, wenn der Benutzer angemeldet ist, kann ich. Aber wie filtere ich die $nodelist auf eine bestimmte Benutzergruppe?

Wie ist die Lösung?

Danke
Ampelmann

Offline

#2 25. Januar 2012 23:58

Janl
Server-Pate
Ort: Freistadt, Österreich
Registriert: 13. Dezember 2010
Beiträge: 1.039
Webseite

Re:

Hi,

Wenn die Seite bearbeitet wird, kann man bei Tab Hauptmenü, Inhaltstyp angeben "Geschützter Inhalt" und dann bei Tab "Berechtigungen" welche Gruppe(n) diese Seite sehen dürfen.

M.fr.Gr.
Jan


Ubuntu 12.04 mit KDE und Kubuntu 16.04 - FOSS Fan

Offline

#3 25. Januar 2012 06:42

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.807
Webseite

Re:

Diesen Wunsch kannst du nicht so ohne weiteres umsetzen. Um dies zu machen, müsstest du die Nodelist manipulieren. Eine Beispiel dazu findest du hier:
http://forum.cmsmadesimple.de/viewtopic.php?id=156

Falls du was von PHP verstehst, kannst du damit selber was programmieren (ist nicht sehr preformant, sollte aber funktionieren)


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox, Revisions

Offline

#4 25. Januar 2012 20:56

ampelmann
probiert CMSMS aus
Registriert: 24. Januar 2012
Beiträge: 31

Re:

Danke für die Anwort!

nockenfell schrieb:

Um dies zu machen, müsstest du die Nodelist manipulieren. Eine Beispiel dazu findest du hier:
http://forum.cmsmadesimple.de/viewtopic.php?id=156

Ich bekomme eine Fehlermeldung aus dem UDT: Fatal error: Call to a member function Execute() on a non-object in C:\xampp\htdocs\testseite\lib\classes\class.usertagoperations.inc.php(260) : eval()'d code on line 73

Die betreffende Codezeile aus dem UDT:

71: $sql = "select content_id, prop_name, content from ".cms_db_prefix()."content_props where prop_name = 'feu_access'";
72: $db = cmsms()->db;
73: $dbresult = $db->Execute($sql);

Hast Du eine Idee, warum die Abfrage scheitert?

Edit: Ich habe $db = cmsms()->db; ersetzt durch:

global $gCms;
...
$db =& $gCms->GetDB();

So gibt es keine Fehlermeldung mehr.

Beitrag geändert von ampelmann (25. Januar 2012 21:23)

Offline

#5 25. Januar 2012 21:47

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.058

Re:

$db = &cmsms()->GetDb();

Offline

#6 25. Januar 2012 21:48

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.741
Webseite

Re:

ampelmann schrieb:

Die betreffende Codezeile aus dem UDT:

71: $sql = "select content_id, prop_name, content from ".cms_db_prefix()."content_props where prop_name = 'feu_access'";
72: $db = cmsms()->db;
73: $dbresult = $db->Execute($sql);

Hast Du eine Idee, warum die Abfrage scheitert?

Schau mal hier wink

http://forum.cmsmadesimple.de/viewtopic.php?id=1452


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMSMS
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

#7 25. Januar 2012 22:11

ampelmann
probiert CMSMS aus
Registriert: 24. Januar 2012
Beiträge: 31

Re:

Vielen Dank für die Tipps: nockenfell, NaN und cyberman.

Ich bin von der Performance von php ja grundsätzlich beeindruckt, ich komme von .net und sql-server...

Doch wie kann der code geändert werden, um nur noch die geschützten Seiten in der nodelist zu haben?
Und habt Ihr da empfehlenswerte Lektüre für den Um- bzw. Einsteiger in php + smarty?

// UDT feuShowMenu written by Nockenfell 12.2010

// Funktionen

if(!function_exists('btGetFeuGroups')) {
    function btGetFeuGroups() { 
        $feusers = cms_utils::get_module('FrontEndUsers');
    $user_id = $feusers->LoggedInId();
    
        // Alle Gruppen einlesen zu welchen der eingeloggte Benutzer gehört
        $groups = $feusers->GetMemberGroupsArray($user_id);

        $gns = array();
        if($groups !== false ) {
            foreach( $groups as $gid ) {
                $gns[] = $gid['groupid'];
            }
        }
        return $gns;
    }
}

if(!function_exists('btGetFeuAccess')) {
    function btGetFeuAccess($id) {
        $gns = btGetFeuGroups();
        $btFeuAccess = cms_utils::get_app_data('btFeuAccess');
        $feuAccess = $btFeuAccess[$id];
        if ($feuAccess != "" and $feuAccess != -1) {
            // Prüfen der Berechtigung
            $feuArray= explode(';',$feuAccess);
            $retval = false;
            foreach ($feuArray as $feu) {
                if (in_array($feu,$gns)) $retval = true;
            }
            return $retval;
        }
        return true;
    }
}

if(!function_exists('btMenuHasChildren')) {
    function btMenuHasChildren($currentnode,$nodelist) {
        // Children suchen
        foreach ($nodelist as $node) {
            if ($node->depth == $currentnode->depth+1 and $currentnode->hierarchy == substr($node->hierarchy,0,strlen($currentnode->hierarchy))) {
                return true;
            }
        }
        return false;
    }
}

if(!function_exists('btMenuHasParent')) {
    function btMenuHasParent($currentnode,$nodelist) {
        // Parent suchen
        foreach ($nodelist as $node) {$pos = strpos($meinString, $findMich);
            if ($node->depth == $currentnode->depth-1 and strpos($currentnode->hierarchy, $node->hierarchy) !== FALSE) {
                return true;
            }
        }
        return false;
    }
}

if (!isset($params['nodelist'])) {
    echo "UDT-feuShowMenu - Nodeliste des Menüs fehlt!";
    return;
}

// Seiten mit feu_access Eintrag auslesen

$sql = "select content_id, prop_name, content from ".cms_db_prefix()."content_props where prop_name = 'feu_access'";
$db = &cmsms()->GetDb();
$dbresult = $db->Execute($sql);
$btFeuAccess = Array();
while ($dbresult && $row = $dbresult->FetchRow())
        $btFeuAccess[$row['content_id']] = $row['content'];
cms_utils::set_app_data('btFeuAccess',$btFeuAccess);

$nodelist = $params['nodelist'];

// Schreiben welche Seiten sichtbar sind
$modnodelist = array();
foreach($nodelist as $node) {
    $node->hasAccess = btGetFeuAccess($node->id);
    $modnodelist[] = $node;
}

// geschütze Seiten aus dem Array löschen
foreach ($modnodelist as $key=>$node) {
    // geschütze Seiten löschen
    if ($node->hasAccess == false or $node->hasAccess == "") {
        if (false !== ($key = array_search($node,$modnodelist))) {
            unset($modnodelist[$key]);
        }
    }
}

// nicht mehr referenzierte Seiten aus dem Array löschen
foreach ($modnodelist as $key=>$node) {
    // interne Links zu geschütze Seiten löschen
    if ($node->type == "pagelink") {
        foreach ($nodelist as $plnode) {
            if ($plnode->url == $node->url and $plnode->id != $node->id) {
                if (!btGetFeuAccess($plnode->id)) {
                    if (false !== ($key = array_search($node,$modnodelist))) {
                        unset($modnodelist[$key]);
                    }
                }
            }
        }
    }
    // Sectionheader ohne Children löschen
    else if ($node->type == "sectionheader") {
        if (!btMenuHasChildren($node,$modnodelist)){
            if (false !== ($key = array_search($node,$modnodelist))) {
                unset($modnodelist[$key]);
            }
        }
    }
    // Childern ohne Parent löschen
    else if ($node->depth > 1) {
        if (!btMenuHasParent($node,$modnodelist)){
            if (false !== ($key = array_search($node,$modnodelist))) {
                unset($modnodelist[$key]);
            }
        }
    }
}

// $node->prevdepth und $node->haschildren neu setzen
$prevdepth = 1;
foreach ($modnodelist as $node) {
    $node->prevdepth = $prevdepth;
    $prevdepth = $node->depth;
    $node->haschildren = btMenuHasChildren($node,$modnodelist);
}

// Nummerierung Array zurücksetzen
$modnodelist = array_values($modnodelist);


// Assign des Rückgabewertes
if(isset($params['assign'])) 
    $smarty->assign(trim($params['assign']), $modnodelist );
else
    return $modnodelist;

Offline

#8 26. Januar 2012 23:21

cyberman
Moderator
Ort: Dohna / Sachsen
Registriert: 13. September 2010
Beiträge: 6.741
Webseite

Re:

ampelmann schrieb:

Und habt Ihr da empfehlenswerte Lektüre für den Um- bzw. Einsteiger in php + smarty?

http://www.amazon.de/PHP-MySQL-Schritt- … 932&sr=8-1
http://www.packtpub.com/smarty/book


1. Wie bekomme ich hier schnelle Hilfe?
2. HowTo: Fehlersuche bei CMSMS
---
„First they ignore you, then they laugh at you, then they fight you, then you win.“ Mahatma Ghandi

Offline

Fußzeile des Forums

Powered by FluxBB