كيفية إصلاح مشاكل التنسيق؟ - ترحيل markdown إلى HTML بشكل سيء

تمكنا من الترحيل من flarum.amybo.org إلى discourse forum.amybo.org ولكن المنتدى يعاني الآن من مشاكل تنسيق. على سبيل المثال:

@\"Gerrit\"#p174 I like the idea of a water based liquid (just like Rabaey's) so I checked out the [Nutrisorb Trace Minerals](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml) ingredients:
1. Purified Water, 
2. Sodium Borate, 
3. Preservative (Citric Acid), 

يصبح:

<r>
<p>
<POSTMENTION discussionid="25" displayname="Gerrit" id="174" number="8">@\"Gerrit\"#p174</POSTMENTION> I like the idea of a water based liquid (just like Rabaey's) so I checked out the <URL url="https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml"><s>[</s>Nutrisorb Trace Minerals<e>](https://www.biocare.co.uk/nutrisorbr-liquid-trace-minerals-15ml)</e></URL> ingredients:
</p>
<LIST type="decimal">
<LI><s>1. </s>Purified Water, </LI>
<LI><s>2. </s>Sodium Borate, </LI>
<LI><s>3. </s>Preservative (Citric Acid), </LI>

هل هناك طريقة موصى بها لإصلاح هذه؟

سيكون من المذهل لو كان من الممكن أتمتة ذلك عبر المنتدى بأكمله (دون إظهار كل مشاركة على أنها تم تحريرها)، ولكن، إذا لم يكن الأمر كذلك، فإن إصلاحًا شبه آلي يمكننا تطبيقه مشاركة بمشاركة سيكون أفضل من الحاجة إلى إزالة كل علامة HTML يدويًا لإعادة التنسيق إلى markdown.

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

نعم، يمكن للمرء كتابة برنامج نصي يقوم بتنظيف الأشياء في المنتدى المباشر وإما (مخيف) عدم الاحتفاظ بالتعديلات (لذلك لن يكون هناك تعديل، ولن تكون هناك إشعارات)، أو إجراء التعديل وإخباره بعدم التحديث/الإخطار. أنا متأكد من أنني فعلت ذلك من قبل. ستقوم بشيء مثل:

fixes = Post.where("raw like '%something broken%'")
fixes.each do |p|
   new_raw = p.raw.gsub!(some stuff)
   PostRevisor.new(p).revise!({raw: new_raw, edit_reason: 'post fixer!'}, {bypass_bump: true})
end

هل يحتوي raw على كل هذا الـ HTML فيه؟

إعجابَين (2)

أعتقد أنه يمكنك استخدام أمر posts:remap الخاص بـ rake (انظر Replace a string in all posts لتحقيق ذلك)؛ لا ينبغي أن يكون لديك تعديل بهذا الأمر.

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

مهمة rake هذه جيدة للاستبدالات البسيطة، لكنها سرعان ما تصبح غير عملية.

ماذا تقصد؟ هل تقصد أنه إذا كنت تريد إدارة تعبيرات نمطية معقدة، فهذا غير عملي؟

حسنًا. أنت تستدعي المهمة في واجهة سطر أوامر (shell)، لذا يصبح تحديد ما إذا كنت تهرب Bash أو Ruby أو التعبير النمطي (regex) بسرعة أمرًا صعبًا أو مستحيلًا. بالإضافة إلى ذلك، يبدو أن الإصلاحات لن تكون مجرد استبدالات بسيطة.

إعجابَين (2)

أنا جديد على discourse، لكنني وجدت الآن كيفية الوصول إلى المحتوى الخام، ونعم، إنه يحتوي على كل HTML:
https://forum.amybo.org/raw/56/9

هل استخدمت البرنامج النصي flarum_import.rb الموجود؟ من الصعب تخيل أن يكون HTML في حقل p.content الخاص بـ flarum (وهو ما يدخل في raw في البرنامج النصي للاستيراد). أنا متأكد من أن flarum يستخدم markdown، لذلك لا أعرف لماذا سيكون لديك HTML في raw. أو ربما البرنامج النصي معطل جدًا.

ولكن الخط المتشطب هو ما هو موجود في HTML. ربما يمكنك إصلاح ذلك باستخدام CSS.

إصلاح POSTMENTION< أكثر صعوبة قليلاً لأن Discourse لديه اقتباسات، ولكن ليس إشارات. الحل السهل هو مجرد تغييرها إلى @${displayname} بسيط (والأمل في أن يكون اسم المستخدم هو نفسه قبل الاستيراد، أو إجراء بحث في user_custom_fields للعثور على اسم المستخدم المحدث. شيء آخر يمكنك القيام به هو تضمين رابط مثل @mention قال [هنا](/t/-/<معرف Discourse للموضوع 25>/<8>).

الحل المجنون هو كتابة برنامج نصي يسحب markdown من قاعدة بيانات flarum ويحدث حقل raw لتضمين ذلك. سيظل بحاجة إلى تنظيفه قليلاً (فيما يتعلق بالإشارات و POSTMENTIONS)، ولكنه سيصلح الكثير من الأشياء.

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

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

إذا كانت لديك ميزانية، يمكنك الاتصال بي أو النشر في Marketplace.

إعجابَين (2)

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

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