Come collegare le immagini con l'argomento

Ciao @Discourse,

Ho creato un plugin che carica un’immagine negli argomenti e salvo il percorso del file nei custom_fields. Tuttavia, Discourse elimina tutte le immagini caricate per gli argomenti, considerando le immagini orfane come immagini non collegate agli argomenti. Pertanto, qualcuno può guidarmi su come posso collegare le immagini caricate ai rispettivi argomenti?

Ho provato ad aggiornare l'image_upload_idma in qualche modo non riesco ad aggiornare il valore della colonna nella tabellatopic.

Qualsiasi consiglio sarebbe di grande aiuto!

Grazie!

C’è una funzione API del plugin register_upload_in_use

Per un esempio su come usarla, vedi il codice nel plugin Chat.

1 Mi Piace

Mi dispiace, quella era solo una risposta parziale, impedirà solo che le immagini vengano orfane. Dovresti essere in grado di impostare topic.image_upload_id dal tuo codice, ma verrà sovrascritto quando l’HTML per un post verrà ricotto. Quindi dovresti anche agganciarti al codice di ricottura.

Puoi per favore guidarmi su come posso farlo? Se puoi condividere qualche esempio, perché non conosco molto Ruby, ma posso lavorare con JavaScript e sono nuovo anche a Discourse, quindi non so molto sulla personalizzazione di Discourse :sweat_smile:

Ecco il codice che aggiorna l’argomento image_upload_id, si trova in CookedPostProcessor::update_post_image

Quindi, quello che potresti fare è applicare una patch a quella funzione e poi fare qualcosa come

def update_post_image
  super # chiama l'originale
  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) # post
    if @post.is_first_post? # topic
        @post.topic.update_column(:image_upload_id, upload_id)
    end
  end
end

Ha aggiornato image_upload_id per post e topic, ma le immagini vengono ancora eliminate. Ho utilizzato la funzione API register_upload_in_use.

Ho aggiunto il codice sottostante per verificare nei campi personalizzati del topic, dove topic_file_upload è il nome del campo. È il modo giusto per farlo?

  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

Cosa contiene TopicCustomField? Presumo che contenga l’ID di caricamento?

In tal caso, dovrebbe essere più simile a

  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 Mi Piace

Ha l’URL dell’immagine ma ho aggiunto un nuovo campo nei campi personalizzati per l’ID dell’immagine e ora sto controllando l’ID come hai menzionato nel codice. Credo che se avessi usato il codice sottostante, potrebbe funzionare?\n\n\nTopicCustomField.where(\n name: 'topic_file_upload',\n value: upload.url\n ).exists?\n

Strano: se avesse avuto l’URL, avrebbe dovuto funzionare prima, poiché value: [upload.url, upload.sha1] avrebbe corrisposto sia all’URL che allo SHA1 :thinking:

Grazie @RGJ per l’aiuto! Id ha funzionato per me invece di url

1 Mi Piace

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