Gelöst: Falsche Meta-Description bei Beiträgen aus VB4

  • Bei den Beiträgen aus vBulletin 4 wird die Description des Forums als Meta-Description für den Thread genommen, was natürlich unfug ist. Keine Ahnung warum, aber bei dem Update wurden die entsprechenden Felder in der DB nicht befüllt. Dies passiert nur bei neuen Beiträgen oder bei alten, die editiert werden. Bei neuen Posts wird, auch wenn es mehrere Antworten und oder Seiten sind, immer die Beschreibung vom ersten Post verwendet.

    Gedankengänge und Stichwortsammlung:

    • Die Meta-Description wird aus der node.description bezogen
    • Bei alten Beiträgen ist der Wert jeweils NULL
    • Post müssten sich anhand der "node.contenttypeid = 20" identifizieren lassen.
    • Da immer das erste Post als Quelle dient, ist eigentlich nur dort ein Update erforderlich.
    • Erkennung von "erster Post". Dies müsste der Fall sein, wenn node.nodeid == node.starter ist. Folgeposts haben jeweils eine eigene Nodeid und als "starter" weiterhin die vom "ersten Post".



    Als Datenquelle müsste dann text.rawtext dienen, denn nur dort steht der eigentlich Inhalt des Posts.

    Das Update müsste also erfolgen, wenn "node.contenttypeid = 20 UND node.nodeid == node.starter UND node.description NULL ist"

    Eine Limitierung scheint nicht erforderlich zu sein, der Core selbst schreibt auch ohne Limit. Limit ist nur das Zellenlimit von varchar(200).

    Gedanken 2:
    Direktes kopieren per SQL ist nicht möglich. node.description und text.rawtext sind nicht identisch. In node.description werden BB-Tags und womöglich auch noch andere Elemente entfernt. In text.rawtext ist alles vorhanden.

    -> 'message_plain' => strip_bbcode(strip_tags($node['content']['rawtext'])),

    /core/includes/functions.php
    -> function strip_bbcode($message, $stripquotes = false, $fast_and_dirty = false, $showlinks = true, $stripimg = false, $keepquotetags = false)

    /core/includes/functions_newpost.php
    -> $effective_string = preg_replace('#[^a-z0-9\s]#i', '\2', strip_bbcode($text, true, false));

    Gedanken 3:

    • BB-Code muss entfernt und enthaltener Text um ein Leerzeichen ergänzt werden.
    • Bei enthaltenen Bildern wird es kompliziert und unlogisch. text.rawtext:
      Code
      testbild [ATT ACH=CONFIG]n89987[/ATT ACH]

      ergibt node.description

      Code
      testbild temp_1008_1399453535146_263

      . Darauf könnte man wohl notfalls verzichten. Der Temp-Filename macht in der Meta-Description ja ohnehin keinen Sinn.

    • Smilies werden unverändert übernommen.
    • URLs als Text werden unverändert übernommen
    • Quotes werden komplett (inkl. Inhalt) gelöscht ($stripquotes == true ?)
    • Hm, wie kam ich da oben auf varchar(200)?. Das war die alte Tabelle aus VB4 (dieser Mist). node.description ist varchar(1024).

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • Durchgeführte Änderungen

    Angelegte Tabellen in node

    Code
    Name: description_syno_sich
    Typ: varchar(1024)
    Kollation: utf8_general_ci
    Null: Ja
    Standard: NULL
    SQL: ALTER TABLE `forum_node` ADD `description_syno_sich` VARCHAR(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `description`;


    description_syno_sich enthält die Originalwerte aus description

    Code
    Name: description_syno_test
    Typ: varchar(1024)
    Kollation: utf8_general_ci
    Null: Ja
    Standard: NULL
    SQL: ALTER TABLE `forum_node` ADD `description_syno_test` VARCHAR(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `description_syno_sich`;


    description_syno_test wird zum Testen des Importers verwendet

    Code
    Name: description_syno_stat
    Typ: tinyint(3)
    Attribute: unsigned
    Null: Nein
    Standard: Keiner
    SQL: ALTER TABLE `forum_node` ADD `description_syno_stat` TINYINT UNSIGNED NOT NULL AFTER `description_syno_test`;


    description_syno_stat wird zum Testen des Importers verwendet. Status 0 = keine Aktion, 1 = Datensatz gesichert, 2 = Datensatz bearbeitet

    Daten von node.description nach node.description_syno_sich kopieren. node.description_syno_stat auf 1 setzen

    SQL
    UPDATE forum_node SET description_syno_sich = description, description_syno_stat = 1 WHERE description_syno_stat = 0

    Ausgeführt um 8:03 Uhr.
    60900 Datensätze betroffen. (Die Abfrage dauerte 1.6584 Sekunden)

    Alles mit stat 1 ist gesichert, stat 0 sind neue Nodes nach der Sicherung, die selbst nicht gesichert sind!

    Alle Nodes, bei denen die description fehlt (NULL)

    SQL
    SELECT * FROM `forum_node` WHERE `contenttypeid` = 20 AND `description` IS NULL
    -> Zeige Datensätze 0 - 24 (52583 insgesamt, Die Abfrage dauerte 0.0018 Sekunden)

    Letzter Note ohne Description:
    /mitglieder-lounge/4419-der-andere-teich (letzter Post von CatCat - nodeid 74619 - 13.03.2014, 16:04)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(

  • So, Update im Test und auch schon im Livesystem durchgeführt. Und natürlich ohne diese seltsamen Zeilenumbrüche, Tabulatoren etc.

    Alle Nodes, bei denen die description fehlt (NULL)

    SQL
    SELECT * FROM `forum_node` WHERE `contenttypeid` = 20 AND `description` IS NULL
    -> MySQL lieferte ein leeres Resultat zurück (d.h. null Datensätze). (Die Abfrage dauerte 0.2733 Sekunden)

    Wenn ein Mensch nicht um dich kämpft, hat er nur gewartet, dass du gehst. ;(