Hallo, Gast! (Registrieren)

Letzte Ankündigung: MyBB 1.8.38 veröffentlicht (30.04.24)


Benutzer, die gerade dieses Thema anschauen: 4 Gast/Gäste
Problem mit $post['dateline']
#1
Hi!  Big Grin

Ich bastle an einem Plugin, das ich für ein RPG-Forum brauche. Ausgehend von einer Liste mit ForenIDs wird im Profil des Users der Zeitpunkt vermerkt, wenn er in einem der festgelegten Foren gepostet hat.

Ich benutze den Hook aus dem Datahandler:
PHP-Code:
$plugins->add_hook("datahandler_post_insert_post""lastippost_insert");   

und hier ist die restliche Funktion:

PHP-Code:
function lastippost_insert()
{
        global $db$mybb$post;

        if ($mybb->settings['lastippost'] != '')
        {
                $forenids explode(","trim($mybb->settings['lastippost']));
                if (in_array($post['fid'], $forenids))
                {
                        $db->update_query("users",array('lastippost' => (int)$post['dateline']),"uid = '".$post['uid']."'");
                }
        }


So wie es da steht wird aber bei lastippost in der Datenbank nur eine 0 eingetragen. Es funktioniert aber, wenn ich statt $post['dateline'] so etwas wie time() oder von mir aus auch $post['fid'] eintrage. Warum geht dann dateline nicht?

Vielen Dank im Voraus!

LG
Senya
Zitieren
#2
Bei den Hooks im Datahandler wird ein Objekt als Parameter übergeben, dieses enthält alle verfügbaren Informationen zu den Beiträgen. $post sollte nicht verwendet werden.
[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#3
Okay, danke für den Hinweis.
Kannst du mir ein Beispiel geben, wie ich an diese Informationen heran komme? Ich stehe mit Objekten leider ziemlich auf Kriegsfuß... :S
Zitieren
#4
Probiere es einmal so:
PHP-Code:
function lastippost_insert($datahandler)
{
        global $db$mybb;

        if ($mybb->settings['lastippost'] != '')
        {
                $forenids explode(","trim($mybb->settings['lastippost']));
                if (in_array($datahandler->data['fid'], $forenids))
                {
                        $db->update_query("users", array('lastippost' => $datahandler->data['dateline']),"uid = '".$datahandler->data['uid']."'");
                }
        }

[Bild: banner.png]

Bitte die Foren-Regeln beachten und im Profil die verwendete MyBB-Version angeben.
Zitieren
#5
Aaah super vielen vielen Dank! 
Jetzt funktioniert es perfekt, das war der letzte Tei des Plugins, der noch nicht lief Smile
Auf $datahandler wäre ich nie gekommen  Wink
Zitieren
#6
Ich grabe mal diesen etwas älteren Thread aus, weil es sich um ein Problem mit dem gleichen Plugin dreht. Mir ist aufgefallen, dass mit dem Code aus Post #4 Entwürfe nicht abgedeckt sind. Soll heißen, das Feld "lastippost" wird gefüllt, auch wenn der User seinen Post nicht "richtig abschickt", sondern nur einen Entwurf speichert. Das würde ich gern unterbinden.

Entwürfe haben ja die Sichtbarkeit -2, während es bei sichtbaren Posts immer die 1 sein muss.
Ich dachte also, ich verändere dafür einfach nur den if-Teil und zwar so:
Code:
if (in_array($datahandler->data['fid'], $forenids) && $datahandler->data['visible'] == 1)

Allerdings funktioniert das überhaupt nicht. Es gibt keine Fehlermeldung, lastippost wird aber auch nicht gefüllt, egal ob es nun ein Entwurf oder ein normaler Post ist. Testweise habe ich auch schon mal diese Zeile probiert, die ja in jedem Fall funktionieren müsste (auch wenn sie das Ziel verfehlt):
Code:
if (in_array($datahandler->data['fid'], $forenids) && isset($datahandler->data['visible'])
Aber auch das tut gar nichts, obwohl der hintere Teil ja immer wahr sein sollte. Es wirkt fast so, als könne ich innerhalb des Plugins nicht auf "visible" zugreifen, obwohl hier sowohl visible als auch (das ja funktionierende) dateline ins Array eingefügt werden...

Ich bin dankbar für alle Ideen und Ansätze...  Sad
Zitieren
#7
Hast du es schon mal anstatt mit $datahandler->data jeweils mit $datahandler->post_insert_data versucht?
Zitieren
#8
Vielen vielen Dank, das funktioniert sehr gut. Big Grin

Jetzt brauche ich nur eine neue Idee für den Fall, dass aus einem Entwurf ein richtiger Post werden soll. Denn dann soll das Feld ja gefüllt werden, aber fid ist kein Teil des arrays bei post_update_data... Muss ich die Tage schauen^^
Zitieren
#9
Du könntest für die fid $datahandler->data['fid'] verwenden, die ist bei beiden vorhanden und für visible $datahandler->post_insert_data['visible']
Zitieren
#10
Funktioniert perfekt vielen Dank für die Hilfe! Smile
Zitieren