Wortzahl in bestimmtem Forum begrenzen

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.
Antworten
sopi
Mitglied
Beiträge: 163
Registriert: 24.02.2007 11:18

Wortzahl in bestimmtem Forum begrenzen

Beitrag von sopi »

Halli hallo,

ich würde gerne die Wortzahl in einem bestimmten Forum im ERSTEN Beitrag auf eine bestimmte Wortzahl begrenzen. Ich hab auch schon ausgetüftelt, wie ich das Forum und den ersten Beitrag heraus finde.

Allerdings krieg ich es pars tout nicht hin, herauszufinden, wie viele Worte der User gerade posten möchte.

Mein bisheriger Ansatz sieht so aus (in der posting.php)

Code: Alles auswählen

$laenge = str_word_count($post_data['post_text']);
if ($laenge > 50)
{
	trigger_error("Zu viele Worte");
}
Aber $laenge scheint immer 0 zu sein ... Ich würde es gerne an dieselbe Stelle setzen, wie das Ding, was schreit, wenn eine bestimmte Zeichenzahl überschritten wird, aber scheinbar sind die Tomaten auf meinen Augen zu groß ...

Meine Fragen also:
1. In welcher Variable steht der zu postende Text drin?
2. Wo finde ich die Stelle die die Zeichenanzahl überprüft?

lg
sopi ;)
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag von nickvergessen »

Such mal in der includes/message_parser.php nach

Code: Alles auswählen

// Message length check. 0 disables this check completely.
kein Support per PN
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Finde in der includes/message_parser.php

Code: Alles auswählen

// Message length check. 0 disables this check completely.
davor füge ein

Code: Alles auswählen

		if ($msg_words > 50)
		{
			$this->warn_msg[] = sprintf($user->lang['TOO_MANY_WORDS'], $msg_words, '50');
			return (!$update_this_message) ? $return_message : $this->warn_msg;				
		}
Finde weiterhin in den posting.php in allen Sprach-Verzeichnissen

Code: Alles auswählen

	'TOO_MANY_CHARS_POST'		=> 'Dein Beitrag enthält %1$d Zeichen. Es sind maximal %2$d Zeichen erlaubt.',
davor füge (in der sprachl. Übersetzung) ein:

Code: Alles auswählen

	'TOO_MANY_WORDS'			=> 'Dein Beitrag enthält %1$d Worte. Es sind maximal %2$d Worte erlaubt.',
Jetzt musst Du noch die Foren-ID dazu bauen und fertig.
Du kannst die Wortanzahl auch in der config Tabelle hinterlegen, dann bist Du variabler.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
sopi
Mitglied
Beiträge: 163
Registriert: 24.02.2007 11:18

Beitrag von sopi »

Erst Mal ein riesendickes Danke an euch beide, ihr habt mir sehr geholfen.

Miriam, dein Code funktioniert spitze, wenn ich vorher die Wortzahl rausfinde:
$msg_words = str_word_count($this->message);
;)

Jetzt hab ich noch zwei Probleme:
1. Die Funktion parse kennt die Foren-ID nicht, ich kann dort also nicht prüfen, in welchem Forum ich bin
2. Die Funktion parse weiß nicht ob dass der erste Beitrag eines Themas ist oder eine Antwort, auch das wird nicht übergeben.

Die Frage, in der sich das vielleicht zusammenfassen lässt, kann ich mit der parse-Funktion zwei weitere Werte übergeben, ohne, dass ich ihren sonstigen Gebrauch (wo auch immer der auftauchen mag) kaputt mache? Oder sollte ich lieber eine neue Funktion erstellen?
Benutzeravatar
nickvergessen
Ehrenadmin
Beiträge: 11559
Registriert: 09.10.2006 21:56
Wohnort: Stuttgart, Germany
Kontaktdaten:

Beitrag von nickvergessen »

sopi hat geschrieben:1. Die Funktion parse kennt die Foren-ID nicht, ich kann dort also nicht prüfen, in welchem Forum ich bin
2. Die Funktion parse weiß nicht ob dass der erste Beitrag eines Themas ist oder eine Antwort, auch das wird nicht übergeben.
finde in miriams code:

Code: Alles auswählen

if ($msg_words > 50)
ersetze mit:

Code: Alles auswählen

$requested_forum = request_var('f', 0);
if (($msg_words > 50) && ($mode == 'post') && ($requested_forum == DEINE_FOREN_ID))
kein Support per PN
sopi
Mitglied
Beiträge: 163
Registriert: 24.02.2007 11:18

Beitrag von sopi »

Und nochmal danke :)

Okay, ... er prüft jetzt, ob er in einem bestimmten Forum ist, ... soweit so gut ...

1. Er prüft die Wortanzahl auch bei Antworten (soll er nicht, sondern nur bei einem neuen Thema)
2. Er prüft die Wortanzahl nicht in Unterforen (sollte er schon, also irgendwie über die parent_id?)

Noch irgendwelche Vorschläge? *schaut lieb*
lg
sopi

PS: Oder wo kann ich denn sehen, was diese request_var() so alles kann, dann versuch ich mir das selber anzuschauen?
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Na gut, dann den Code in der include/message_parser wieder auf 0.. und dann an selber Stelle:

Code: Alles auswählen

		//Anzahl der Worte, die gepostet werden dürfen
		$max_words = 3;
		
		//Foren, für die die Vorgabe gelten soll
		$forum_2_check = array('3', '5', '11');
		
		$msg_words = str_word_count($this->message, 0, "1234567890,;.:-_#'+*~=`´?!§$%&/()[]@€<>|\\\"");
		$requested_forum = request_var('f', 0);
		$requested_mode = request_var('mode', '');
		
		if (($msg_words > $max_words) && ($requested_mode == 'post') && in_array($requested_forum, $forum_2_check))
		{
			$this->warn_msg[] = sprintf($user->lang['TOO_MANY_WORDS'], $msg_words, $max_words);
			return (!$update_this_message) ? $return_message : $this->warn_msg;				
		}
Die Initial-Werte für die Variablen musst Du noch anpassen.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
sopi
Mitglied
Beiträge: 163
Registriert: 24.02.2007 11:18

Beitrag von sopi »

Danke, danke, daaanke!!!!!!! *verneig* :grin:
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Dankes-Sammlung.
Kannst ja mal reinschauen :-P
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

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