Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 24. Januar 2012 21:34
- ampelmann
- probiert CMS/ms aus
- Registriert: 24. Januar 2012
- Beiträge: 35
Menü nur bei angemeldeten Benutzern zeigen
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.231
- Webseite
Re: Menü nur bei angemeldeten Benutzern zeigen
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
Kubuntu 22.04 - Win 11 pro / Kubuntu 20.04 - win10 pro
Offline
#3 25. Januar 2012 06:42
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: Menü nur bei angemeldeten Benutzern zeigen
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://www.cmsmadesimple.de/forum/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
Offline
#4 25. Januar 2012 20:56
- ampelmann
- probiert CMS/ms aus
- Registriert: 24. Januar 2012
- Beiträge: 35
Re: Menü nur bei angemeldeten Benutzern zeigen
Danke für die Anwort!
Um dies zu machen, müsstest du die Nodelist manipulieren. Eine Beispiel dazu findest du hier:
http://www.cmsmadesimple.de/forum/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.437
Re: Menü nur bei angemeldeten Benutzern zeigen
$db = &cmsms()->GetDb();
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#6 25. Januar 2012 21:48
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Menü nur bei angemeldeten Benutzern zeigen
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
Offline
#7 25. Januar 2012 22:11
- ampelmann
- probiert CMS/ms aus
- Registriert: 24. Januar 2012
- Beiträge: 35
Re: Menü nur bei angemeldeten Benutzern zeigen
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
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: Menü nur bei angemeldeten Benutzern zeigen
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
Offline
Seiten: 1