BBCode -- Text nur für bestimmte Gruppe sichtbar

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von Helmut »

Hallo,

ich suche eine Möglichkeit, in einem Posting bestimmte Textstellen nur für eine bestimmte Gruppe sichtbar zu machen. Am besten wäre ein BBCode, aber ich habe es noch nicht hin bekommen.

Für Templates ist es kein Problem, das geht das Snippet Gruppenzugehörigkeiten eines Benutzers prüfen, das funktioniert aber nicht innerhalb vom Postingtext (<!-- IF S_IN_GROUP --> ...) als BBCode. Hat von euch jemand eine Lösung wie ich das umsetzen könnte?


Es geht hier nicht darum dass der BBCode nur von bestimmten Gruupen benutzt werden kann, das habe ich schon umgesetzt.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von BNa »

Von hier an lesen: https://www.phpbb.com/community/viewtop ... #p12861373

und [b]S_IN_GROUP[/b] in die relevante Lang Datei einfriemeln :wink:

Es müssen alle aktiven Sprachen editiert werden..
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von Helmut »

Hallo BNa,

danke dir für die Antwort, aber irgendwie klappt das nicht dass die Anweisung ausgeführt wird.

Ich habe in der entsprechenden lang Datei folgendes eingefügt:

Code: Alles auswählen

    'BOARD_GROUP_BEGIN'        => '<!-- IF S_IN_GROUP -->',
    'BOARD_GROUP_END'        => '<!-- ENDIF -->',
Als BBCode:

Code: Alles auswählen

[IN_GROUP]{TEXT}[/IN_GROUP]
und als Ersetzung

Code: Alles auswählen

<span>{L_BOARD_GROUP_BEGIN}{TEXT}{L_BOARD_GROUP_END}</span>
Im Quelltext taucht es dann als <span><!-- IF S_IN_GROUP -->[...]<!-- ENDIF --></span> entsprechend auf, wird daber nicht ausgeführt.
Ich habe dann den Code <!-- IF S_IN_GROUP -->[...]<!-- ENDIF --> in der entsprechenden Template Datei direkt nach {postrow.MESSAGE} gehängt, dann geht es. Mir scheint dass diese <!-- ... --> Anweisungen im Postingtext nicht entsprechend verarbeitet bzw. geparst werden. Das scheint, als ob die ganze Sache doch etwas aufwendiger ist.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von BNa »

Nicht ganz richtiger Ansatz.

Lies nochmal
https://www.phpbb.com/community/viewtop ... #p12861373

Ansonsten Beispiel

Öffne

language/de/common.php

Finde

Code: Alles auswählen

