Thread verschieben / Cronjob

DSF

Bekanntes Mitglied
Registriert
10. Dez. 2010
Beiträge
949
Punkte
93
Hallo miteinander

Ich bin an einen Cron-Job dran. Und zwar für einen Server-Cron und xF-Cron.
So ganz schnalle ich die Logik noch nicht.

Wenn ich damit ...
Code:
UPDATE xf_thread SET node_id = '4' WHERE node_id = '8' AND user_id = '28' AND reply_count > '0'
... einen Thread verschiebe, so scheint das zwar zu funktionieren. Aber eben nicht ganz korrekt.
Was soll der Job machen?
Verschiebe alle Threads aus der Foren-ID=8 in die Forum-ID=4 welche User-ID=28 erstellt hat und mindestens eine Antwort enthält.

Im Ursprungsforum ist der Thread logischerweise nicht mehr vorhanden und im Zielthread nur sichtbar wenn ich IN diesem Forum bin.
Ganz rechts, bei "Zuletzt: xxxxx" erscheint der Thread NICHT.

Was um alles in der Welt ist da falsch? Muss das Verschieben noch irgendwo auf der DB geändert werden?

Weiss vielleicht jemand wo ich die Function in einem xF-Script finde um mich daran zu orientieren.
 
du musst das mit den datawriter machen und nicht über den query, da im hintergrund noch zig abhängigkeiten existieren (zB die thread & post anzahl im forum) dann noch die last post daten usw......

das ist auch der grund für
m Ursprungsforum ist der Thread logischerweise nicht mehr vorhanden und im Zielthread nur sichtbar wenn ich IN diesem Forum bin.
Ganz rechts, bei "Zuletzt: xxxxx" erscheint der Thread NICHT.

entweder, nach dem query ausführen, den forencache aktualisieren, oder wie gesagt, die datawriter dafür benutzen
 
PHP:
        $threadModel =XenForo_Model::create('XenForo_Model_Thread');
// hole alle threads aus forumid 8 von user_id 28
        $threads = $threadModel->getThreadsInForum(8, array('user_id' => 28));
 
        $dw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
        foreach ($threads AS $threadId => $thread) {
// falls first_post_id nicht die gleiche ist wie last_post_id => ist es ein hinweis das es antworten gibt.. also  sowas wie dein [FONT=Consolas] AND reply_count > '0' teil^^[/FONT]
            if ($thread['first_post_id'] != $thread['last_post_id']){
//nun existierende daten setzen
                $dw->setExistingData($thread);
//neue node_id / foren_id setzen
                $dw->set('node_id', 2);
                $dw->save();
            }
        }
 
Fantastisch und vielen Dank, ragtek :)

Der Job läuft bereits und jetzt stimmen auch die Abhängigkeiten.
Gehört nicht noch dieses davor??? $db = XenForo_Application::getDb();

Kannst du mir noch verraten in welchen Script ich zur Orientierung noch nachschauen kann?
Später müsste ich nämlich noch Threads in einem bestimmten Forum Hart-Löschen welche keinen Response haben und älter als 1440 Minuten sind.
Eigentlich gehört so etwas ins Core ... aber eben ... was baut nicht alles selbst. :(
 
@ragtek

Wie schon gesagt, dein Snipped oben läuft "eigentlich" fehlerfrei.
Aber nicht ganz. Jetzt habe ich bemerkt das ein Fehler ausgegeben wird sobald es mehrere Threads sind.

Dieses ist die Fehlermeldung:
error-msg.png

Kann es sein das diese Zeile
$dw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
IN die Schleife gehört?
 
Sorry:(

Ja, wobei das ziemlich komisch ist.
Entweder habe ich das immer nur mit einem Thread getestet, oder der Fehler ist bisher nie aufgetreten.
 
Um genau zu sein
PHP:
        foreach ($threads AS $threadId => $thread) {
            if ($thread['first_post_id'] == $thread['last_post_id']){
                $dw = XenForo_DataWriter::create('XenForo_DataWriter_Discussion_Thread');
                $dw->setExistingData($thread);
                $dw->set('node_id', 13);
                $dw->save();
            }
        }
 
ragtek, tröste dich. :)

Ich habe es auch erst bemerkt als ich die Grundlogik in einem ganz anderen Zusammenhang verwendet habe.
So wie jetzt, in der Schleife und nach der Bedingung, ist es OK und funktioniert Erwartungsgemäss.
 
Zurück
Oben