مرحباً، أجد أنه حتى عندما أقوم بتعيين “default_composition_mode” على وضع Markdown، يتم تقديم محرر النصوص الغنية للمستخدمين في منتدياتي عند بدء موضوع جديد. إصدار المنتدى هو “Discourse v3.5.0.beta9-dev — Commits · discourse/discourse · GitHub — Ember v5.12.0”.
في كل مرة أقوم فيها بتطبيق التغيير، تتم مطالبتي “هل ترغب في تطبيق هذا التغيير تاريخيًا؟ سيؤدي هذا إلى تغيير تفضيلات 15 مستخدمًا موجودًا.” وأضغط نعم. حتى بعد ذلك، يتم تقديم المحرر الغني للمستخدمين. هل هذه مشكلة معروفة؟
تعديل - ملاحظة: لدي هذه المشكلة مع المستخدمين الذين لم يستخدموا خيار التبديل مطلقًا لتبديل وضع المحرر الخاص بهم بين الغني/Markdown. لقد قاموا بتسجيل الدخول اليوم بعد أن قمت بالفعل بتعيين وضع التكوين الافتراضي في عطلة نهاية الأسبوع بعد الترقية مباشرة. لقد قمت أيضًا بإخفاء خيار التبديل عبر CSS الخاص بالمظهر.
متابعةً لهذا، لدينا إضافة تستخدم رموز BBCode “wrap_open”، والتي لم يدعمها محرر النصوص المنسقة بعد. لذا نحتاج إلى التأكد من بقائنا في وضع Markdown في الوقت الحالي.
لقد استخدمت Claude Sonnet لإنشاء الكود التالي لضمان ذلك. سأكون سعيدًا بتلقي أي ملاحظات حول كيفية تحسينه (خاصة إذا كان به أي أخطاء ). أشارك هذا أيضًا في حال ساعد مشرفي منتديات آخرين. يوضع الكود في إعدادات السمة > JS (/admin/customize/themes/2/common/js/edit):
import {
apiInitializer
} from "discourse/lib/api";
export default apiInitializer((api) => {
// فرض تبديل محرر المستخدم إلى وضع markdown
function switchToMarkdownMode() {
const currentUser = api.getCurrentUser();
// يجب أن يكون المستخدم مسجلاً دخوله إذا تم فتح المؤلف
if (!currentUser) {
console.error('لم يتم العثور على مستخدم');
return;
}
// تم الحصول على هذا الخيار من هنا
// https://github.com/discourse/discourse/blob/f0fc5646dc9bd29b0e814faea490e34800e9b322/app/assets/javascripts/discourse/app/models/user.js#L262C1-L266C4
const currentMode = currentUser.get('user_option.composition_mode');
if (currentMode !== 0) {
// التبديل فقط إذا لم يكن بالفعل في وضع markdown
// مثال للاستخدام: https://github.com/discourse/discourse/blob/87476ce2c18fb8f856dda7ff03804ed5fbb0ff38/app/assets/javascripts/discourse/app/services/user-tips.js#L127
currentUser.set('user_option.composition_mode', 0);
// حفظ تفضيل المستخدم على الخادم
currentUser.save(['composition_mode']).then(() => {
console.log('تم التبديل بنجاح إلى وضع markdown');
}).catch((error) => {
console.error('فشل تحديث وضع التركيب:', error);
});
// تبديل واجهة المستخدم للمؤلف الحالية فورًا
setTimeout(() => {
const toggleButton = document.querySelector('.composer-toggle-switch[data-rich-editor]');
if (toggleButton) {
const isRichTextActive = toggleButton.getAttribute('aria-checked') === 'true';
if (isRichTextActive) {
toggleButton.click();
console.log('تم تبديل المؤلف الحالي إلى وضع markdown');
}
}
}, 100); // تأخير بسيط لضمان عرض المؤلف بالكامل
} else {
console.log('بالفعل في وضع markdown، لا حاجة للتغيير');
}
}
api.onAppEvent('composer:opened', () => {
switchToMarkdownMode();
});
});
سأحاول استنساخ هذا + العمل على إصلاح غدًا، لكنني لست متأكدًا من سبب حدوث ذلك نظرًا لأن المسؤول يضبط افتراضيًا جميع قيم خيارات المستخدم (إذا كنت تستخدم خيار المستخدم الحالي في المطالبة)، وهذا هو كل ما نستخدمه للتحكم في مفتاح التبديل.
شكرًا على الردود السريعة! لست متأكدًا من كيفية إنشاء مثال مصغر قابل للتكرار لهذا. يسعدني مشاركة أي معلومات إضافية من منتداي إذا كان بإمكانك مشاركة الخطوات لذلك.
حاولت إعادة إنتاج هذا اليوم دون جدوى. لدي سؤال واحد مع ذلك - هل يقوم المستخدمون بتحديث المتصفح بعد قيامك بتغيير هذا؟ لأنه إذا لم يكن الأمر كذلك، فلا يزال لدينا بيانات تفضيلات المستخدم القديمة الخاصة بهم في المتصفح في ember، لذلك لن يتم استخدام التفضيل الجديد بعد.
لكي يعمل هذا كما هو متوقع، قمت بما يلي:
تم التحقق من المستخدم أ بأن المحرر تم تبديله إلى الوضع الغني
بصفتي مسؤولاً، قمت بتغيير الإعداد الافتراضي إلى وضع markdown وطبقته على جميع المستخدمين
بصفتي المستخدم أ، قمت بإعادة تحميل الصفحة وأعدت فتح المحرر، ورأيت أنه كان في وضع markdown
إذا لم أقم بإعادة التحميل في الخطوة 3، لكنت لا أزال أرى الوضع الغني.
شكرًا على المتابعة يا مارتن. لقد قمت بالفعل بتعيين الوضع على Markdown يوم الأحد. ثم قمت بتسجيل الدخول بحساب تجريبي يوم الاثنين، في ملف تعريف متصفح منفصل، والذي تلقى محرر Rich بدلاً من ذلك.
أيضًا، إذا كان ذلك مفيدًا، في كل مرة أقوم فيها بتعيين “default_composition_mode” على “Markdown”، أتلقى التحذير: “هل ترغب في تطبيق هذا التغيير تاريخيًا؟ سيؤدي هذا إلى تغيير التفضيلات لـ 61 مستخدمًا حاليًا.” أفهم أنني يجب أن أحصل على هذا في المرة الأولى، ولكن يبدو أنه خطأ أنه يطالبني في كل مرة لعدد من المستخدمين.
لمزيد من الاختبار، قمت أيضًا بتسجيل الدخول للتو إلى حساب تجريبي آخر لم يسجل الدخول لمدة 10 أشهر. تم تعيينه أيضًا على وضع Rich Text افتراضيًا.
هذا غريب جداً بالفعل… كم عدد المستخدمين في موقعك بشكل إجمالي؟ أتساءل عما إذا كان عالقاً في الخطوة التي يفترض فيها تحديث جميع المستخدمين من تغيير إعدادات الموقع، لأنني لاحظت أنه لا يوجد شيء في واجهة المستخدم يشير إلى أن العمل لا يزال جارياً.
يعتمد على عدد المستخدمين الذين قاموا بتغييره باستخدام التبديل في هذه الأثناء. يبدو أنه يعمل بشكل صحيح بالنسبة لي في الاختبار المحلي.
قم بتعيين default_composition_mode إلى وضع Markdown. حتى عندما يكون بالفعل في وضع Markdown، يمكنك فتح القائمة المنسدلة وتحديد خيار Markdown.
احصل على تحذير لعدد XX من المستخدمين. اقبله.
انتظر عشر دقائق، ثم أعد تحميل الصفحة.
قم بتعيين default_composition_mode إلى وضع Markdown (نفس الخطوة 2).
مرة أخرى، احصل على تحذير لنفس العدد من المستخدمين.
كما ذكرت، لا أعرف أيضًا المدة التي تستغرقها (أكثر من 10 دقائق؟) لتحديث تفضيلات المستخدم التاريخية. أيضًا، لا أعتقد أن كل هؤلاء المستخدمين سيقومون بتحديث تفضيلاتهم مرة أخرى في هذا الوقت فقط. قد يكون هناك شيء فاتني هنا.
حسنًا، بالتأكيد لا يبدو أن الكثير من الأشخاص سيقومون بالتبديل في ذلك الوقت هل يمكنك إجراء تسجيل شاشة لإظهار ما يحدث؟
أنصحك أيضًا بإلقاء نظرة على علامة التبويب “الشبكة” (Network) في أدوات مطوري Chrome. يجب أن تعرض طلبين مثل هذين بعد حفظه (الأول هو الذي يعرض المطالبة الخاصة بالمستخدمين XX، والثاني هو لحفظ الإعداد فعليًا وإجراء التعبئة الخلفية):
الثاني يحتاج إلى أن يكون له حالة 200، إذا لم يكن كذلك وقمت بالانتقال بعيدًا، فلن يتم إجراء التعبئة الخلفية للمستخدمين الحاليين.
يوجد تسجيل فيديو على رابط Drive هذا. قمت بتعيين الإعداد، وقبلت مربع الحوار التحذيري، وانتظرت قليلاً، وأعدت تحميل الصفحة، ثم قمت بتعيينه مرة أخرى. ثم ظهر لي مربع الحوار التحذيري مرة أخرى.
لا ينبغي أن يحدث هذا… هناك خطأ هنا حيث يعتبر قيمة عنصر القائمة (0) مختلفة عن قيمة الإعداد (’0’). لذلك أعتقد أن الحفظ هنا لا يفعل شيئًا. يمكنني إصلاح هذا الخطأ، ولكن هل يمكنك القيام بهذا:
تغيير الإعداد إلى “نص منسق”
حفظه، ولكن اختر “لا، قم بتطبيق التغييرات للمستقبل فقط”