في هذا الرد سأقوم بتحليل الملحق، على بركة الله :
CODE
<?xml version="1.0" encoding="UTF-8"?>
هذا عنصر ثابت وهو خاص بلغة xml
CODE
<plugin name="ملحق مستبدل الكلمات بكلمات أخرى مباشرة بشكل غير نهائي">
هذا اسم الملحق
<version>1.0</version>
اصدار الملحق
CODE
<description><![CDATA[
<ul>
<li><b>التوافق: PBB3.0.2 فقط ، برمجة: <a href="https://pbboard.info/forums/u1" target="_blank"><font color="green">Soliman</font></b></a></li>
<li><a href="index.php?page=options&hooks=1&mainhooks=1&word_replacer=1"><font color="blue">صفحة استبدال الكلمات</font></a></li>
</ul>
]]></description>
وصف الملحق وقد تم استخدام CDATA لأنه يحتوي على اكواد html وعلامتي < و > ولأنك تريد وضعه على شكل نقاط
وهو يظهر هنا :
CODE
<author>Soliman</author>
<url>pbboard.info</url>
بيانات صانع الملحق
<copyrights><![CDATA[pbboard.info]]></copyrights>
هذا حقوق الملحق ولكن لا ادري اين يظهر (لم اجده في لوحة التحكم )
CODE
<installcode><![CDATA[
$PowerBB->DB->sql_query('INSERT INTO ' . $PowerBB->table['info'] . " SET var_name='wreplacer_first',value='' ");
$PowerBB->DB->sql_query('INSERT INTO ' . $PowerBB->table['info'] . " SET var_name='wreplacer_second',value='' ");
]]></installcode>
هنا تم تطبيق كودين على sql حيث تم إضافة سطرين جديدن في الجدول info وهما wreplacer_first و wreplacer_second
CODE
<uninstallcode><![CDATA[
$PowerBB->DB->sql_query('DELETE FROM ' . $PowerBB->table['info'] . " WHERE var_name='wreplacer_first' ");
$PowerBB->DB->sql_query('DELETE FROM ' . $PowerBB->table['info'] . " WHERE var_name='wreplacer_second' ");
]]></uninstallcode>
هنا حذف الملحق والكود يقوم بحذف السطرين الذين تم إضافتهما سابقًا في عملية التنصيب
=====================================================
CODE
<admin_templates>
هذي البداية للتعديلات التي تظهر في لوحة الإدارة
CODE
<template name="word_replacer_main.tpl" type="new">
هذا امر انشاء قالب في مجلد cpstyles ثم مجلد template في لوحة تحكم الإدارة واسم ملف يكون word_replacer_main.tpl والملف جديد type="new"
CODE
<text><![CDATA[
<div class="address_bar">{$lang['Control_Panel']} »
<a href="index.php?page=options&hooks=1&mainhooks=1&word_replacer=1">صفحة استبدال الكلمات</a>
</div>
<form action="index.php?page=options&hooks=1&update=1&word_replacer=1" method="post" name="myform">
<table cellpadding="3" cellspacing="1" width="90%" class="t_style_b" border="0" align="center">
<tr>
<td class="main1" colspan="2" align="center">
مستبدل الكلمات أو الجمل
</td>
</tr>
<tr>
<td class="row2" colspan="2" align="center">
يرجى كتابة كل من الكلمات او الجمل التي تريد استبدالها في سطر جديد , تقابلها الكلمات او الجمل البديلة.
</td>
</tr>
<tr>
<td class="row1">
<div align="center">الكلمات او الجمل التي تريد استبدالها<div/>
<textarea name="wreplacer_first" rows="5" cols="50">{$_CONF['info_row']['wreplacer_first']}</textarea>
</td>
<td class="row1">
<div align="center">الكلمات او الجمل البديلة<div/>
<textarea name="wreplacer_second" rows="5" cols="50">{$_CONF['info_row']['wreplacer_second']}</textarea>
</td>
</tr>
<tr>
<td class="main2" colspan="2" align="center">
<input type="submit" value="تنفيذ" />
</td>
</tr>
</table>
</form>
]]></text>
هذا محتوى القالب word_replacer_main.tpl وهو غالبًا لوحة التحكم اللي بالصورة هذي :
===============================================
بعدها ننتقل للخطاطيف
CODE
<hook main_place="options_main" place="options_main"><![CDATA[<option value="index.php?page=options&hooks=1&mainhooks=1&word_replacer=1">ملحق مستبدل الكلمات والجمل</option>]]></hook>
هذا الكود يضيف هذا الخيار (مع ارسال القيمة word_replacer :
======================
CODE
<hook main_place="mainInfoHooks" place="mainInfoHooks"><![CDATA[
if ($PowerBB->_GET['word_replacer'])
{
$PowerBB->template->display('word_replacer_main');
exit;
}
]]></hook>
هذا الكود يعرض الخيارات حق الهاك في حالة فتحه من الخيارات والطلب التالي :
CODE
index.php?page=options&hooks=1&mainhooks=1&word_replacer=1
وحسب ما فهمته كالتالي :
CODE
if ($PowerBB->_GET['word_replacer'])
هذا الكود يتأكد ان الطلب فيه word_replacer ضمن الرابط فيقوم بعرض القالب : word_replacer_main.tpl سابقًا كالتالي :
CODE
$PowerBB->template->display('word_replacer_main');
اما بالنسبة لــ exit; فلم افهم لماذا وضعت هنا رغم ان الكود اكتمل ولا يوجد عمليات بعده
==================================
CODE
<hook main_place="updateInfoHooks" place="updateInfoHooks"><![CDATA[
if ($PowerBB->_GET['word_replacer'])
{
$update = array();
$update[0] = $PowerBB->info->UpdateInfo(array('value'=>$PowerBB->_POST['wreplacer_first'],'var_name'=>'wreplacer_first'));
$update[1] = $PowerBB->info->UpdateInfo(array('value'=>$PowerBB->_POST['wreplacer_second'],'var_name'=>'wreplacer_second'));
if ($update[0] and $update[1])
{
$PowerBB->functions->msg($PowerBB->_CONF['template']['_CONF']['lang']['updated_successfully_Please_wait']);
$PowerBB->functions->redirect('index.php?page=options&hooks=1&mainhooks=1&word_replacer=1');
}
exit;
}
]]></hook>
هذا الكود يتم استدعاؤه عند النقر على طلب التعديل الموجود في القالب word_replacer_main.tpl في الطلب
CODE
index.php?page=options&hooks=1&update=1&word_replacer=1
ويقوم هذا الكود بحفظ الكلمات وإستبدالاتها في السطرين في جدول info
===========================================
CODE
<hook main_place="BBCodeParseHooks_cr" place="BBCodeParseHooks_cr"><![CDATA[
$wreplacer_firstf = explode("\r\n",$PowerBB->_CONF['info_row']['wreplacer_first']);
$wreplacer_secondf = explode("\r\n",$PowerBB->_CONF['info_row']['wreplacer_second']);
$text = @str_ireplace($wreplacer_firstf,$wreplacer_secondf,$text);
$text = str_replace($wreplacer_firstf,$wreplacer_secondf,$text);
]]></hook>
وهذا هو اهم خطاف
هذا الخطاف يبدو انه يقوم بعمل BBCode او فحص المواضيع والردود قبل عرضها في الموضوع
وهو يقوم بالتالي :
ينشئ مصفوفة (array) ويحفظها في المتغير $wreplacer_firstf عبر تقسيم الكلمات في السطر wreplacer_first بإستخدام الدالة explode
ويقوم بنفس العملية للسطر wreplacer_second
بعد ذلك يقوم بعمل استبدال للكلمات ( مع تجاهل حالة الاحرف ) عبر استخدام الدالة str_ireplace مع إلغاء عرض الأخطاء فيه بإستخدام علامة @ قبل الدالة
والمفترض ان يتوقف هنا لأنه يكون قد اكمل عمله
ولكن يوجد كود اضافي لا اعرف ما سبب وجوده
str_replace رغم استعمال str_ireplace من قبل وتطبيقه
ولذلك هذا قد يتسبب في مشكلة في حالة الرغبة في استبدال جملة بأخرى فسيتكرر الأمر
مثال :
كلمة "
مرحبًا " تصبح
" مرحبا بك "
مع تواجد السطرين يصبح
"مرحبا بك بك "
لأنه يقوم بأخذ كلمة
" مرحبُا " ويقوم بتحويلها إلى
" مرحبا بك "
ثم يقوم بأخذ
" مرحبًا بك " ويستبدل كلمة
" مرحبًا " بكلمة
"مرحبًا بك" مرة اخرى
فيصبح "
(مرحبًا بك) بك)" فسيظهر في الرد
" مرحبًا بك بك "
استغرقت 4 ساعات في كتابة هذا الرد اثناء تحليل الإضافة وقراءة الشرح
https://pbboard.info/forums/t2539 مع الإستعانة ببعض المصادر على النت
شكرًا لك على الإضافة .. وسأحاول تطوير الإضافة لتعمل بشكل مختلف قليلًا ولكن ستكون أفضل بإذن الله من ناحية المميزات وسهولة التعامل معها وخاصة مع كمية كلمات كبيرة جدًا