- الرئيسية
- ما الجديد !
-
الصفحات▼
الصفحات
أهلا وسهلا بك زائرنا الكريم في منتدى دعم PBBoard الرسمي، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .
مشكل في زر جديد للمحرر
-
24-11-2025 08:57 صباحاً
-
Sofiene2023معلومات الكاتبالأعضاءعضو فعال
- انضم في :
- 03-10-2023
- رقم العضوية :
- 9590
- المشاركات :
- 119
- الجنس:
- تاريخ الميلاد :
- 20-5-1979
- قوة السمعة:
- 1160
- موقعي:
- زيارة موقعي
-
السلام عليكم
قمت بإضافة زر جديد في المحرر لتطبيق لون معين لخلفية للنص المحدد كما هو مبين في الصورة التالية

وهذه صورة توضح النص المحدد بعد إضافة الخلفية

لكن المشكل المطروح أن الخلفية لا تظهر بعد إعتماد الموضوع

هل من حل لهذا المشكل
بارك الله فيكم
في ما يلي كود الإضافة
Java// ========================= // PLUGIN COULEURS PERSONNALISÉES + CONTRASTE AUTO // ========================= (function () { // Palette personnalisée var customColors = [ "#000000", "#434343", "#666666", "#999999", "#b7b7b7", "#cccccc", "#d9d9d9", "#efefef", "#ffffff", "#980000", "#ff0000", "#ff9900", "#ffff00", "#00ff00", "#00ffff", "#4a86e8", "#0000ff", "#9900ff" ]; // Détection fond sombre function isDarkColor(hex) { hex = hex.replace('#', ''); var r = parseInt(hex.substr(0, 2), 16); var g = parseInt(hex.substr(2, 2), 16); var b = parseInt(hex.substr(4, 2), 16); var luminance = (0.299 * r + 0.587 * g + 0.114 * b); return luminance < 128; } // Génère une palette de couleurs function createColorGrid(editor, caller, callback, cssClass) { var container = document.createElement("div"); container.className = cssClass; container.style.display = "grid"; container.style.gridTemplateColumns = "repeat(9, 20px)"; container.style.gap = "4px"; container.style.padding = "5px"; customColors.forEach(function (color) { var cell = document.createElement("div"); cell.style.background = color; cell.style.width = "20px"; cell.style.height = "20px"; cell.style.cursor = "pointer"; cell.style.border = "1px solid #222"; cell.addEventListener("click", function () { callback(color); editor.closeDropDown(true); }); container.appendChild(cell); }); editor.createDropDown(caller, cssClass, container); } // --- COULEUR DE TEXTE --- sceditor.command.set("fontcolor", { exec: function (caller) { var editor = this; createColorGrid(editor, caller, function (color) { editor.execCommand("forecolor", color); }, "fontcolor-grid"); }, tooltip: "Couleur du texte" }); // --- BACKGROUND AVEC CONTRASTE AUTOMATIQUE ET STYLES --- sceditor.command.set("bgcolor", { exec: function (caller) { var editor = this; createColorGrid(editor, caller, function (color) { // Appliquer le style avec span pour le background var selectedText = editor.getSelectedText(); if (selectedText) { // Créer un span avec les styles de background var styledText = '<span style="' + 'background-color: ' + color + '; ' + 'border-radius: 4px; ' + 'padding: 2px 6px; ' + 'display: inline-block;' + '">' + selectedText + '</span>'; editor.insertHTML(styledText); } else { // Si aucun texte sélectionné, appliquer avec les commandes standard if (!editor.execCommand("backcolor", color)) { editor.execCommand("hilitecolor", color); } // Appliquer les styles via CSS inline var currentNode = editor.getCurrentNode(); if (currentNode && currentNode.style) { currentNode.style.borderRadius = "4px"; currentNode.style.padding = "2px 6px"; currentNode.style.display = "inline-block"; } } // Choix automatique du texte (blanc/noir) var autoTextColor = isDarkColor(color) ? "#ffffff" : "#000000"; editor.execCommand("forecolor", autoTextColor); }, "bgcolor-grid"); }, tooltip: "Couleur de fond (contraste auto + style)" }); })();
-
-
مشكل في زر جديد للمحرر24-11-2025 09:40 مساءً [1]
-
Solimanمعلومات الكاتبالادارة العامةPBBoard developer
- انضم في :
- 18-07-2009
- رقم العضوية :
- 1
- المشاركات :
- 13422
- الدولة :
- KSA
- الجنس:
- الدعوات:
- 55
- قوة السمعة:
- 82296
- موقعي:
- زيارة موقعي
-
كود الاضافة الذي تستخدمه مدمج به تلوين الخط ايضا وهو متوفر في المحرر كما انه لايدعم التحويل الى BBcode والعكس في مخرجاته والمصدر
تفضل استخدم هذا الكود:
Java(function () { function rgbToHex(rgb) { if (!rgb) return rgb; if (rgb.indexOf('#') === 0) return rgb; var m = rgb.match(/\d+/g); if (!m || m.length < 3) return rgb; var r = parseInt(m[0], 10), g = parseInt(m[1], 10), b = parseInt(m[2], 10); return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1); } function bb_format(element, content) { var color = $(element).css("background-color"); color = rgbToHex(color); return '[bgcolor=' + color + ']' + content + '[/bgcolor]'; } function _extractColorFromAttrs(attrs) { if (!attrs) return null; if (typeof attrs === "string") { return attrs; } var keysToTry = ["default", "value", "color", 0, "0"]; var candidates = []; keysToTry.forEach(function (k) { if (attrs.hasOwnProperty(k) && attrs[k]) candidates.push(attrs[k]); }); for (var k in attrs) { if (!attrs.hasOwnProperty(k)) continue; var v = attrs[k]; if (typeof v === "string" && v) candidates.push(v); } function normalizeColor(v) { if (!v || typeof v !== "string") return null; v = v.trim(); if (/^rgb(a)?\(/i.test(v)) return v; if (/^[0-9A-Fa-f]{3}$/.test(v)) { return "#" + v.split('').map(function(c){ return c + c; }).join(''); } if (/^[0-9A-Fa-f]{6}$/.test(v)) { return "#" + v; } var m = v.match(/^#([0-9A-Fa-f]{3}|[0-9A-Fa-f]{6})$/); if (m) { var hex = m[0]; if (hex.length === 4) { var short = hex.slice(1); return "#" + short.split('').map(function(c){ return c + c; }).join(''); } return hex; } return null; } for (var i = 0; i < candidates.length; i++) { var c = normalizeColor(String(candidates[i])); if (c) return c; } return null; } function bb_html(token, attrs, content) { var color = _extractColorFromAttrs(attrs) || "#ffff00"; return '<span style="background-color:' + color + ';">' + content + '</span>'; } if ($.sceditor && $.sceditor.formats && $.sceditor.formats.bbcode) { $.sceditor.formats.bbcode.set("bgcolor", { tags: { span: { style: { "background-color": null } } }, format: bb_format, html: bb_html }); } else { console.warn("SCEditor bbcode format API غير متاحة: $.sceditor.formats.bbcode"); } }()); $.sceditor.command.set('bgcolor', { _dropDown: function (editor, caller) { var colors = [ "#ffff00", "#ffeb3b", "#ffe082", "#ffd54f", "#ffca28", "#ff9800", "#ff5722", "#f44336", "#e91e63", "#9c27b0", "#673ab7", "#3f51b5", "#2196f3", "#03a9f4", "#00bcd4", "#009688", "#4caf50", "#8bc34a", "#cddc39", "#ffccbc", "#d7ccc8", "#c5cae9", "#b3e5fc", "#b2dfdb", "#c8e6c9", "#ffffff", "#000000", "#f0f0f0", "#ffe4e1", "#f5f5dc" ]; var $content = $('<div style="padding:10px; width:260px; font-family: Arial, sans-serif; font-size:13px;"></div>'); $content.append('<div style="margin-bottom:6px;font-weight:bold;">اختر لون الخلفية:</div>'); var palette = $('<div style="margin-bottom:10px;"></div>'); colors.forEach(function (color) { var box = $('<div>') .attr('title', color) .css({ width: "22px", height: "22px", background: color, border: "1px solid #888", display: "inline-block", margin: "3px", cursor: "pointer" }) .on("click", function () { applyColor(editor, color); }); palette.append(box); }); $content.append(palette); var pickerWrapper = $('<div style="margin-top:6px; display:flex; align-items:center;"></div>'); var pickerInput = $('<input type="color" value="#ffff00" style="width:44px;height:32px;cursor:pointer;border:1px solid #ccc;">'); var hexInput = $('<input type="hidden" value="#ffff00" style="width:90px;margin-left:8px;padding:6px;border:1px solid #ccc;">'); var applyBtn = $('<button type="button" style="margin-left:8px;padding:6px 8px;cursor:pointer;">تطبيق</button>'); pickerInput.on("input", function () { hexInput.val(pickerInput.val()); }); hexInput.on("input", function () { var v = hexInput.val().trim(); if (/^#([0-9A-F]{3}){1,2}$/i.test(v)) { pickerInput.val(v); } }); applyBtn.on("click", function () { var color = hexInput.val().trim(); if (!/^#([0-9A-F]{3}){1,2}$/i.test(color)) { var tryv = color.replace(/[^0-9A-Fa-f]/g, ""); if (tryv.length === 3) tryv = tryv.split('').map(function(c){return c+c;}).join(''); if (tryv.length === 6) color = "#" + tryv; } if (!/^#([0-9A-F]{6})$/i.test(color)) { alert("الرجاء إدخال كود HEX صالح مثل #ffcc00"); return; } applyColor(editor, color); }); pickerWrapper.append(pickerInput, hexInput, applyBtn); $content.append(pickerWrapper); editor.createDropDown(caller, 'bgcolor-picker', $content.get(0)); }, exec: function (caller) { $.sceditor.command.get('bgcolor')._dropDown(this, caller); }, txtExec: function (caller) { $.sceditor.command.get('bgcolor')._dropDown(this, caller); }, tooltip: "Background Color" }); function applyColor(editor, color) { try { $(editor).trigger('focus'); } catch (e) {} var inSource = false; try { inSource = !!(editor.inSourceMode && editor.inSourceMode()); } catch (e) { inSource = false; } if (inSource) { var selText = editor.getRangeHelper().selectedText(); if (selText) { editor.insert('[bgcolor=' + color + ']' + selText + '[/bgcolor]'); } else { editor.insert('[bgcolor=' + color + ']النص هنا[/bgcolor]'); } return; } try { var ok = editor.execCommand("backColor", color); if (!ok) editor.execCommand("hiliteColor", color); } catch (e) { var selHtml = editor.getRangeHelper().selectedHtml(); if (selHtml) { editor.insert('<span style="background-color:' + color + ';">' + selHtml + '</span>'); } else { editor.insert('<span style="background-color:' + color + ';">النص هنا</span>'); } } }
اسم الزر في شريط الأدوات هو bgcolor
ما الذي يفعله هذا الكود؟
✔ يعمل على وضع BBCode بالكامل
✔ تلوين النص مباشرة في المحرر (WYSIWYG)
✔ يحفظ اللون داخل BBCode عند الإرسال
✔ يعيد تحويل الـ BBCode إلى لون عند تحرير الرسالة مجددًا
✔ إضافة منتقي ألوان متكامل (Color Picker)
يتبقى لك اضافة كود PHP الخاص بالإضافة الذي تريد أن يتم تنفيذه ليتم استبداله من الـ BBcode الى كود HTML
وذلك بالتوجه إلى لوحة تحكم الإدارة» الإضافات البرمجية » إضافة برنامج مساعد جديد (خطاف)
New Plugin Name: BBcode info
Plugin Name: لاشيء
Hook Name: BBCodeParseHooks1
كود PHP الخاص بالإضافة الذي تريد أن يتم تنفيذه ليتم استبداله من الـ BBcode الى كود HTML
CODE$string = preg_replace("#\[bgcolor=([a-zA-Z]*|\#?[\da-fA-F]{3}|\#?[\da-fA-F]{6})](.*?)\[/bgcolor\]#si", "<span style=\"background-color: $1;\" class=\"mycode_color\">$2</span>", $string); $string = preg_replace('#\[bgcolor\=(.+)\](.+)\[\/bgcolor\]#iUs', "<span style=\"background-color: $1;\" class=\"mycode_color\">$2</span>", $string);
لمزيد من التفاصيل عن طريقة شرح اضافة الزر الى شريط ادوات المحرر بالاضافة وبقيه التفاضيل الأخرى ستجده مشروحه في موضوع شرح اضافة زر BBcode جديد لمحرر SCEditor لمنتديات PBBoard
-
-
مشكل في زر جديد للمحرر26-11-2025 10:18 مساءً [2]
-
Sofiene2023معلومات الكاتبالأعضاءعضو فعال
- انضم في :
- 03-10-2023
- رقم العضوية :
- 9590
- المشاركات :
- 119
- الجنس:
- تاريخ الميلاد :
- 20-5-1979
- قوة السمعة:
- 1160
- موقعي:
- زيارة موقعي
-
بارك الله فيك أخي سليمان
تم الحل
-
-