النتائج 1 إلى 5 من 5

الموضوع: [درس]-[joomla]برمجة مكون بسيط - الدرس الرابع

  1. #1

    [درس]-[joomla]برمجة مكون بسيط - الدرس الرابع



    السلام عليكم
    درسنا اليوم هو الرابع من نوعه و هو إكمال للدروس [راجعها لزاما]
    [درس]برمجة موديل بسيط - الدرس الأول
    [درس]برمجة مكون بسيط - الدرس الثاني
    [درس]برمجة المكونات - الدرس الثالث
    أو إبحث عنها هنا في القسم .

    نرجع اليوم بخطواتنا إلى الدرس السابق ـ إستدعاء الأزرار في الملف
    كود PHP:
    toolbar.example.html.php 
    و نقلص محتواه إلى ما يلي
    كود PHP:
    <?php
    defined
    '_JEXEC' ) or die( 'الوصول المباشر لهذه الصفحة غير مسموح' );

    class 
    TOOLBAR_example {

        function 
    _NEW() {
            
    JToolBarHelper::save();
            
    JToolBarHelper::apply();
            
    JToolBarHelper::cancel();        
        }

        function 
    _DEFAULT() {

            
    JToolBarHelper::titleJText::_'إدارة المكون Example' ), 'generic.png' );
            
    JToolBarHelper::publishList();
            
    JToolBarHelper::unpublishList();
            
    JToolBarHelper::deleteList();
            
    JToolBarHelper::editListX();
            
    JToolBarHelper::addNewX();
        
        }
    }
    ?>
    و أنا أعلم أنكم تلاحظون الفرق و الذي هو :
    تقليل عدد الأزرار في شريط تحكم المكون

    نبدأ الآن بالجديد
    ننشئ مجلد جديد و نسميه
    كود PHP:
    tables 
    ننشئ داخله ملفا بإسم
    كود PHP:
    example.php 
    و نضع فيه
    كود PHP:
    <?php
    defined
    ('_JEXEC') or die('الوصول المباشر لهذه الصفحة غير مسموح');
    مفهومة [راجع الدروس السابقة]
    كود PHP:
    class TableExample extends JTable

    نفتح كلاس جديد بإسم
    كود PHP:
    TableExample 
    و إمتداده
    كود PHP:
    JTable 
    معد مسبقا مع جملة [كل ما يبدأ ب J فهو معد مسبقا مع نواة جملة]

    كود PHP:
        var $id         null;
        var 
    $message         null;    
        var 
    $published         0
    و هي الحقول التي سننشئها في جدول في قاعدة البيانات
    *إسم الجدول سيكون
    كود PHP:
    example_message 
    ثم نضع
    كود PHP:
        function __construct(&$db)
        {
            
    parent::__construct'#__example_message''id'$db );
        } 
    و هي دالة لتحديد مكان الـ ID
    لاحظوا معي جيدا
    جداول جملة لا بد أن تبدأ بـ بادئة Prefix
    و البادئة الإفتراضية تكون
    كود PHP:
    jos_ 
    لكن و لزيادة الحماية يمكنك تغييرها عند تثبيت المجلة لذلك لا يمكننا الإعتماد على بادئة واحدة في كودنا البرمجي
    لذلك لاحظوا الدالة أعلاه و أنظروا إلى إسم الجدول
    كود PHP:
    #__example_message 
    إذا العلامة
    كود PHP:
    #__ 
    تعوض البادئة Prefix
    و هنا لا يكون لدينا مشكل و إضافاتنا ستثبت على قواعد بيانات تابعة لجملة و تحمل بادئات مختلفة .
    كود PHP:
    }

    ?> 
    نغلق الكلاس و الملف
    و يكون الناتج النهائي // الكود نوعا ما
    كود PHP:
    <?php
    defined
    ('_JEXEC') or die('الوصول المباشر لهذه الصفحة غير مسموح');

    class 
    TableExample extends JTable
    {
        var 
    $id         null;
        var 
    $message         null;    
        var 
    $published         0;    

        function 
    __construct(&$db)
        {
            
    parent::__construct'#__example_message''id'$db );
        }    
        
    }

    ?>
    الآن نذهب للملف الذي أنشأناه في الدرس السابق
    كود PHP:
    admin.example.php 
    نمسح ما بداخله و نضع

    كود PHP:
    <?php
    // الوصول المباشر لهذه الصفحة غير مسموح
    defined'_JEXEC' ) or die( 'Restricted access' );

    // للربط مع الملف admin.example.html.php
    require_once( JApplicationHelper::getPath'admin_html' ) );
    // تحديد مكان المجلة tables الذي أنشأناه سابقا
    JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.
    'com_example'.DS.'tables');

    $task    JRequest::getCmd('task');

    // التحقق من قيمة المتغير $task و الذي يكون مسؤولا عن إظهار الأزرار و وقت و مكان إظهارها [راجع الدرس السابق]

    switch($task){  // التحقق الشرطي من قيم المتغير $task
        
    case 'add':
            
    addExample(); // تفعيل الزر - جديد
            
    break;
            
        case 
    'cancel';        
            
    showExample();// تفعيل الزر - إلغاء
            
    break;
            
        case 
    'save';        
            
    saveExample();// تفعيل الزر - حفظ
            
    break;
            
        default:
            
    showExample();// ما يظهر إفتراضيا و هو واجهة المكون
            
    break;

    }

    function 
    addExample(){
        
    $lists['published'] = JHTML::_('select.booleanlist''published' 'class="inputbox"'$row->published);
        
    HTML_contact::addExample($lists);
    }
    // دالة للإتصال بقواعد البيانات و تحديدا بجدول example_message 
    function showExample(){
        
    $db =& JFactory::getDBO();
        
    $query "SELECT * FROM #__example_message"
        
    $db->setQuery$query );
        
    $rows $db->loadObjectList();
        if(
    $db->getErrorNum()){
            echo 
    $db->stderr();
            return 
    false;
        }
         
    HTML_contact::showExample($rows);
    }

    // الدالة مسؤولة عن الحفظ
    function saveExample(){
        global 
    $mainframe;
        
    $row =& JTable::getInstance('example''Table');
        if(!
    $row->bind(JRequest::get('post')))
        {
            
    JError::raiseError(500$row->getError() );
        }
        
    $row->message JRequest::getVar'message''','post''string'JREQUEST_ALLOWRAW );
        
        if(!
    $row->store()){
            
    JError::raiseError(500$row->getError() );
        }
        
    $mainframe->redirect('index.php?option=com_example''تم الحفظ بنجاح');
    }
    ?>
    و الآن ننشئ الملف
    كود PHP:
    admin.example.html.php 
    و هو المسؤول عن التنسيق
    و نضع بداخله
    كود PHP:
    <?php
    defined
    '_JEXEC' ) or die( 'Restricted access' );

    class 
    HTML_contact
    {
        function 
    addExample($lists){
            
    JRequest::setVar'hidemainmenu');
            
    $editor    =& JFactory::getEditor();
            
    ?>
            
            <script language="javascript" type="text/javascript">
            <!--
            function submitbutton(pressbutton) {
                var form = document.adminForm;
                if (pressbutton == 'cancel') {
                    submitform( pressbutton );
                    return;
                }
                
                
                submitform( pressbutton );
            }

            </script>        
            
            <form action="index.php" method="post" name="adminForm">
                    <table class="admintable">
                    <tr>
                        <td class="key">
                            <label for="message">
                                <?php echo JText::_'Message' ); ?>:
                            </label>
                        </td>
                        <td >
                            <?php
                            
    echo $editor->display('message','','100%','250','40','6');
                            
    ?>
                        </td>
                    </tr>
                    <tr>
                        <td class="key">
                            <label for="message">
                                <?php echo JText::_'Published' ); ?>:
                            </label>
                        </td>
                        <td >
                            <?php
                            
    echo $lists['published'];
                            
    ?>
                        </td>
                    </tr>                
                    </table>        
            <input type="hidden" name="option" value="com_example" />
            <input type="hidden" name="task" value="" />        
            </form>
            <?php
            
        
    }
        

        function 
    showExample($rows){
        
    ?>
        <form action="index.php" 
               method="post" name="adminForm">    
        <table class="adminlist">
        <thead>
            <tr>
                <th width="20">
                <input type="checkbox" name="toggle"
                value="" 
     onclick="checkAll(<?php echo count($rows)?>)">
                </th>
                <th width="50" class="title">ID</td>
                <th>الرسائل</th>
                <th nowrap="nowrap">منشور / غير منشور</th>
            </tr>
        </thead>
        <?php
        $k 
    0;
        for(
    $i=0$n=count($rows); $i $n $i++)
        {
            
    $row = &$rows[$i];
            
    $checked     JHTML::_('grid.id'$i$row->id);
            
    $published     JHTML::_('grid.published'$row$i); 
            
    ?>
            <tr class="<?php echo "row$k"?>">
                <td><?php echo $checked?></td>
                <td><?php echo $row->id?></td>
                <td><?php echo $row->message?></td>            
                <td><?php echo $published?></td>            
            </tr>
            <?
            $k 
    $k;
        }
        
    ?>
        </table>
        <input type="hidden" name="option" value="com_example">
        <input type="hidden" name="task" value="">    
        <input type="hidden" name="boxchecked" value="0">    
        </form>
        <?php
        
    }

    }
    ?>
    // أعتذر على عدم الشرح المفصل لما سبق لأن تأليفه سيأخذ وقتا طويلا لكن و بالمقابل أنا و الفريق مستعدون للإجابة على أسئلتكم و بهذا يستفيد الجميع

    نذهب إلى الملف الذي أنشأناه سابقا في الدروس السابقة
    كود PHP:
    example.xml 
    نفتحه و بعد العبارة
    كود PHP:
    <description>Example Component By JoomlaUT</description
    نفتح تعريف التثبيت من جديد
    كود PHP:
    <install
    ثم تعريف إنشاء جداول قاعدة البيانات
    كود PHP:
            <queries
    ثم الجدول رقم 1 و فيه ثلاث حقول
    كود PHP:
                <query id="1" table="jos_example_message">
    CREATE TABLE `#__example_message` (
    `
    idINT11 NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `
    messageTEXT NOT NULL ,
    `
    publishedTINYINTNOT NULL 
    );
    </
    query
    لاحظوا معي سهولة تثبيت الجداول في قاعدة البيانات من ملف التثبيت XML
    أنشأنا الجدول
    كود PHP:
    example_message 
    و ثلاثة حقول ،
    الأول :
    id و قيمته هي الترقيم التلقائي
    message و قيمته هي Text لتخزين البيانات
    الثالث هو published و قيمته عدد ثابت ذو خيارين فقط و هما 1 و صفر .

    الجدول الذي أنشأناه إسمه :
    كود PHP:
    #__example_message 
    تابع الدرس و ستعلم الغرض من العلامة
    كود PHP:
    #__ 
    ثم من ملف الـ XML ذاته نضيف الملف التالي لرفعه مع المكون أثناء تثبيته
    داخل التعريف
    كود PHP:
    <administration
    نضيف
    كود PHP:
    <filename>admin.example.html.php</filename>
    <
    filename>tables/example.php.php</filename
    لاحظ جيدا أن الملف موجود بالمجلد
    كود PHP:
    tables 
    لذلك كتبناه
    كود PHP:
    tables/example.php 
    كي يتم إنشاء مجلد بإسم tables و رفع الملف إليه
    أليست جملة رائعة ؟


    الآن أعد تثبيت المكون بعد ضغط ملفاته التي أنشأناها و عدلناها اليوم

    ثم من لوحة تحكم المكون
    إضغط على الزر [جديد]
    و لاحظ أنه سيظهر معك المحرر
    أضف شيئا ما و إضغط [حفظ]
    إذا ظهرت الرسالة
    تم الحفظ بنجاح

    فإعلم أنك على الطريق الصحيح
    و يمكنك التأكد أكثر من قواعد بيانات مجلتك و من الجدول الذي يحمل إسم
    كود PHP:
    example_message 
    لترى إن كان يحمل بيانات أم لا
    إنتهى الدرس بفضل الله وحده ، لا شريك له .
    و لكم مني خالص الود

    * الموضوع الأصلي
    * لا زلنا بحاجة لأعضاء جدد بالفريق [مبرمجين و غير مبرمجين]
    * الموضوع مفتوح المصدر
    * المكون بالمرفقات
    * قد لا تكون هذه الدروس للمبتدئين و إنما لتعريف المبرمجين المتقدمين على بيئة جملة





    الملفات المرفقة الملفات المرفقة


  2. #2
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2009
    المشاركات
    326


    ماشاء الله تبارك الله
    لم اتوقع ان تكون الدروس بهذه السرعة
    متابع معكم في الموقع ...
    لكن لماذا لاتتبنون فكرة داعم عربي لجملة بالكامل ؟
    سواء كتصميم او برمجة ملحقات مادام الفريق موجودا





    __________________
    ما الشأن وجود الطلب، و إنما الشأن أن ترزق حسن الأدب.

  3. #3


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

    يبدو حلما بعيدا و لكن نحن بإذن الله مسايرون له و لكل مقام مقال
    و شكرا على الاقتراح






  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Feb 2009
    المشاركات
    326


    عزيزي ارى انك عضو موقوف بالمنتدى !
    هل عضويتك هناك بنفس اسمها هنا ؟
    هل بدئت المشاكل بين الفريق من البداية
    اتمنى ان لايصل الفريق الى مثل ماوصل اليه فريق mysmartbb





    __________________
    ما الشأن وجود الطلب، و إنما الشأن أن ترزق حسن الأدب.

  5. #5


    لا أخي لست موقوفا و إنما نسيت بعض التنسيقات في المنتدى و قد غيرت اللون الآن











ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض