السلام عليكم
درسنا اليوم هو الرابع من نوعه و هو إكمال للدروس [راجعها لزاما]
[درس]برمجة موديل بسيط - الدرس الأول
[درس]برمجة مكون بسيط - الدرس الثاني
[درس]برمجة المكونات - الدرس الثالث
أو إبحث عنها هنا في القسم .
نرجع اليوم بخطواتنا إلى الدرس السابق ـ إستدعاء الأزرار في الملف
كود 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::title( JText::_( 'إدارة المكون Example' ), 'generic.png' );
JToolBarHelper::publishList();
JToolBarHelper::unpublishList();
JToolBarHelper::deleteList();
JToolBarHelper::editListX();
JToolBarHelper::addNewX();
}
}
?>
و أنا أعلم أنكم تلاحظون الفرق و الذي هو :
تقليل عدد الأزرار في شريط تحكم المكون
نبدأ الآن بالجديد
ننشئ مجلد جديد و نسميه ننشئ داخله ملفا بإسم و نضع فيه
كود PHP:
<?php
defined('_JEXEC') or die('الوصول المباشر لهذه الصفحة غير مسموح');
مفهومة [راجع الدروس السابقة]
كود PHP:
class TableExample extends JTable
{
نفتح كلاس جديد بإسم و إمتداده معد مسبقا مع جملة [كل ما يبدأ ب J فهو معد مسبقا مع نواة جملة]
كود PHP:
var $id = null;
var $message = null;
var $published = 0;
و هي الحقول التي سننشئها في جدول في قاعدة البيانات
*إسم الجدول سيكون ثم نضع
كود PHP:
function __construct(&$db)
{
parent::__construct( '#__example_message', 'id', $db );
}
و هي دالة لتحديد مكان الـ ID
لاحظوا معي جيدا
جداول جملة لا بد أن تبدأ بـ بادئة Prefix
و البادئة الإفتراضية تكون
لكن و لزيادة الحماية يمكنك تغييرها عند تثبيت المجلة لذلك لا يمكننا الإعتماد على بادئة واحدة في كودنا البرمجي
لذلك لاحظوا الدالة أعلاه و أنظروا إلى إسم الجدول
كود PHP:
#__example_message
إذا العلامة تعوض البادئة Prefix
و هنا لا يكون لدينا مشكل و إضافاتنا ستثبت على قواعد بيانات تابعة لجملة و تحمل بادئات مختلفة .
نغلق الكلاس و الملف
و يكون الناتج النهائي // الكود نوعا ما 
كود 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', 1 );
$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 = 1 - $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:
<description>Example Component By JoomlaUT</description>
نفتح تعريف التثبيت من جديد
ثم تعريف إنشاء جداول قاعدة البيانات
ثم الجدول رقم 1 و فيه ثلاث حقول
كود PHP:
<query id="1" table="jos_example_message">
CREATE TABLE `#__example_message` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`message` TEXT NOT NULL ,
`published` TINYINT( 1 ) NOT NULL
);
</query>
لاحظوا معي سهولة تثبيت الجداول في قاعدة البيانات من ملف التثبيت XML
أنشأنا الجدول و ثلاثة حقول ،
الأول :
id و قيمته هي الترقيم التلقائي
message و قيمته هي Text لتخزين البيانات
الثالث هو published و قيمته عدد ثابت ذو خيارين فقط و هما 1 و صفر .
الجدول الذي أنشأناه إسمه :
كود PHP:
#__example_message
تابع الدرس و ستعلم الغرض من العلامة
ثم من ملف الـ XML ذاته نضيف الملف التالي لرفعه مع المكون أثناء تثبيته
داخل التعريف
كود PHP:
<administration>
نضيف
كود PHP:
<filename>admin.example.html.php</filename>
<filename>tables/example.php.php</filename>
لاحظ جيدا أن الملف موجود بالمجلد
لذلك كتبناه
كود PHP:
tables/example.php
كي يتم إنشاء مجلد بإسم tables و رفع الملف إليه
أليست جملة رائعة ؟
الآن أعد تثبيت المكون بعد ضغط ملفاته التي أنشأناها و عدلناها اليوم
ثم من لوحة تحكم المكون
إضغط على الزر [جديد]
و لاحظ أنه سيظهر معك المحرر
أضف شيئا ما و إضغط [حفظ]
إذا ظهرت الرسالة
تم الحفظ بنجاح
فإعلم أنك على الطريق الصحيح
و يمكنك التأكد أكثر من قواعد بيانات مجلتك و من الجدول الذي يحمل إسم
لترى إن كان يحمل بيانات أم لا
إنتهى الدرس بفضل الله وحده ، لا شريك له .
و لكم مني خالص الود
* الموضوع الأصلي
* لا زلنا بحاجة لأعضاء جدد بالفريق [مبرمجين و غير مبرمجين]
* الموضوع مفتوح المصدر
* المكون بالمرفقات
* قد لا تكون هذه الدروس للمبتدئين و إنما لتعريف المبرمجين المتقدمين على بيئة جملة