Jump to content
InvisionCommunity.de - Der Deutsche Invision Community Support
Sign in to follow this  
craxelburger

[Suche] Mindestens X Posts bevor bestimmte

Recommended Posts

[suche] Mindestens bestimmte Anzahl von Posts bevor eine bestimmte ACT-Page aufgerufen werden kann (Möglichst mit Fehlermeldung).

Habe bisher nur Post-Mods gesehen die andere Funktionen sperren oder freigeben.

Vielen Dank für eure Hilfe.

Share this post


Link to post

... was ist eine ACT-Page?

Für Foren allgemein: zweite Benutzergruppe einrichten und bei der alten ganz unten eine Anzahl Postings, mit der man "befördert" wird in diese zweite Gruppe. Aber ich denke mal, daß Du nach etwas anderem suchst?!...

Share this post


Link to post

Eine ACT-Page ist ein PHP-Modul des Forums.

Beispiel: http://www.ipbsupport.de/board/index.php?act=Members

Dieser Aufruf führt zu http://www.ipbsupport.de/board/sources/Memberlist.php, nur das dann alle benötigten Variablen der PHP-Datei übergeben werden.

Dies kann mit jeder beliebigen PHP-Datei gemacht werden.

Die Act-Page wird in der index.php des Forums definiert.

P.S.: Du hast recht, das hilft mir nicht wirklich weiter. ;)

Edited by craxelburger

Share this post


Link to post

Die relevanten Codezeilen stehen - wie du ja schon weisst - in der index.php (Zeilen 356 .. 389). Interessant ist in diesem Fall aber nur folgender Hauptbaum:

if (! isset($choice[ $ibforums->input['act'] ]) )

{

	$ibforums->input['act'] = 'idx';

}


if ( $ibforums->input['act'] == 'home' )

...

else if ( $ibforums->input['act'] == 'module' )

...

else

{

	// Require and run

	require ROOT_PATH."sources/".$choice[ $ibforums->input['act'] ].".php";

}
Die letzte Else (ja, sie _muss_ weiblich sein!!!) musst du entschärfen. Mit deinem Bsp. act=Members wird hier automatisch sources/Members.php ausgeführt, was ja anders sein soll. Also kommt weit vor der Else eine Anweisung (und zwar direkt vor if ( $ibforums->input['act'] == 'home' )):
if (( $ibforums->input['act'] == 'Members' ) && ( $ibforums->member['posts'] <= 20  )) {

    $ibforums->input['act'] == 'home';

}

Dazu gibts natürlich mehrere Dinge zu sagen:

1.) Das ist reine Theorie - keine Funktionsgarantie. Ich habs nicht ausprobiert.

2.) Es ist ein Hotfix. Keinerlei Einstellungsmöglichkeiten im ACP oder wo auch immer.

3.) Du musst dich noch entscheiden, wohin deine User umgeleitet werden sollen. Meldungslos auf "Home" umzuleiten ist eigentlich keine gute Idee. Ne Fehlerseite wäre mit Sicherheit besser.

4.) Wenn du gar nicht an einer Zugriffsbeschränkung an "Members" interessiert bist, ist diese Stelle evtl. nicht relevant. In diesem Falle - Karten auf den Tisch! :ph34r:

5.) 20 ???

6.) Frag mich nicht, wie das mit der Fehlerseite geht.

7.) Ich muss ins Bett.

8.) Hab ich vergessen ...

9.) 10. ist wichtig.

10.) Wenn 4.) zutrifft und du auf 3.) verzichten willst, achte drauf, was mit der zu überschreibenden act in der index.php passiert. Vor dem ersten Aufruf dieser act musst du eingreifen. Und auch vor dem ersten Aufruf der Ausweich-act. In allen nicht in der index.php ausdrücklich erwähnten acts bist du mit der angegebenen Stelle aber gut beraten.

Gute Nacht,

r*bot

Edited by r*bot

Share this post


Link to post

Sorry, aber Dein kleiner Hack funktioniert nicht.

Wenn ich das so einfüge, habe ich auch mit null Posts noch Zugriff auf die Memberlist. :(

// Check to make sure the array key exits..

if (! isset($choice[ $ibforums->input['act'] ]) )

{

    $ibforums->input['act'] = 'idx';

}

if (( $ibforums->input['act'] == 'Members' ) && ( $ibforums->member['posts'] <= 20  )) {

  $ibforums->input['act'] == 'home';

}

if ( $ibforums->input['act'] == 'home' )

{

    if ( $ibforums->vars['csite_on'] )

    {

        require ROOT_PATH."sources/dynamiclite/csite.php";

        $csite = new click_site();

    }

    else

    {

Share this post


Link to post

Hmm... ich verstehe sowieso nicht, warum bei der Variablenzuweisung ein == (exakt gleich) verwendet wird, und es an der Stelle nicht zu einer Fehlermeldung kommt...

ersetze mal

if (( $ibforums->input['act'] == 'Members' ) && ( $ibforums->member['posts'] <= 20  )) {

  $ibforums->input['act'] == 'home';

}
durch
if (( $ibforums->input['act'] == 'Members' ) && ( $ibforums->member['posts'] <= 20  )) $ibforums->input['act'] = 'home';

... so vom logischen her sollte dieser Trick nämlich an sich schon funktionieren - ist ja nichts weiter als daß der Act-Befehl gegen einen anderen ausgetauscht wird für den Fall, daß jemand weniger als 20 Posts hat.

Logischerweise muß diese Zeile denn aber VOR der Verzweigung zu 'members' ausgeführt worden sein (wie's bei Deinem geposteten Abschnitt ja auch zu sein scheint).

Edited by OrcaDesign

Share this post


Link to post

:rolleyes:

Natürlich darf bei der Zuweisung kein "==" stehen. Das kommt davon, wenn man zu später Stunde mit ein bis vier Bier im Kopf noch Code hin und her kopiert...

Da die Zuweisung an $ibforums->input['act'] so nicht klappt, steht da immer noch "Members" drin, weshalb du auch immer zu Members weitergeleitet wirst...

Edited by r*bot

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this  

×