السلام عليكم ورحمة الله وبركاته..
اعزائي هذا مثال بسيط جدا لفكرة عمل النيف بار
نظرا لطلب اخي العضو the net lion لعمل مثال عن النيف بار في هذا الموضوع
أحببت ان اطرحه في موضوع مستقل لكي يستفيد منه الجميع
وقمت بالشرح عمل وفائدة كل سطر في المصدر.. اعتقد انه افضل طريقة لكي لا يتوه الكثير بين الشيفره والشرح
اولا نقوم بزرع الجدولين التاليين
الاول للاقسام والثاني للمقالات
ويمكنك تطويرها كما تريد ومع اي جدول تريده سواء كان اخبار او مقالات او منتجات
جدول الاقسام
كود:
CREATE TABLE IF NOT EXISTS `categories` (
`cat_child_id` int(11) NOT NULL auto_increment,
`cat_parent_id` int(11) NOT NULL default '0',
`cat_name` varchar(50) NOT NULL,
PRIMARY KEY (`cat_child_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
INSERT INTO `categories` (`cat_child_id`, `cat_parent_id`, `cat_name`) VALUES
(1, 0, 'tech'),
(2, 1, 'programming'),
(3, 2, 'web developing'),
(4, 3, 'php'),
(5, 4, 'tutorials'),
(6, 5, 'advanced');
وجدول المقالات
كود:
CREATE TABLE IF NOT EXISTS `articles` (
`art_id` int(11) NOT NULL auto_increment,
`art_cat_id` int(11) NOT NULL,
`art_title` varchar(50) NOT NULL,
`art_content` text NOT NULL,
PRIMARY KEY (`art_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
INSERT INTO `articles` (`art_id`, `art_cat_id`, `art_title`, `art_content`) VALUES
(1, 6, 'how to create a class', 'bla bla bla bla..........!');
وبعد ذلك ملف ال php
كود PHP:
<?php
/*
Tutorial made by DeaDSouL (Mubarak Alrashidi)
لا تنسوني من صالح وخالص دعائكم
لك مطلق الحريه لاستخدامها كما تريد او التعديل عليها
*/
// الاتصاب بقاعدة البيانات
$conn = mysql_connect("localhost", "root", "")or die ('cannot connect to the database. error: ' . mysql_error());
$db_selected = mysql_select_db("mw_test", $conn);
// استعلام عن الاقسام
$sql_cat = mysql_query("SELECT cat_child_id, cat_parent_id, cat_name FROM categories");
// التأكد من الجدول ليس خالي
// اذا كان الجدول خالي
if (mysql_num_rows($sql_cat) < 1) die('no categories yet');
// ان لم يكن خالي نقوم بتخزين القيم
while($rows = mysql_fetch_object($sql_cat))
{
// نقوم بتخزين القيم في المصفوفتين التاليتين
// مفهرستان برقم معرف الاقسام
$cats_title[$rows->cat_child_id] = $rows->cat_name; // اسم القسم
$cats_parent_id[$rows->cat_child_id] = $rows->cat_parent_id; // رقم معرف القسم الذي ينتمي له القسم الحالي
}
// دالتنا التي ستقوم بعمل النيفبار
// تحتوي على باراميتر واحد وهو رقم القسم
Function check_cats_nav($id='')
{
// ان كان رقم القسم فاضي نقوم بارجاع قيمة false
If(Empty($id)) Return False;
// نقوم باستدعاء وتعريف بعض المتغيرات التي ستفيدنا
Global $cat_nav, $cats_title, $cats_parent_id;
// نقوم بفرز مصفوفة $cats_title لاستخراج رقم المعرف والاسم
ForEach($cats_title As $cat_id => $title)
{
// نضع شرط مفاده ان القسم الذي تم تمريره للداله ليس قسم رئيسي
// وكذلك ان رقم المعرف الذي تم تمريره للداله يساوي رقم معرف القسم الذي تم فرزه
If($cat_id==$id && $id!=0)
{
// نقوم بتخزين رابط واسم القسم في المصفوفه التاليه
$cat_nav[] = "<a href=\"?cat_id=$cat_id\">$title</a> → ";
// نقوم باستدعاء الداله مرة اخرى مع تمرير رقم القسم الذي ينتمي اليه رقم القسم الذي سبق لنا ومررناه للداله
// ولذلك للتأكد من ان القسم الام لا ينتمي لاي قسم اخر اي انه قسم رئيسي والا نعيد عملية مرة اخرى حتى نصل الى اخر قسم رئيسي
check_cats_nav($cats_parent_id[$cat_id]);
}
}
}
// الان نقم بالاستعلام عن رقم المقاله التي طلبها الزائر ولتكن 1
// ?art_id=1
// نقوم بتخصيص متغير لرقم المقاله
$art_id = (int) $_GET['art_id'];
// نقوم بتجهيز الاستعلام
$sql_art = mysql_query("SELECT art_cat_id, art_title, art_content FROM articles WHERE art_id=$art_id");
// اذا كان الجدول خالي او لا يحتوي على الرقم المطلوب
if (mysql_num_rows($sql_art) < 1) die('article`s id wrong');
// نقوم بتخزين قيم المقاله
$rows = mysql_fetch_object($sql_art);
// نخصص متغير لرقم القسم الذي تنتمي اليه المقاله
$art_cat_id = $rows->art_cat_id;
// نخصص متغير عنوان المقاله
$art_title = $rows->art_title;
// نخصص متغير لمحتوى المقاله
$art_content = $rows->art_content;
//نتأكد اولا ان القسم الذي تنتمي ايه المقاله هو قسم رئيسي ام فرعي
// اذا كان قسم رئيسي فلا داعي لاستدعاء الداله
if($cats_parent_id[$art_cat_id]==0)
{
$cat_nav = "<a href=\"?cat_id=$art_cat_id\">".$cats_title[$art_cat_id]."</a>";
}
// اما ان كان قسم فرعي فنقوم باستدعاء الداله
else
{
// نقوم اولا يتخزين القسم الذي ينتمي اليه المقاله المراد عرضها
$cat_nav[] = "<a href=\"?cat_id=$art_cat_id\">".$cats_title[$art_cat_id]."</a> → ";
// بعد ذلك نقوم باستدعاء الداله مع تمرير رقم القسم الذي ينتمي اليه القسم الحالي
check_cats_nav($cats_parent_id[$art_cat_id]);
// نقوم تجهيز متغير اخر
$cat_nav2=(string)'';
// نقوم بعملية تكرار عكسيه للمصفوفه
// ولا نستطيع استخدام دالة عكس المصفوفه لان الفهرسه قد تحتوي على ارقام صغيره وكبيره.. وبالتالي لن تعطينا ترتيب صحيح
For($i=count($cat_nav); $i>=0; $i--) $cat_nav2.=$cat_nav[$i];
// اخيرا نقوم تجهيز المتغير الاساسي ونضيع اليه عنوان المقاله التي نتصفحها حاليا
$cat_nav = $cat_nav2." <a href=\"?art_id=$art_id\">$art_title</a> ↓";
}
// واخيرا نقوم بعرض النيف بار
echo $cat_nav;
// ثم نعرض البيانات الاخرى.. في حالتنا سنقوم بعرض عنوان ومحتوى المقاله
echo "<hr /> <h3>$art_title</h3> <p>$art_content</p>";
?>
او يمكنك تحميل الملف من المرفقات
وبالتوفيق للجميع