Seite 1 von 2

<!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 07.01.2009 06:26
von chris1278
Hier eine Anleitung wie man sich abfrage Variable für templates erstellt.

Dies ist getestet und funktioniert mit Phpbb 3.0.4

Diese Variablen sind dann an Gruppen (und deren id) Verbunden.

Zugrunde lege folgenden mod-snipet: Gruppenzugehörigkeiten eines Benutzers prüfen

dazu benötigt man wie in dem snipet beschrieben logischerweise die Funktion: group_memberships()

Um diese zu laden muss man die Datei functions_user.php laden die im Ordner includes liegt.
Also hier root/includes/functions_user.php

um diese Datei zu laden musst du die Index.php im root Verzeichnis deines Forums bearbeiten

Dafür suche:

Code: Alles auswählen

// Start session management
$user->session_begin();
$auth->acl($user->data);
setze davor:

Code: Alles auswählen

include($phpbb_root_path . 'includes/functions_user.' . $phpEx);  
somit wird die geforderte Datei immer mit geladen.

desweiteren Bediene ich mich dann aus dem vorliegende Snipet an dem Szenario 1. in dem wir das in einzelgruppen machen.

und zwar benutz man dafür am besten folgenden code:

Für eine Variable die im Template als <!-- IF S_ADMIN --> lautet ist hier das Bespiel die Gruppe 5 die im normal Fall nach der Installation des Phpbb Forums automatisch der Systemgruppe "Administrator" zugeordnet ist.
// zu überprüfende Gruppen ID ( Beispiel Gruppen ID 5 )
$gruppen_id = 5;

// zu überprüfender User ( Beispiel: Der User, der diese Seite aufgerufen hat )
$benutzer_id = $user->data['user_id'];

// Nun erfolgt die eigentliche Prüfung:
$is_in_group = group_memberships($gruppen_id, $benutzer_id , true);
if ($is_in_group == true)
{
//Hier kann man der Variable einen Namen geben in unserem beispiel hier S_ADMIN
$template->assign_var('S_ADMIN', true);
}
Wenn man jetzt zwei Variablen haben will mus man den Code so wie der oben ist einfach verdoppeln. allerdings mus die gruppen id und der Variable-Name dementsprechend angepasst werden.

Hier das Beispiel dafür:
Wir nehmen wie oben die Gruppe des "Administrators" (Gruppen ID=5) und wir nehmen zusätzlich noch die Gruppe "Gäste" (Gruppen ID=1) dies sind beides Standard Gruppen die nach der Erstinstallation vorhanden sind und bis jetzt hatten die immer dieselbe Gruppen id gehabt. egal wie oft und wo ich die Forensoftware installiert hatte.
Hier auch farblich markiert
// zu überprüfende Gruppen ID ( Beispiel Gruppen ID 5 )
$gruppen_id = 5;

// zu überprüfender User ( Beispiel: Der User, der diese Seite aufgerufen hat )
$benutzer_id = $user->data['user_id'];

// Nun erfolgt die eigentliche Prüfung:
$is_in_group = group_memberships($gruppen_id, $benutzer_id , true);
if ($is_in_group == true)
{
//Hier kann man der Variable einen Namen geben in unserem beispiel hier S_ADMIN
$template->assign_var('S_ADMIN', true);
}
// zu überprüfende Gruppen ID ( Beispiel Gruppen ID 2 )
$gruppen_id = 2;

// zu überprüfender User ( Beispiel: Der User, der diese Seite aufgerufen hat )
$benutzer_id = $user->data['user_id'];

// Nun erfolgt die eigentliche Prüfung:
$is_in_group = group_memberships($gruppen_id, $benutzer_id , true);
if ($is_in_group == true)
{
//Hier kann man der Variable einen Namen geben in unserem beispiel hier S_GAST
$template->assign_var('S_GAST', true);
}
nun folgende stelle in der index.ph suchen und den code davor einfügen:

Code: Alles auswählen

// Output page
page_header($user->lang['INDEX']);

