كيفية ربط الصور بالموضوع

مرحباً @Discourse،

لقد قمت بإنشاء إضافة تقوم بتحميل صورة إلى المواضيع وأقوم بحفظ مسار الملف في حقول مخصصة. ولكن Discourse يقوم بحذف جميع الصور التي تم تحميلها للمواضيع عن طريق اعتبارها صورًا يتيمة لأنها غير مرتبطة بالمواضيع. لذلك، هل يمكن لأي شخص إرشادي حول كيفية ربط الصور التي تم تحميلها بالمواضيع المعنية؟

لقد حاولت تحديث image_upload_id ولكن بطريقة ما لم يتم تحديث قيمة الأعمدة في جدول المواضيع.

أي نصيحة ستكون مساعدة كبيرة!

شكراً!

هناك وظيفة API للمكون الإضافي register_upload_in_use

للحصول على مثال حول كيفية استخدامها، راجع الكود في المكون الإضافي للدردشة.

إعجاب واحد (1)

عذرًا، كانت تلك مجرد رد جزئي، ولن تمنع الصور من أن تصبح يتيمة. يجب أن تكون قادرًا على تعيين topic.image_upload_id من الكود الخاص بك، ولكن سيتم الكتابة فوقه عند إعادة خبز HTML للمنشور. لذلك يجب عليك ربط كود إعادة الخبز أيضًا.

هل يمكنك إرشادي إلى كيفية القيام بذلك؟ إذا كان بإمكانك مشاركة بعض الأمثلة، فأنا لا أعرف الكثير عن لغة Ruby، لكن يمكنني العمل بلغة JavaScript وأنا جديد أيضًا على Discourse، لذلك لا أعرف الكثير عن تخصيص Discourse :sweat_smile:

هذا هو الكود الذي يقوم بتحديث الموضوع image_upload_id، وهو موجود في CookedPostProcessor::update_post_image

لذلك، ما يمكنك فعله هو تعديل هذه الوظيفة ثم القيام بشيء مثل

def update_post_image
  super # استدعاء الأصلي
  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) # مشاركة
    if @post.is_first_post? # موضوع
        @post.topic.update_column(:image_upload_id, upload_id)
    end
  end
end

تم تحديث image_upload_id للمنشور والموضوع ولكن الصور لا تزال تُحذف. لقد استخدمت بالفعل وظيفة واجهة برمجة التطبيقات register_upload_in_use

لقد أضفت الكود أدناه للتحقق في custom_fields للموضوع حيث topic_file_upload هو اسم الحقل. هل هذه هي الطريقة الصحيحة للقيام بذلك؟

  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

ماذا يحتوي TopicCustomField؟ أفترض أنه يحتوي على معرف التحميل؟

في هذه الحالة، يجب أن يكون الأمر أشبه بـ

  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)

لديها عنوان URL للصورة ولكنني أضفت حقلاً جديدًا في الحقول المخصصة لمعرف الصورة والآن أتحقق من المعرف كما ذكرت في الكود. أعتقد أنه إذا كنت قد استخدمت الكود أدناه، فقد يعمل ربما؟

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

غريب - إذا كان يحتوي على عنوان URL ، فيجب أن يكون قد نجح من قبل ، حيث أن value: [upload.url, upload.sha1] سيتطابق مع عنوان URL بالإضافة إلى SHA1 :thinking:

شكرا @RGJ على المساعدة! لقد نجحت بالنسبة لي بدلاً من url

إعجاب واحد (1)

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