Servus,
ich suche nach einer Möglichkeit, dass wenn jemand ein Thema eröffnen will, und dieses Thema im exakten Wortlaut schon vorhanden ist, dass dann eine Fehlermeldung kommt, und somit doppelte Themen nicht gepostet werden können. Jemand einen Vorschlag, wie das zu lösen wäre? Oder vielleicht gibt es ja schon so ein Plugin oder eins was man dafür umschreiben könnte. Bin über jeden Vorschlag dankbar.
Wer schreibt denn ein Thema zweimal?
(31.05.2010, 11:12)StefanT schrieb: [ -> ]Wer schreibt denn ein Thema zweimal?
Die Frage habe ich befürchtet
Es geht um eines meiner Foren mit einer Börse, und wir haben Stress mit den Releases, weil dort immer wieder mehrfach ein Thema eröffnet wird, weil jeder der schnellste beim posten sein will. Es liegen manchmal nur wenige Minuten dazwischen. Diese Themen sind dann anstatt 5-10 x untereinander, auf zig Threads verteilt. Und das soll verhindert werden, dass eine Fehlermeldung kommt, wenn der Releasename schon 1 x vorhanden ist...
Ahoi Axxis,
ich bin zwar kein PHP-Künstler, aber ich habe vielleicht einen Lösungsansatz bzw Anregung für dich.
Es gibt beim MyBB doch die Funktion
"ähnliche Themen anzeigen lassen". Vielleicht lässt sich diese Funktion ja an deine Wünsche anpassen.
Mir selber fehlen da die PHP-Kenntnisse. Aber vielleicht kriegst du das ja hin.
Das ist mit einigen Codeänderungen machbar. Fangen wir an.
newthread.php
Finde:
PHP-Code:
$valid_subject = $posthandler->verify_subject();
darunter einfügen:
PHP-Code:
$proof_for_double_subject = $posthandler->verify_proof_for_double_subject();
Finde:
PHP-Code:
if(!$valid_thread || !$valid_subject)
ersetzen mit:
PHP-Code:
if(!$valid_thread || !$valid_subject || !$proof_for_double_subject)
inc/datahandlers/post.php
Finde ca. Zeile 948:
PHP-Code:
// Return the post's pid and whether or not it is visible.
return array(
"pid" => $double_post['pid'],
"visible" => $visible
);
}
darunter einfügen:
PHP-Code:
function verify_proof_for_double_subject()
{
global $db;
$thread = &$this->data;
$subject = &$thread['subject'];
$subject = trim($subject);
$no_double_subject_query = $db->query("SELECT subject FROM ".TABLE_PREFIX."threads WHERE subject='".$db->escape_string($subject)."' LIMIT 0,1");
$no_double_subject_result = $db->num_rows($no_double_subject_query);
if ($no_double_subject_result != '0')
{
$this->set_error("double_subject");
return false;
}
return true;
}
Finde ca. Zeile 985:
PHP-Code:
if(!$thread['savedraft'])
{
$this->verify_post_flooding();
}
darunter einfügen:
PHP-Code:
if (array_key_exists('subject', $thread))
{
$this->verify_proof_for_double_subject();
}
inc/languages/sprachpacket/datahandler_post.lang.php
Einfügen:
Code:
$l['postdata_double_subject'] = 'Ein Thema mit dem selben Betreff existiert schon, bitte wähle einen anderen.';
Viel Spaß!
...oder man legt in MySQL einfach ein Unique index/restraint für das subject-Feld der mybb_threads Tabelle an...
Dann gehts auch ganz ohne Codeänderung
(dafür mit SQL Fehler aber wen interessieren die schon).
Genial *Happy*
Funktioniert einwandfrei. Vielen vielen Dank NetHunter. Tag gerettet, wunderbar!
@Kenny
Das mit den ähnlichen Themen hatte ich auch schon überlegt,
aber da reichten meine Kenntnisse leider auch nicht was umzustricken.
@frostschutz
Zitat: "(dafür mit SQL Fehler aber wen interessieren die schon)"
Der war gut ^^
Danke an Alle, so macht´s Spass
- erledigt -
Hallo,
die Modifikation in Beitrag#5 funktioniert bei mir nicht in MyBB 1.6.8
folgender Fehler kommt dann:
Fatal error: Call to undefined method PostDataHandler::verify_proof_for_double_subject() in /home/...../public_html/...../newthread.php on line 678
Ich habe NetHunter schon eine PN geschrieben, aber vielleicht sieht ja schon jemand woran das liegen könnte. Würde das auch gerne einbauen, dass doppelte Themen verweigert werden.
Bist du sicher, dass du alles an der richtigen Stelle eingefügt hast?
Ich hab das zig mal gemacht und immer wieder Fehler. Durch einen blöden Zufall habe ich dann einen Code an anderer Stelle als oben beschrieben platziert. Und durch dieses hektische Einfügen ging es plötzlich.
Das war jetzt schon fast ein Sechser im Lotto.
Oben steht:
inc/datahandlers/post.php
Finde ca. Zeile 948:
PHP-Code:
// Return the post's pid and whether or not it is visible.
return array(
"pid" => $double_post['pid'],
"visible" => $visible
);
}
Habe aber unter diesen Zeilen den Folgecode geaddet:
PHP-Code:
// Return the post's pid and whether or not it is visible.
return array(
"pid" => $this->pid,
"visible" => $visible
);
}
Und DAS funktioniert. So wie oben im Beitrag beschrieben geht es nicht. Egal, die Funktion ist eingebaut und klappt jetzt