السلام عليكم ورحمة الله وبركاته
تحية طيبة وبعد .،،،
بعد ترقية منتدى أحد عملائنا لأحدث إصدار 3.6.3 لاحظنا ظهور مشكلة غريبة الا وهى استبدال بعض الحروف العربية بشكل تلقائى عند كتابة أى موضوع أو مشاركة جديدة. بمعنى أنك إذا كتبت "ووووو أو والحمد" أو كتبت "مممممم أو مجرد" أو كتبت "للللل أو لله" فإن الحرف الأول من الكلمة إذا كان واو أو لام أو ميم سيتغير تلقائياً بعد إعتماد المشاركة إلى حرف آخر.
بعد عدة فحوصات واستمرار البحث والتنقيب :funny: توصلنا إلى التالى:
السبب فى هذه المشكلة هى الأكواد الجديدة للدالة fetch_no_shouting_text والمسؤولة عن تغيير الرموز الإنجليزية الكبيرة إلى رموز صغيرة عند تفعيل هذا الخيار من لوحة التحكم قد تغيرت وتسبب هذه المشكلة.
الخيار المعنى بلوحة التحكم هو ما يتم ترجمته بـ "منع الصراخ" أو بالإنجليزية "Prevent Shouting" ولذا فإن الحل أحد الأمرين:
إما أن يتم تعطيل هذه الخاصية من لوحة التحكم وذلك كالتالى: لوحة التحكم -> خيارات المنتدى -> إعدادات طريقة نشر المواضيع و الردود (بإختيار الرابط التالى: http://localhost/vb/admincp/options....ting&advanced= 0) ثم التوجه إلى منتصف الصفحة تقريباً لتجد الخيار المطلوب وهو "منع الصراخ" أو "Prevent Shouting" وتقوم بوضع القيمة 0 أمامه، قد تجد القيمة 1 أو 2 أو 3 وفى جميع الاحوال قم بتغييرها إلى 0.
الحل الثانى هو أن نستخدم أكواد الدالة القديمة والتى كانت تستخدم حتى الإصدار 3.6.2 وذلك إذا رغبت فى أن تستخدم هذا الخيار ولا تعطله وفى هذه الحالة عليك بعمل التالى:
التوجه إلى الملف includes/functions_newpost.php وفتحه والبحث بداخله عن الأكواد التالية:
كود PHP:
function fetch_no_shouting_text($text)
{
// stops $text being all UPPER CASE
global $vbulletin;
// we only actually touch a-z with vbstrtolower()
$effective_string = preg_replace('#[^a-z0-9\s]#i', '', $text);
if ($vbulletin->options['stopshouting'] AND vbstrlen($effective_string) >= $vbulletin->options['stopshouting'] AND $effective_string == strtoupper($effective_string))
{
return ucwords(vbstrtolower($text));
}
else
{
return $text;
}
}
ثم تقوم بإستبدالها بالأكواد التالية:
كود PHP:
function fetch_no_shouting_text($text)
{
// stops $text being all UPPER CASE
global $vbulletin;
return iif($vbulletin->options['stopshouting'] AND vbstrlen($text) >= $vbulletin->options['stopshouting'] AND $text == strtoupper($text), ucwords(vbstrtolower($text)), $text);
}
هذا كل شئ
ملحوظة: لا أعتقد أن المنتديات العربية بحاجة إلى هذه الخاصية لذا أفضل تعطيلها بدلاً من تعديل الملف لأن الخاصية كما ذكرت تقم فقط بتحويل الأحرف الإنجليزية الكبيرة إلى أحرف إنجليزية صغيرة وذلك لتتوافق مع بعض المعايير فى حالة كان المنتدى لغوى أو رسمى أو ما إلى ذلك.
رابط الحل فى المنتدى الرسمى: هنــــــــــــــــا المشاركة الخامسة والسادسة.
أطيب تحية