MyBB.de Forum

Normale Version: Präfixauswahl erzwingen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo Forum

Jetzt gibts ja in der 1.6 Version die Möglichkeit vor dem Betreff ein Präfix zu setzen und dieses habe ich in meinem Forum auch bei einigen Foren aktiviert.

Leider ists so, daß die User die Präfixauswahl manchmal vergessen oder einfach nicht mitbekommen, daß so eine Auswahl überhaupt möglich ist.

Jetzt habe ich ein Thema dazu in MyBBCooder dazu gelesen, welches den User bei nichtsetzen des Präfixes dazu auffordert dieses auszuwählen andernfalls wird der Beitrag nicht abgespeichert.

https://www.mybb.de/forum/thread-22788.html

Leider hat dies wie das Thema auch zeigt, bei mir nicht optimal funktioniert.

Da ich das aber schon gerne hätte frage ich hier nochmals nach, obs eine Möglichkeit gibt dies mittels Code zu ändern.

Danke schon mal für eure Antworten.

Hat denn keiner eine Idee von euch ? Oder ist die Scriptänderung zu umfangreich es einfach umzusetzen ?
Eine Idee, die ich noch überhaupt nicht getestet habe und kein Code, sondern nur der prinzipielle Ablauf:

Code:
        if(!$prefix || $prefix < 1)
        {
            $prefix = 0;
        }

wurde anscheinend in

Code:
        if(!$prefix || $prefix < 1)
        {
            $this->set_error("missing_prefix");
        }
geändert.

Frage vor dem set_error noch die Forenid ab (geht vermutlich mit $post['fid']) und definiere ein Array der Foren mit zu setzenden Präfix. Schaue nach, ob das aktuell benutzte Forum in dem Array steht, wenn ja, verwende set_error, wenn nein $prefix=0


Das hardcodierte Arrray ist natürlich nicht so schön und müsste immer wieder angepasst werden, sobald du die Präfixzuordnung änderst.




(21.10.2010, 08:52)Mithrandir schrieb: [ -> ]Frage vor dem set_error noch die Forenid ab (geht vermutlich mit $post['fid']) und definiere ein Array der Foren mit zu setzenden Präfix. Schaue nach, ob das aktuell benutzte Forum in dem Array steht, wenn ja, verwende set_error, wenn nein $prefix=0


Das hardcodierte Arrray ist natürlich nicht so schön und müsste immer wieder angepasst werden, sobald du die Präfixzuordnung änderst.

Danke dir für deine Hilfe, nur bin ich in php eher eine Null, somit ists mir nicht möglich den Code selbst zu erstellen. Sad

Mfg
Walter

Hallo Walter,

versuche es einmal mit folgendem Code:

ersetze in Datei ".../inc/datahandlers/post.php"
PHP-Code:
    /**
     * Verify thread prefix.
     * 
     * @return boolean True when valid, false when not valid.
     */
    
function verify_prefix()
    {
        
$prefix = &$this->data['prefix'];
        
        
// If a valid prefix isn't supplied, don't assign one.
        
if(!$prefix || $prefix 1)
        {
            
$prefix 0;
        }
        
        return 
true;
    } 
durch
PHP-Code:
    /**
     * Verify thread prefix.
     * 
     * @return boolean True when valid, false when not valid.
     */
    
function verify_prefix()
    {
        
$prefix_forums = array("X""Y");
        
$fid = &$this->data['fid'];
        
$prefix = &$this->data['prefix'];
        
        
// prefix is mandatory in specific forums
        
if((!$prefix || $prefix 1) && in_array($fid$prefix_forums))
        {
            
$this->set_error("missing_prefix");
            return 
false;
        }
        
        return 
true;
    } 
- das Array "$prefix_forums" kannst du beliebig erweitern; ersetze dabei "X" und "Y" durch deine Foren-IDs.
mir gefiel ja mein Vorschlag mit dem Array nicht, deshalb ein Versuch, der die Datenbank auswertet - sprich die zugewiesenen Präfixe+Foren werden mit SQL ermittelt:

Code:
    function verify_prefix()
    {
        global $mybb, $db;
        
        $post = &$this->data;
        $prefix = &$this->data['prefix'];
        
        // If a valid prefix isn't supplied, don't assign one.
        if(!$prefix || $prefix < 1)
        {
        $query = $db->simple_select("threadprefixes", "COUNT(prefix) AS prefixcount", "forums='-1' OR ".$post['fid']." IN(forums)");
        $prefixinthisforum = $db->fetch_field($query, "prefixcount");
            if ($prefixinthisforum==0)
            {
            $prefix = 0;
        } else {
            $this->set_error("missing_prefix");
        }
        }
        
        return true;
    }

Erklärung zum Kriterium:
"forums='-1' OR ".$post['fid']." IN(forums)"

Präfixe, die allen Foren zugewiesen sind, erhalten -1 im Feld "forums". Somit gehe ich davon aus, dass die Präfixauswahl auch in jedem Forum nötig ist. Das Kriterium könnte also um den Filter verringert werden, wenn man nur kontrollieren will, ob eines der direkt zugewiesenen Präfixe gewählt wurde. Hm - ist das verständlich?

Ansonsten stehen die Foren-IDs durch Komma getrennt im Feld "forums" - das wird mit dem IN abgefragt. Es kommt also z.B. so etwas zustande: "2 in (forums)", wenn man im Forum 2 postet.
Servus

Ich danke euch beiden recht herzlich für die Lösungsvorschläge wobei ich gleich mal Linwinmans Vorschlag umgesetzt habe.

Vielleicht könnte man auch eine Verbesserung in den neuen Versionen von Mybb übernehmen, daß man aussuchen kann in welchen Foren die Auswahl der Präfixe zwingend ist.

Ist das eine gute Idee ?


Ich habe dann noch in der

.../inc/languages/deutsch_du/datahandler_post.lang.php

ein neues error handling angelegt

$l['postdata_missing_prefix'] = 'Prefix fehlt. Blaa Blubb.';

Danke nochmals !

Mfg
Walter

IN (forums) funktioniert wahrscheinlich nicht...
@Stefan: ich hab's ausprobiert - bei mir funktioniert's. Du kannst es auch einfach mit phpmyadmin simulieren und eine Abfrage wie

select count(*) From mybb_threadprefixes where 2 in(forums)

abschicken (2 ist natürlich ein Beispiel).
Ich habe es ausprobiert, es funktioniert nicht, wenn ein Präfix in mehreren Foren verwendet wird.
Seiten: 1 2