[Tipp] Gäste können Thema sehen aber nicht lesen

Tipps zur Forensoftware phpBB 3.0.x
Gesperrt
Benutzeravatar
Mahony
Site Admin
Site Admin
Beiträge: 792
Registriert: 3. Dez 2006 22:09
Hat sich bedankt: 22 Mal
Danksagung erhalten: 6 Mal

[Tipp] Gäste können Thema sehen aber nicht lesen

Beitrag von Mahony »

Hallo

Problem
In phpBB3.0.x ist es standardmäßig nicht möglich, das Board über die Rechtevergabe so einzustellen, dass Gäste zwar ein (oder mehrere - oder alle) Themen sehen können, sich aber zum lesen im Board anmelden müssen.
Also Quasi eine Anreizfunktion um Gäste zum anmelden im Board zu bewegen.

Lösung
Vergib das Forenrecht, kann Forum sehen und kann Forum lesen, für Gäste (im entsprechenden Forum) und mache folgendes:

Öffne viewtopic.php

Suche nach

Code: Alles auswählen

$sort_dir	= request_var('sd', $default_sort_dir);
Füge danach ein

Code: Alles auswählen

if ((!$user->data['is_registered'] && $forum_id == xxx) || ($user->data['is_bot'] && $forum_id == xxx))
    {
       trigger_error('NOT_AUTHORISED');
    }
Damit werden sowohl Gäste als auch Bots vom lesen der eigentlichen Beiträge abgehalten.
xxx muss mit der Foren ID des Forums ersetzt werden, dessen Überschrift der Gast und der Bot lesen können soll.

Möchte man den Bots das lesen der Beiträge erlauben (damit die Beiträge auch in den Suchmaschinen gelistet werden), sollte man den Teil mit den Bots einfach aus dem Code heraus nehmen (und natürlich den Bots das lesen der Beiträge, über die Rechtevergabe erlauben)

Code: Alles auswählen

 || ($user->data['is_bot'] && $forum_id == xxx)

Mit

Code: Alles auswählen

login_box('', $user->lang['LOGIN_INFO']);
kannst du auch die Login Box anzeigen, anstelle der "nicht Autorisiert" Meldung.

Möchte man dem geneigten Besucher (Gast) nun auch noch eine entsprechende Information, in der Login-Box, anzeigen lassen, dann ändert man den Code von

Code: Alles auswählen

login_box('', $user->lang['LOGIN_INFO']);
nach

Code: Alles auswählen

{
   // Setup user environment so we can process lang string
   $user->setup('viewtopic');
        login_box('', $user->lang['LOGIN_VIEWTOPIC']);
}
Das ergibt dann den Info-Text für Gäste
Du musst registriert und angemeldet sein, um dieses Thema anzusehen. in der Login-Box.

Für mehrere Foren, würde der Code dann übrigens so aussehen

Code: Alles auswählen

if ((!$user->data['is_registered'] && $forum_id == xx || $forum_id == xx))   
{
   // Setup user environment so we can process lang string
   $user->setup('viewtopic');
        login_box('', $user->lang['LOGIN_VIEWTOPIC']);
}
xx muss auch hier wieder mit den Foren IDs der Foren ersetzt werden.

Möchte man das ganze nun für ALLE Foren umsetzen, dann sollte man einfach den folgenden Code heraus nehmen

Code: Alles auswählen

&& $forum_id == xx || $forum_id == xx
Das ganze sieht dann so aus

Code: Alles auswählen

if (!$user->data['is_registered'] )   
{
   // Setup user environment so we can process lang string
   $user->setup('viewtopic');
        login_box('', $user->lang['LOGIN_VIEWTOPIC']);
}
Lösung für diejenigen, die z.B. alle Foren sperren möchten außer 1-2:
YY = Forum-Id, die NICHT gesperrt werden soll (Beispiel für 2 foren)

Code: Alles auswählen

if ((!$user->data['is_registered'] && ($forum_id != YY || $forum_id != YY)))
       
    {
       // Setup user environment so we can process lang string
       $user->setup('viewtopic');
            login_box('', $user->lang['LOGIN_VIEWTOPIC']);
    }


Grüße: Mahony
Diejenigen, die lautstark darüber diskutieren, warum es nicht geht, mögen bitte jene nicht stören, die es gerade tun.
Klug ist, wer nur die Hälfte von dem glaubt, was er hört. Weise ist, wer erkennt, welche Hälfte richtig ist.

Bild
Benutzeravatar
Mahony
Site Admin
Site Admin
Beiträge: 792
Registriert: 3. Dez 2006 22:09
Hat sich bedankt: 22 Mal
Danksagung erhalten: 6 Mal

[Tipp] Re: Gäste können Thema sehen aber nicht lesen

Beitrag von Mahony »

Hallo
Hier noch ein Nachtrag, wenn man sehr viele Foren hat und sich etwas an Schreibarbeit ersparen möchte.

Wir benutzen in diesem Falle, einfach ein Array für die Foren-IDs und das geht so:

Im folgenden Beispiel sind die eingetragenen Foren nicht erlaubt (im Beispiel sind das die Foren-IDs 21,22,47). Jedoch alle anderen.

Code: Alles auswählen

//Begin Gaeste koennen Thema sehen aber nicht lesen
// Trage hier Deine Forum IDs mit Komma getrennt ein
$chosen_forum_ids = array(21,22,47);
// Eingetragene Foren sind nicht erlaubt. Jedoch alle anderen.

if ((!$user->data['is_registered'] && !in_array($forum_id, $chosen_forum_ids)) || ($user->data['is_bot'] && !in_array($forum_id, $chosen_forum_ids)))   
{
   // Setup user environment so we can process lang string
   $user->setup('viewtopic');
        login_box('', $user->lang['LOGIN_VIEWTOPIC']);
}
//End Gaeste koennen Thema sehen aber nicht lesen
Wollen wir den umgekehrten Weg gehen und alle eingetragenen Foren erlauben, alle anderen aber nicht, dann verwenden wir einfach den folgenden Code (im Beispiel sind die Foren mit der ID 21,22,47 erlaubt).

Code: Alles auswählen

//Begin Gaeste koennen Thema sehen aber nicht lesen
// Trage hier Deine Forum IDs mit Komma getrennt ein
$chosen_forum_ids = array(21,22,47);
// Eingetragene Foren sind erlaubt. Alle anderen nicht.

if ((!$user->data['is_registered'] && in_array($forum_id, $chosen_forum_ids)) || ($user->data['is_bot'] && in_array($forum_id, $chosen_forum_ids)))
{
   // Setup user environment so we can process lang string
   $user->setup('viewtopic');
        login_box('', $user->lang['LOGIN_VIEWTOPIC']);
}
//End Gaeste koennen Thema sehen aber nicht lesen

Grüße: Mahony
Diejenigen, die lautstark darüber diskutieren, warum es nicht geht, mögen bitte jene nicht stören, die es gerade tun.
Klug ist, wer nur die Hälfte von dem glaubt, was er hört. Weise ist, wer erkennt, welche Hälfte richtig ist.

Bild
Gesperrt