$lang = array_merge($lang, array(
Davor füge ein

Code: Alles auswählen

include_once($phpbb_root_path . 'includes/functions_user.' . $phpEx);

global $user;

// zu überprüfende Gruppen IDs ( Beispiel Gruppen ID 5, 10, 12, 15 )
// Hinweis: Bei mehreren Gruppen muss es ein array() sein!
$gruppen_id = array(5,10,12,15);

// 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)
{
    // Teile dem Template System mit, das die Variable "IN_GROUP" den Wert TRUE bekommt
   $template->assign_var('IN_GROUP', true);
}
Nun kannst Du die Variable {L_IN_GROUP} in BBcodes nutzen
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von Helmut »

Hallo BNa,

auch mit deinem Beispiel geht es nicht, das Problem ist dass der Schalter <!-- IF S_IN_GROUP --> nicht geparst wird und somit unverändert in der ausgegebenen html Datei erscheint. Oder wie genau hast du das mit dem BBCode und der Ersetzung gemeint?

@all
Es muss doch eine Möglichkeit geben, einen funktionierenden BBCode zu erzeugen, bei dem die Gruppenberechtigung abgefragt wird und dann der Text zwischen dem BBCode nur der gewählten Gruppe angezeigt wird.

Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von BNa »

Gibt es ja auch. Bin an der Lösung dran. Ist zwar etwas komplexer aber es folgt genau dem Ansatz, den ich geliefert habe.
Und, wie ich schon schrieb: <!-- IF S_IN_GROUP --> ist irrelevant, da es hier um php geht :wink:
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von HabNurNeFrage »

Hi,

Ansatz 1: viewtopic.php?f=74&t=227295

Ansatz 2: Bei uns im Forum habe ich spezielle bbCodes, deren Inhalts-Text nur Admins/Mods angezeigt wird.
Allen anderen wird ein Ersatztext eingeblendet:
http://bild4.bplaced.net/phpbb/viewtopi ... ch-f=4&t=3


Ansatz 2 könnte ggf. für einzelne Gruppen so aussehen:

Code: Alles auswählen

if (!function_exists('group_memberships'))
{
    include_once($phpbb_root_path . 'includes/functions_user.'.$phpEx);
}

if ((!$user->data['group_id'] == 1) || ($user->data['user_id'] == ANONYMOUS) || $user->data['is_bot'])
{
    $text = preg_replace('/\[bbcode_group_1(.*?)\].*?\[\/bbcode_group_1(.*?)\]/si', "
        <p>Nur Mitglieder der Gruppe 1 sehen Inhalte an dieser Stelle.</p>
        ", $text);
} 

if ((!$user->data['group_id'] == 2) || ($user->data['user_id'] == ANONYMOUS) || $user->data['is_bot'])
{
        $text = preg_replace('/\[bbcode_group_2(.*?)\].*?\[\/bbcode_group_2(.*?)\]/si', "
        <p>Nur Mitglieder der Gruppe 1 sehen Inhalte an dieser Stelle.</p>
        ", $text);
}   

if ((!$user->data['group_id'] == 3) || ($user->data['user_id'] == ANONYMOUS) || $user->data['is_bot'])
{
        $text = preg_replace('/\[bbcode_group_3(.*?)\].*?\[\/bbcode_group_3(.*?)\]/si', "
        <p>Nur Mitglieder der Gruppe 3 sehen Inhalte an dieser Stelle.</p>
        ", $text);
} 
Hierzu müssen dann vom Namen her zum PHP exakt passende bbCodes angelegt werden.
Hier im Beispiel wäre das bbcode_group_1 (1 entspräche der Group ID und das Ganze ist die Bezeichnung der Nutzung des bbCodes)
Das Beispiel stellt spezielle bbCodes für die Gruppen-IDs 1, 2 und 3 bereit.
Es kann den eigenen Wünschen entsprechend erweitert bzw. beschnitten werden.

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Benutzeravatar
BNa
Valued Contributor
Beiträge: 3169
Registriert: 12.04.2010 23:51
Kontaktdaten:

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von BNa »

Sieht bei mir ähnlich aus. Im Grunde nur diesem Mod folgen und etwas abwandeln:
viewtopic.php?f=88&t=194797#p1123772
Die rote Schrift kann ignoriert werden, da es nicht die Funktionalität betraf.
Helmut
Mitglied
Beiträge: 2048
Registriert: 27.12.2002 20:35
Wohnort: Augsburg

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von Helmut »

Hallo BNa und HabNurNeFrage,

danke euch für die Infos, damit habe ich es jetzt gelöst. Der Link auf Altersbeschränkungs Spoiler brachte die Lösung. In der Datei functions_content.php habe ich es so gelöst:

Finde in includes/functions_content:

Code: Alles auswählen

static $censors
danach füge ein:

Code: Alles auswählen

global $user, $is_in_group;
finde:

Code: Alles auswählen

 if (sizeof($censors)) 
davor füge ein:

Code: Alles auswählen

    if ($is_in_group == false)
    {
        $text = preg_replace('/\[in_group(.*?)\].*?\[\/in_group(.*?)\]/si', "<span></span>", $text);
    } 
in meinen eingebundenen Seiten kommt dann noch das hier dazu:

Code: Alles auswählen

include_once($phpbb_root_path . 'includes/functions_content.' . $phpEx);

// Die zu prüfenden Gruppen IDs müssen mit Komma getrennt eingetragen werden
$check_group = "7";

$is_in_group = get_group_auth($check_group);

// Wenn der User in dieser Gruppe ist, liefert die Funktion den Wert TRUE zurück.
if ($is_in_group == true)
{
    // Teile dem Template System mit, das die Variable "S_IN_GROUP" den Wert TRUE bekommt
    // In der html Datei kann mit <!-- IF S_IN_GROUP -->  und <!-- ENDIF --> ein Bereich markiert werden.
   $template->assign_var('S_IN_GROUP', true);
}
 
BBCode

Code: Alles auswählen

[in_group]{TEXT}[/in_group]
Ersetzung

Code: Alles auswählen

<span>{TEXT}</span>
Was vielleicht noch interessant wäre, wenn man den alternativen Text wenn der User nicht in der Gruppe ist, auch im BBCode angeben könnte .....


Ich brauche das für die Themenseiten für meine neue Homepage. Die Themenseiten basieren auf dem KB Mod vom [BTK] Tobi, auf der Version 2.0.5, allerdings sehr angepasst.


Gruß Helmut
Ich bin nicht ganz dicht.... na und.
Benutzeravatar
HabNurNeFrage
Ehemaliges Teammitglied
Beiträge: 1627
Registriert: 17.01.2010 20:22
Wohnort: An der Ostsee
Kontaktdaten:

Re: BBCode -- Text nur für bestimmte Gruppe sichtbar

Beitrag von HabNurNeFrage »

Hi,

meinst Du einen Text, den die Nutzer des bbCodes dann selbst angeben können sollen?
Das wird etwas schwierig...

Einen standard Ersatztext könntest Du im <span> Ersatztext </span> Deines preg_replace Patterns angeben.

Oder Du ersetzt für alle, die nicht in_group sind, das Replace-Pattern mit einem weiteren bbCode:

Code: Alles auswählen

        if (!$is_in_group)
        {
            $text = preg_replace('/\[in_group(.*?)\].*?\[\/in_group(.*?)\]/si', "[not_in_group][/not_in_group]", $text);
        } 

Nun noch eien bbCode [not_in_group]Ersatztext[/not_in_group] - In beiden Fällen ist der Ersatztext aber leider statisch.
Eine dynamische Lösung habe ich nicht im Kopf.

LG
| HomeStory.org - the friendly Community | Forum für alle Lebenslagen | <"}))}~ | Nicht nachmachen: Meine phpBB Spielereien |
var shoppen = geld.replace (/geld/g, 'bloedsinn'); if (geld < 1) { return home; };
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“