أهلا وسهلا بك زائرنا الكريم في منتدى دعم PBBoard الرسمي، لكي تتمكن من المشاركة ومشاهدة جميع أقسام المنتدى وكافة الميزات ، يجب عليك إنشاء حساب جديد بالتسجيل بالضغط هنا أو تسجيل الدخول اضغط هنا إذا كنت عضواً .

مسيرتي في برمجة ملحقي ( ملحق الإستبدال )


مشاهدة المشاركة في الموضوع بالعرض العادي
look/images/icons/i1.gif مسيرتي في برمجة ملحقي ( ملحق الإستبدال )
  13-02-2016 02:31 صباحاً  
أبو العصافير
معلومات الكاتب
في هذا الرد سأقوم بتحليل الملحق، على بركة الله :

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&amp;hooks=1&amp;mainhooks=1&amp;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']} &raquo;
<a href="index.php?page=options&amp;hooks=1&amp;mainhooks=1&amp;word_replacer=1">صفحة استبدال الكلمات</a>
</div>

<form action="index.php?page=options&amp;hooks=1&amp;update=1&amp;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&amp;hooks=1&amp;mainhooks=1&amp;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&amp;amp;hooks=1&amp;amp;mainhooks=1&amp;amp;word_replacer=1<br />


وحسب ما فهمته كالتالي :

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&amp;hooks=1&amp;mainhooks=1&amp;word_replacer=1');
        }
        exit;
}
]]></hook>




هذا الكود يتم استدعاؤه عند النقر على طلب التعديل الموجود في القالب word_replacer_main.tpl في الطلب

CODE
​index.php?page=options&amp;amp;hooks=1&amp;amp;update=1&amp;amp;word_replacer=1<br />




ويقوم هذا الكود بحفظ الكلمات وإستبدالاتها في السطرين في جدول 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 مع الإستعانة ببعض المصادر على النت



شكرًا لك على الإضافة .. وسأحاول تطوير الإضافة لتعمل بشكل مختلف قليلًا ولكن ستكون أفضل بإذن الله من ناحية المميزات وسهولة التعامل معها وخاصة مع كمية كلمات كبيرة جدًا


الساعة الآن 05:06 AM