Seite 1 von 1

Wortzahl in bestimmtem Forum begrenzen

Verfasst: 07.12.2008 12:53
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 ;)

Verfasst: 07.12.2008 14:28
von nickvergessen
Such mal in der includes/message_parser.php nach

Code: Alles auswählen

// Message length check. 0 disables this check completely.

Verfasst: 07.12.2008 15:00
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.

Verfasst: 07.12.2008 15:35
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?

Verfasst: 07.12.2008 16:36
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))

Verfasst: 07.12.2008 16:53
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?

Verfasst: 07.12.2008 18:55
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.

Verfasst: 07.12.2008 19:03
von sopi
Danke, danke, daaanke!!!!!!! *verneig* :grin:

Verfasst: 07.12.2008 19:21
von Miriam
Dankes-Sammlung.
Kannst ja mal reinschauen :-P