Bereiche nur für Mitglieder bestimmter Gruppen zulassen

Artikel, Anleitungen, Minikurse und Leitfaden für alle möglichen PC-Themen und PHP/phpBB.
Antworten
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Bereiche nur für Mitglieder bestimmter Gruppen zulassen

Beitrag von oxpus »

Zunächst benötigen wir die Prüfung, ob der jeweilige Benutzer Mitglied der betreffenden Gruppe ist.
Das geschieht mit dieser Abfrage:

Code: Alles auswählen

// Hier die Gruppen-ID's angeben, für die es gilt, die Usermitgliedschaft festzustellen
// Mehrere Gruppen-IDs sind durch Kommata voneinander zu trennen.
// Wird nur eine Gruppe angegeben, so kann auch folgende Zeile verwendet werden:
// $special_groups = 1; // Gruppen-ID = 1
$special_groups = array(1, 2); // Gruppen mit der ID 1 und 2

// Feststellung der Mitgliedschaft
$sql = "SELECT g.group_id FROM " . GROUPS_TABLE . " g, " . USER_GROUP_TABLE . " ug
	WHERE g.group_id IN ($special_groups);
		AND g.group_id = ug.group_id
		AND ug.user_pending <> " . TRUE . "
		AND g.group_single_user <> " . TRUE . "
		AND ug.user_id = " . $userdata['user_id'];
if ( !$result = $db->sql_query($sql) )
{
	message_die(GENERAL_ERROR, 'Could not get special group data', '', __LINE__, __FILE__, $sql);
}

$special_user = $db->sql_numrows($result);
$db->sql_freeresult($result);

// Bedingung für die Mitgliedschaft, bzw. Nichtmitglieder
if ($special_user != 0)
{
	// Block für Mitglieder
	// Sollte dieser Block nicht benötigt werden, so sind nur diese Kommentarzeilen und
	// die direkt anschliessende Folgezeile zu entfernen. Der else-Zweig muss dann bestehen
	// bleiben!
	$template->assign_block_vars('member_block', array());
}
else
{
	// Block für Nichtmitglieder
	// Diesen Part ab else komplett entfernen, wenn der entsprechende Block nicht benötigt wird.
	$template->assign_block_vars('none_member_block', array());
}
Hier wird dann auch gleich zwei Switches erstellt, die einen Block für Gruppenmitglieder darstellen, bzw. für Nichtmitglieder einen anderen Block bereitstellen.

Diese Abfrage kann in der page_header.php oder in der .php_Datei eingesetzt werden (bei letzterer immer vor $template->pparse(...), in der die Switches verwenden werden sollen.

In der betreffenden .tpl-Datei ist dann der Block für Gruppenmitglieder mit

Code: Alles auswählen

<!-- BEGIN member_block -->

<!-- END member_block -->
und für Nichtmitglieder mit

Code: Alles auswählen

<!-- BEGIN none_member_block -->

<!-- END none_member_block -->
zu umklammern.
Selbstverständlich kann einer der beiden Blöcke auch weggelassen werden, wenn dieser nicht benötigt wird.
Dazu sollte aber auch die Bedingung, wie oben angegeben, entsprechend angepasst werden, um nicht unnötige Prüfungen durchführen zu lassen.

Eine Auswahl durch den User ist hierbei nicht möglich, dieses wäre jedoch um eine Einstellung im Benutzerprofil erweiterbar.
Zuletzt geändert von oxpus am Di 08.Nov, 2005 11:37, insgesamt 2-mal geändert.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Antworten