حسنًا، بالنسبة لأولئك الذين يريدون حقًا جعل توقيعاتهم تعمل بشكل أفضل لمجموعتهم (خاصة إذا كنت تريد استخدام الخيارات لجعل التوقيع جزءًا من ترقية/اشتراك مدفوع)، إليك الكود (والأسباب وراءه) الذي أعتقد أنه يجعله أفضل بكثير، ويمكن أن يساعدك في دفع المزيد من الترقيات. لقد استغرق الأمر مني الكثير من المحاولات، ولكنه يعمل. انتبه إلى الأماكن التي تحتاج فيها إلى استبدال أجزاء “XXXXX”.
أردت تحقيق الأمرين التاليين:
أ) أردت تعطيل القدرة على عدم عرض التوقيعات. هذا يعني أن المستخدمين الذين يقومون بالترقية يعلمون أن توقيعهم سيظهر للجميع.
ب) أردت فقط مجموعة معينة لديها القدرة على إنشاء توقيع.
-
اذهب إلى Admin > Appearance > Themes & components > Components > Install > Create new
-
أضف هذا الكود إلى علامة التبويب :
<script>
// انتظر حتى يتم تحميل هيكل الصفحة الأساسي أولاً
document.addEventListener("DOMContentLoaded", function() {
// قم بإعداد المراقب
const observer = new MutationObserver(function(mutations) {
// ابحث عن جميع تسميات التحكم في الصفحة
const labels = document.querySelectorAll('label.control-label');
labels.forEach(label => {
// ابحث عن تسمية التوقيعات المحددة
if (label.textContent.trim() === 'Enable Signatures') {
// ابحث عن الحاوية الرئيسية التي تحتوي على كل من التسمية ومربع الاختيار وأخفها
const controlGroup = label.closest('.control-group') || label.parentElement;
if (controlGroup) {
controlGroup.style.display = 'none';
}
}
});
});
// ابدأ الآن بمراقبة الجسم، لأننا نعلم أنه موجود
observer.observe(document.body, { childList: true, subtree: true });
});
</script>
3. أضف هذا الكود إلى علامة التبويب css (استبدل XXXXX باسم مجموعتك):
/* إخفاء قسم التوقيع للجميع */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* إظهاره فقط إذا كان الفصل 'user-is-XXXXX' موجودًا على الجسم */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
- أضف هذا الكود إلى علامة التبويب أسفل الكتلة الأولى أعلاه (استبدل XXXXX باسم مجموعتك):
<script>
(function() {
const checkAccess = () => {
// يخزن Discourse مجموعات المستخدم الحالي في هذا الكائن العام
const user = window.Discourse && window.Discourse.User && window.Discourse.User.current();
if (user && user.groups) {
// تحقق مما إذا كان أي اسم مجموعة يطابق "XXXXX"
const isXXXXX = user.groups.some(g => g.name === 'XXXXX');
if (isXXXXX) {
document.body.classList.add('user-is-XXXXX');
}
}
};
// تشغيل فوري
checkAccess();
// التشغيل في كل مرة يتنقل فيها المستخدم بين الصفحات
document.addEventListener('discourse-ready', checkAccess);
// احتياطي: التشغيل مرة أخرى بعد ثانية واحدة لالتقاط التحميلات البطيئة
setTimeout(checkAccess, 1000);
})();
</script>
- أضف هذا الكود إلى علامة التبويب css أسفل الكتلة الأولى أعلاه (استبدل XXXXX باسم مجموعتك):
/* إخفاء قسم التوقيع للجميع */
.user-preferences .control-group.signatures,
.user-preferences .signature-preferences,
.user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: none !important;
}
/* إظهاره فقط إذا كان الفصل 'user-is-XXXXX' موجودًا على الجسم */
body.user-is-XXXXX .user-preferences .control-group.signatures,
body.user-is-XXXXX .user-preferences .signature-preferences,
body.user-is-XXXXX .user-preferences div[data-setting-name="user_card_badge"] + .control-group {
display: block !important;
}
تم.
أنا لست مطورًا. كل ما أعرفه هو أن هذا يعمل بنسبة 100٪ على موقعي.