مقاطع نص أو ماركداون قابلة للإدراج ومُدارة مركزيًا

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

إنه يشبه إلى حد ما الخيار الافتراضي Admin -> Customize -> Text Content، ولكنه مخصص لمتغيراتي الخاصة التي يمكن إدراجها في المنشورات.

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

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

وبالطبع، ربما أتمكن من إجراء عملية بحث واستبدال من نوع Rails، لكن ذلك ليس أنظف أو أكثر أمانًا، ولا يتم تنفيذه “أونلاين”.

لذلك أردت مكانًا لتحديد نص والحفاظ عليه في مكان واحد، بحيث تنعكس التغييرات فورًا في كل مكان يُستخدم فيه عند عرض الصفحة التالية.

تابع القراءة للحصول على حل @Johani!:

3 إعجابات

خيار واحد ممكن هو استخدام مكون سمة.

يوضع هذا في header.html

<script type="text/discourse-plugin" version="0.8">
var disclaimer = settings.Disclaimer_text,
  disclaimer_selector = 'div[data-theme="disclaimer"]';

$.fn.disclaimer = function() {
  if (!this.length) {
    return;
  } else {
    this.each(function() {
      $(this).html(disclaimer);
    });
    return this;
  }
};

api.decorateCooked($elem => $elem.children(disclaimer_selector).disclaimer());

// إنشاء زر في محرر الرسائل
let currentLocale = I18n.currentLocale();

I18n.translations[currentLocale].js.disclaimer_button = "إضافة إخلاء مسؤولية";
I18n.translations[currentLocale].js.composer.disclaimer_prompt = ""; // اتركه فارغًا

api.onToolbarCreate(function(toolbar) {
  toolbar.addButton({
    trimLeading: true,
    id: "disclaimer-button",
    group: "insertions",
    icon: "exclamation-circle", // تغيير الأيقونة
    title: "disclaimer_button",
    perform: function(e) {
      return e.applySurround(
        '<div data-theme="disclaimer">',
        "</div>",
        "disclaimer_prompt"
      );
    }
  });
});
</script>

ويوضع هذا في ملف settings.yml الخاص بالمكون الخاص بك

Disclaimer_text:
  default: "Lorem ipsum dolor sit amet, ei purto complectitur has, per at quas senserit. Et malis libris eos, vix id pericula dissentiet, aliquid apeirian pro eu. Sed ex viderer inciderint, vitae officiis dissentiet eos no. Omnes percipit singulis in has, ne nam nibh tation inciderint. Quas nulla ei sit, ex eam rebum voluptaria. Id eam altera similique. Ex justo assentior persequeris mea, ei hinc paulo ubique mei. <br><br>Cu nam epicurei torquatos, et accusam accommodare vim. Vis sint saperet officiis et. Ad consequat posidonium mea, et duo paulo quidam maluisset, vel an electram expetendis. An vis repudiare tincidunt, mentitum convenire eloquentiam ut vis, summo partiendo pro ad."
  description:
    en: أدخل نص إخلاء المسؤولية المطلوب. استخدم &lt;br&gt; لفواصل الأسطر.

ستحصل بعد ذلك على زر في محرر الرسائل يبدو كما يلي:

وبالنقر على الزر سيتم إضافة

<div data-theme="disclaimer"></div>

الذي يتحول إلى ما حددته في إعدادات المكون

ويظهر الناتج النهائي بهذا الشكل

ويمكنك استخدام

[data-theme="disclaimer"] {

}

في CSS لتنسيقه بالطريقة التي تفضلها.

21 إعجابًا

That’s awesome! Thanks @Johani

Added to Tips’n’Tricks.

إعجابَين (2)

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

هذا على الأرجح ليس ميزة أساسية في Discourse بل إضافة.

السلوك المثالي:

  • أكتب :stub: (لا أمانع استخدام شيء ما بدلاً من أحرف الفصل :، لكن تساءلت عما إذا كان الربط مع واجهة الرموز التعبيرية قد يعمل، حيث أن لديها نوعًا من سلوك ‘الإكمال’ الذي أريده)

  • يستبدل Discourse :stub: بـ

    > هذه المقالة هي مسودة - يرجى تحسينها عن طريق  **التحرير**  و  **إضافة روابط**  و  **تفاصيل**  (إنها 'ويكي' لذا يمكن لأي مستخدم التحرير وإضافة المعلومات) أو عن طريق  **التعليق**  أدناه.
    
  • والذي يتم عرضه كـ

    هذه المقالة هي مسودة - يرجى تحسينها عن طريق التحرير و إضافة روابط و تفاصيل (إنها ‘ويكي’ لذا يمكن لأي مستخدم التحرير وإضافة المعلومات) أو عن طريق التعليق أدناه

  • ويجب أن يكون هناك مكان في واجهة المستخدم لتكوين هذه المقتطفات، بشكل مشابه لواجهة الرموز التعبيرية المخصصة

5 إعجابات

فكرة رائعة لإضافة! هل تمانع أن يظهر النص فقط في المعاينة وفي العرض النهائي بعد الطهي؟

4 إعجابات

سيكون اقتراح @pacharanero رائعًا لنا أيضًا. في حالتنا، سيكون للموظفين فقط، لذلك لن نرغب في عرض أي شيء في شريط أدوات المحرر، ولكن إدخال رمز قصير لإدراج الكتلة المحدثة تلقائيًا سيكون أمرًا رائعًا :+1:

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

في الوقت الحالي، هناك طريقة غير مرتبطة بـ Discourse وغير مُدارة مركزيًا لتحقيق هذا السلوك اليوم وهي استخدام مدير حافظة عبر الأنظمة الأساسية مثل CopyQ وإعداد قسم “الأوامر/الاختصارات العامة” بحيث يمكنك إدراج نص عشوائي في الحافظة.

يمكن بعد ذلك إدارة هذه المقتطفات إما في واجهة مستخدم CopyQ، أو تعيينها لمفتاح اختصار، أو ظهورها في قائمة CopyQ بزر الماوس الأيمن. إنها ليست لطيفة تمامًا مثل إضافة مضمنة في Discourse، ولكن بعد ذلك لديها ميزة العمل عبر جميع التطبيقات، وهي موجودة بالفعل!

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

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

شكراً على الرد. حل CopyQ لا يفعل ما أبحث عنه (على الأقل، لا أعتقد ذلك).

على سبيل المثال، أود إدخال مقتطف في منشور (مثل :slug:) ثم كلما تم عرضه، يتم عرض المحتوى الحالي لهذا الـ slug (والذي قد يحتوي على markdown). إذا قمت بتغيير محتوى هذا الـ slug، فسيتم تحديث جميع المنشورات التي تستخدمه على الفور للحصول على المحتوى الجديد (يحتوي المنشور نفسه على الـ slug فقط ويتم تبديل المحتوى عند العرض).

سأكون سعيدًا إذا لم يكن البحث يعرف بوجود المحتوى أيضًا (وإظهار النسخة النهائية المطهوة فقط جيد بالنسبة لي).

تحياتي

إليك نهج مختلف…

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