شوّيت: شبكة كرة قدم اجتماعية


العودة   سوالف سوفت > سوالف تطوير المنتديات والمدوّنات والمجلات > الهاكات والإضافات
التسجيل المدوّنات البحث مشاركات اليوم جعل الأقسام مقروءة

الرد على الموضوع
 
LinkBack أدوات الموضوع
لا إله إلا الله
#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 
لترى إن كان يحمل بيانات أم لا
إنتهى الدرس بفضل الله وحده ، لا شريك له .
و لكم مني خالص الود

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






الملفات المرفقة
نوع الملف: zip com_example.zip‏ (4.5 كيلوبايت, 37 مشاهدة)
__________________
* إسألني
* راسلني
خالد الحضري is offline   قديم 10-04-2009, 11:40 AM
الرد مع إقتباس
عضو نشيط جدا
#2  

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






__________________
ما الشأن وجود الطلب، و إنما الشأن أن ترزق حسن الأدب.
Horizons is offline   قديم 10-04-2009, 03:40 PM
الرد مع إقتباس
لا إله إلا الله
#3  

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

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






__________________
* إسألني
* راسلني
خالد الحضري is offline   قديم 10-04-2009, 03:52 PM
الرد مع إقتباس
عضو نشيط جدا
#4  

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






__________________
ما الشأن وجود الطلب، و إنما الشأن أن ترزق حسن الأدب.
Horizons is offline   قديم 10-04-2009, 03:59 PM
الرد مع إقتباس
لا إله إلا الله
#5  

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






__________________
* إسألني
* راسلني
خالد الحضري is offline   قديم 10-04-2009, 04:34 PM
الرد مع إقتباس
الرد على الموضوع


 

أدوات الموضوع

قوانين المشاركات
لا يمكنك كتابة مواضيع جديدة
لا يمكنك إضافة ردود
لا يمكنك إرسال مرفقات
لا يمكنك تعديل مشاركاتك

كود vB متاح
كود [IMG] متاح
كود HTML غير متاح
Trackbacks are متاح
Pingbacks are متاح
Refbacks are متاح


المواضيع المشابهه
الموضوع كاتب الموضوع القسم الردود آخر مشاركة
[joomla]-[درس]برمجة المكونات - الدرس الثالث خالد الحضري الهاكات والإضافات 1 13-04-2009 05:10 AM
[joomla]درس برمجة مكون بسيط خالد الحضري الهاكات والإضافات 2 09-04-2009 01:13 AM
[joomla]درس برمجة موديل بسيط خالد الحضري الهاكات والإضافات 0 07-04-2009 02:49 AM
[ درس ] برمجة منتدى صغير و بسيط, php + MySQL Mr.eslam PHP 27 06-03-2008 01:24 PM
درس في الفوتوشوب { الدرس الرابع } راشد الكواري2 التصميم والرسومات والمونتاج 7 27-05-2002 06:22 PM


جميع الأوقات بتوقيت غرينتش +3. الوقت الآن هو 06:31 AM.