$template->set_filenames(array(

so sieht der code aus ohne anmerkunden
$gruppen_id zahl= ;hier kommt die gruppen id hin
$benutzer_id = $user->data['user_id'];
$is_in_group = group_memberships($gruppen_id, $benutzer_id , true);
if ($is_in_group == true)
{
$template->assign_var('S_', true);hier mus eine variable name gewählt werden
}
Wenn du dann diesen Code jetzt nehmen würdest so wie ich den hier getextet habe würdest du zwei Variablen haben Nämlich
1. <!-- S_ADMIN -->
2. <!-- S_GAST -->

Somit hättest du zwei Variablen für dein Template. Diese kann man dan z.B. einsetzen um verschiedene mods zu verschiedene gruppen zuzuordnen usw.

Somit könnet man jetzt z.B. den Aufrufbefehl von einem Mod den man eingebaut hat auf eine bestimmte Gruppe beschränken.

dafür mus man halt z.B. (meistens) in der index_bod.html den befehlscode des entsprechenden mods mit der Variable einbinden.

etwa so:

Code: Alles auswählen

<!-- S_ADMIN --> 
Code von Mod Nr:1
<!-- ENDIF -->   

<!-- S_GAST -->
Code von Mode Nr:2
<!-- ENDIF -->  
Somit würde der Mod Nr.: 1 nur gehen wenn du der benutzergruppe mit der id 5 angehörst in unserem beispiel hier der gruppe Administratoren

und der Mod Nr. 2 würde nur gehen wenn du der GRuppe mit der id 2 Angehörst also der Gäste.

So im prinzip fehlt jetzt nur noch wie man die Gruppen ID herausfindet. dazu gehst du in den Admin-Bereich deines Forums auf Gruppen Verwalten dort nimmst du entweder eine Vorhandene Gruppe oder erstellst eine. Auf jeden fall gehts du auf die option "Einstellungen" der Gruppe die du benutzen willst und dann suchst du in der Adresszeile die dann in deinem Webbrowser erscheint den wert g= hier rot makiert:
die Zahl die hinter dem g= steht gibt die Gruppen ID an.

PS: ich weis in dem Snipet gibt es auch via array mit mehreren gruppen. dies hab ich allerdings nicht bzw. noch nicht zum laufen gebracht.

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 07.01.2009 08:34
von Dr.Death
Naja,

um auf "Admin" oder "Gast" zu prüfen braucht man diese Anleitung nicht.... unbedingt ;-)

Einen Admin erkennt man an den Adminrechten...
Sobald ein User irgendein Adminrecht hat ist U_ACP true.

Code: Alles auswählen

<!-- IF U_ACP -->
 hier steht der Code für einen Admin
<!-- ENDIF --> 
Das gleiche gilt für Moderatoren:

Code: Alles auswählen

<!-- IF U_MCP -->
 hier steht der Code für einen Moderator
<!-- ENDIF --> 
Gäste werden so ermittelt:

Code: Alles auswählen

<!-- IF not S_USER_LOGGED_IN and not S_IS_BOT -->
 Hier steht der Code nur für Gäste ( Nicht eingeloggte User )
 Auch Suchmaschienen finden diese Stelle nicht
<!-- ENDIF --> 

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 07.01.2009 09:01
von chris1278
das ist ja nur als beispiel gedacht. man kan nach der anleitung aber z.b. ne gruppe neu erstellen und mit bzw. für diese grupe ne variable machen. dafür ist das gedacht

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 08.01.2009 17:34
von jimmartens
Hast aber was wichtiges vergessen: Vor dem folgenden Code kommt noch "if ($is_in_group == true)".

Code: Alles auswählen

{
$template->assign_var('S_ADMIN', true);
}
Ohne die if-Funktion übermittelt das Skript die Variable nicht und somit würde eine Eingabe im Template nur als Kommentar gewertet werden.

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 08.01.2009 17:55
von Doktor Smile
Dr. Death hat da natürlich recht, was diese Gruppen betrifft.

Aber mir z.B. hat es sehr geholfen, da ich mit dieser Sache hier echt immer Probleme hatte.

Ich habs zwar noch nicht getestet,
allerdings habe ich bei diesem Codeschnippsel oder was das war nicht einmal den Code verstanden. :grin:

Vielen dank!

Könntest du evtl. auch nochmal so ein tolles Tutorial machen, wie man Gruppen zur Teamseite hinzufügt? Da habe ich den Code leider auch nicht verstanden.

herzliche Grüße
Doktor :)

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 08.01.2009 18:12
von jimmartens
Ich bin zwar ein anderer aber im Grunde genommen ganz einfach. Kommt allerdings darauf an welche Seite du meinst. Meinst du, dass wenn man auf dem Portal links auf Team klickt deine Gruppe angezeigt wird? Wenn ja, dann vergiss es, denn dort werden nur die Mitglieder der Administratoren und Moderatoren gezeigt. Wobei unter Administratoren alle gezeigt werden, die über irgendeinen Weg Admin-Rechte haben. Das gleiche gilt für die Moderatoren, nur halt dort auf Moderatorenrechte bezogen. Wenn du möchtest, dass deine Gruppe als Systemgruppe angezeigt wird, musst du unter "/language/<sprache>/common.php" den Eintrag

Code: Alles auswählen

'G_GLOBAL_MODERATORS'		=> 'Globale Moderatoren',
suchen und darunter den Gruppenname, den die Gruppe in der Datenbank hat, hinschreiben und lediglich "G_" davorsetzen, damit sie als Systemgruppe erkannt wird. Auf der rechten Seite musst du logischerweise die Übersetzung in der jeweiligen Sprache hinschreiben. Wenn du dann ins Admin-Menü gehst, müsstest du deine Gruppe unter Systemgruppen sehen.

Solltest du dagegen eine voreingestellte Teamseite brauchen, wo alle Gruppen aufgelistet werden, dann bastel dir selbst eine oder lade dir auf meiner Seite, nicht vom Titel irritieren lassen, meine Teamseite herunter. Soweit ich weiß gibt es von phpBB3 noch keine komplette Teamseite.

Wegen des Downloads: So ungefähr eine halbe Stunde ab Schreibdatum des Beitrags musst du noch warten, vorher ist der Download nicht sichtbar.

Zu der Einrichtung: Einfach die groups.php ins root-Verzeichnis des Forums laden, die lang_groups.php ins deutsche Sprachpaket und die groups_template.html einfach in den template-Ordner von prosilver, bzw. subsilver2.

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 08.01.2009 19:09
von godmod23
Zum Thema "Neue Gruppe auf der Teampage" gibt es einen (verlassenen) Mod von NV, nämlich den hier: http://www.flying-bits.org/viewtopic.php?f=24&t=89 Dieser wurde allerdings nur für 3.0.0 getestet, ob er auch im 3.0.4 läuft weiß ich nicht...

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 08.01.2009 20:26
von Doktor Smile
godmod23 hat geschrieben:Zum Thema "Neue Gruppe auf der Teampage" gibt es einen (verlassenen) Mod von NV, nämlich den hier: http://www.flying-bits.org/viewtopic.php?f=24&t=89 Dieser wurde allerdings nur für 3.0.0 getestet, ob er auch im 3.0.4 läuft weiß ich nicht...
Ich weiß,
den habe ich auch bereits getestet, jedoch geht der nur für eine Gruppe.
D.h. ich kann letztendlich nur eine Gruppe hinzufügen.

Desweiteren gab es danach das Problem:
Es war alles durcheinander. Unter anderem stand in der Spalte "Moderator" ein Administrator drin,
der aber in keinster weise irgendwo als Moderator drin war. In der Admingruppe wurde der nicht angezeigt.

Dieser MOD machte mir nur Probleme. Daher fragte ich.

Es geht um memberlist?mode=leaders

Da habe ich noch 2 Gruppen, die sollen darein.
Einmal "Staff" und einmal "Supporter".

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 08.01.2009 20:42
von jimmartens
Habe jetzt das Grundgerüst fertig. Einfach bei neuen Gruppen in der language-Datei diese mit Link angeben. In der Skriptdatei einfach dann die entsprechenden Variablen an das Template übergeben und im Template einsetzen. Mit dabei sind Templatevariablen, um z.B. nur Administratoren den Zugriff zu erlauben. Runtergeladen werden kann es hier: Teamseite für phpBB3 Bei Fragen, bitte im Forum posten. Sowohl hier als auch bei meinem.

Was vielleicht noch zu erwähnen ist. Der "MOD" ist nur deshalb so einfach, da keinerlei Funktionen gebraucht werden. Man muss halt lediglich die Gruppen-ID wissen und dann kann man in der language-Datei einfach einen vorhandenen Link nehmen und hinten die ID ändern. Aber genug der Vorrede, ihr werdet sehen, dass es ganz einfach ist.
Es geht um memberlist.php?mode=leaders
Einfach im ACP einer Gruppe oder einem User Admin-/Moderatorenrechte geben, schon erscheint sie/er auf der Seite. Dafür braucht man kein MOD.

Re: <!-- IF S_ --> Variabeln selbst erstellen.

Verfasst: 08.01.2009 22:22
von Doktor Smile
Achso, ja.

Nur sieht es natürlich komisch aus,
wenn bei Moderatoren auch die Supporter auftauchen :wink:

Aber trotzdem danke für deine Hilfe. Werde da selbst ein wenig probieren :)