Wie man Bilder mit Thema verknüpft

Hallo @Discourse,

Ich habe ein Plugin erstellt, das ein Bild in Themen hochlädt und den Dateipfad in benutzerdefinierten Feldern speichert. Discourse löscht jedoch alle hochgeladenen Bilder für die Themen, da es sie als verwaiste Bilder betrachtet, die nicht mit den Themen verknüpft sind. Kann mir jemand helfen, wie ich die hochgeladenen Bilder mit den entsprechenden Themen verknüpfen kann?

Ich habe versucht, die image_upload_id zu aktualisieren, aber irgendwie wird der Wert der Spalte in der Themen-Tabelle nicht aktualisiert.

Jeder Rat wäre eine große Hilfe!

Danke!

Es gibt eine Plugin-API-Funktion register_upload_in_use

Ein Beispiel für die Verwendung finden Sie im Code im Chat-Plugin.

1 „Gefällt mir“

Entschuldigung, das war nur eine Teilantwort, sie verhindert nur, dass Bilder verwaist werden. Sie sollten topic.image_upload_id aus Ihrem Code setzen können, aber er wird überschrieben, wenn das HTML für einen Beitrag neu gebacken wird. Sie sollten sich also auch in den Rebake-Code einhaken.

Können Sie mich bitte anleiten, wie ich das machen kann? Können Sie mir einige Beispiele geben, da ich nicht viel Ruby kann, aber mit JavaScript arbeiten kann und auch neu bei Discourse bin, also nicht viel über Discourse-Anpassungen weiß :sweat_smile:

Hier ist der Code, der das Thema image_upload_id aktualisiert. Er befindet sich in CookedPostProcessor::update_post_image

Sie könnten also diese Funktion per Monkey Patching ändern und dann etwas wie folgt tun:

def update_post_image
  super # Original aufrufen
  if @post.custom_fields[:your_field_name_upload_id]
    upload_id = @post.custom_fields[:your_field_name_upload_id]
    @post.update_column(:image_upload_id, upload_id) # Beitrag
    if @post.is_first_post? # Thema
        @post.topic.update_column(:image_upload_id, upload_id)
    end
  end
end

Es hat die image_upload_id für Beiträge und Themen aktualisiert, aber die Bilder werden immer noch gelöscht. Ich habe die API-Funktion register_upload_in_use verwendet.

Ich habe den folgenden Code hinzugefügt, um in den benutzerdefinierten Feldern des Themas zu prüfen, wobei topic_file_upload der Feldname ist. Ist das der richtige Weg, um das zu tun?

  if respond_to?(:register_upload_in_use)
    register_upload_in_use do |upload|
        TopicCustomField.where(
            name: 'topic_file_upload',
            value: [upload.url, upload.sha1]
        ).exists?
    end
  end

Was enthält TopicCustomField? Ich nehme an, es enthält die Upload-ID?

In diesem Fall sollte es eher so aussehen:

  if respond_to?(:register_upload_in_use)
    register_upload_in_use do |upload|
        TopicCustomField.where(
            name: 'topic_file_upload',
            value: upload.id
        ).exists?
    end
  end
1 „Gefällt mir“

Es hat eine Bild-URL, aber ich habe ein neues Feld in benutzerdefinierten Feldern für die Bild-ID hinzugefügt und prüfe nun die ID, wie Sie im Code erwähnt haben. Ich glaube, wenn ich den folgenden Code verwendet hätte, hätte er vielleicht funktioniert?

TopicCustomField.where(
            name: 'topic_file_upload',
            value: upload.url
        ).exists?

Seltsam – wenn es die URL hätte, hätte es vorher funktionieren müssen, da value: [upload.url, upload.sha1] sowohl mit der URL als auch mit der SHA1 übereinstimmen würde :thinking:

Danke @RGJ für die Hilfe! Id hat für mich statt url funktioniert

1 „Gefällt mir“

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.