ساخت دسته بندی چندسطحی به کاربر این امکان را می دهد که لیست دسته بندی مطالب سایت را بصورت پدر و فرزندی ببیند.دسته بندی و زیرشاخه های آن ها به راحتی با ساختار درختی قابل جداسازی است.
نمایه درختی دسته بندی ها همیشه برای نمایش بی نهایت سطح دسته بندی و زیرشاخه, پیشنهاد می شود.
همچنین وجود دسته بندی و تعداد بسیار زیاد زیرشاخه برای سایت های فروشگاهی اهمیت یادگیری این مبحث را چندین برابر می کند.
در این آموزش php , قصد داریم به شما نحوه ساخت دسته بندی با PHP و MySQL به همراه بی نهایت زیرشاخه و بصورت داینامیک را نشان بدیم.
دسته بندی درختی برای ایجاد لیست بی نهایت دسته بندی بصورت آبشاری (dropdown) , بسیار توصیه می شود.
کد php مثال به شما نحوه ساخت دسته بندی با PHP و همچنین زیرمجموعه های آن را نشان می دهد.
داده های دسته بندی ما از طریق دیتابیس MySQL خوانده و بصورت پدر-فرزندی در فرمت دسته بندی درختی نمایش داده می شود.
ساخت جدول دیتابیس
برای ذخیره دسته بندی و زیرشاخه ها, نیاز به ایجاد یک جدول در دیتابیس داریم.
کد SQL زیر جدول categories
را در دیتابیس MySQL ایجاد می کند.
1 2 3 4 5 6 7 8 9 |
CREATE TABLE `categories` ( `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) NOT NULL DEFAULT '0', `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL, `created` datetime NOT NULL, `modified` datetime NOT NULL, `status` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1' COMMENT '1:Active, 0:Inactive', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; |
نکته مهم ما اینجا ستون parent_id
است. این ستون مشخص می کند که آیا دسته بندی این سطر خودش parent (پدر) است یا فرزند (child).
اگر پدر باشد مقدار parent_id
برار با ۰ است. در غیر اینصورت فرزند است و ID پدر آن دسته بندی قرار می گیرد.
اتصال به دیتابیس (dbConfig.php)
این فایل برای اتصال و انتخاب دیتابیس استفاده شده است. مقدار هاست ($dbHost
), نام کاربری($dbUsername
), پسورد ($dbPassword
) و نام ($dbName
) را بر اساس اطلاعات دیتابیس خود تغییر بدید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php // Database configuration // www.Netparadis.com $dbHost = "localhost"; $dbUsername = "root"; $dbPassword = ""; $dbName = "netparadis"; // Create database connection $db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); // Check connection if ($db->connect_error) { die("Connection failed: " . $db->connect_error); } ?> |
تابع بازگشتی PHP برای ایجاد ساختار درختی
تابع categoryTree()
بی نهایت سطح دسته بندی و زیرشاخه را با استفاده از حلقه while ایجاد می کند.
این تابع گزینه های لیست آبشاری را برای درخت دسته بندی ها می سازد.
$parent_id
– اختیاری. آیدی دسته بندی را برای دریافت زیرشاخه های آن مشخص می کند.$sub_mark
– اختیاری. علامتی که قصد داریم قبل نام دسته بندی فرزند اضافه شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php // Include the database configuration file require 'dbConfig.php'; function categoryTree($parent_id = 0, $sub_mark = ''){ global $db; $query = $db->query("SELECT * FROM categories WHERE parent_id = $parent_id ORDER BY name ASC"); if($query->num_rows > 0){ while($row = $query->fetch_assoc()){ echo '<option value="'.$row['id'].'">'.$sub_mark.$row['name'].'</option>'; categoryTree($row['id'], $sub_mark.'---'); } } } |
برای کپی صحیح و کامل کدها ، دابل کلیک کرده تا وارد محیط سفید و کپی شوید در غیر اینصورت امکان دارد اجرای کدها با مشکل روبرو شود
ساخت دسته بندی با PHP (+زیرمجموعه)
از تابع categoryTree()
برای ساخت داینامیک ساختار درختی دسته بندی ها بصورت داینامیک با PHP و MySQL استفاده کردیم.
1 2 3 |
<select name="category"> <?php categoryTree(); ?> </select> |
امیدوارم از آموزش ساخت دسته بندی با PHP بصورت داینامیک و بی نهایت زیرشاخه استفاده مفید را برده باشید.
برای دانلود سورس کد کامل از باکس دانلود زیر استفاده کنید.
هر سوالی داشتید ، از قسمت نظرات ارسال کنید . سریعا ، پاسخگوی سوالات شما هستیم .
موفق و پیروز باشید.
سلام
اینطوری که همه زیر هم دیده میشن
اگر بشه زیر مجموعه یه ذره فاصله داشته باشن از پرنت خیلی عالی میشه
سلام.
این کاررو باید دیگه با css انجام بدید
عالی واقعا ایده رتورن شدن فانشکن در خودش عالی بود
سلام.
یه سوال داشتم در مورد مرتب کردن بر اساس دسته بندی .
مثلا ۳ تا دسته بندی داریم به صورت زیر:
۱:all
۲:child
۳:adult
زمانی که کاربران اطلاعاتشون میفرستن به صورت کلی نمایش داده میشه ولی اگه فقط دسته بندی child نشون داده بشه باید چیکار کرد.مثلا تو سایت دیوار شما بر اساس شهر آگهی میذارید زمانی که آگهی ارسال میشه بر اساس هر شهر میتونیم نتایج ببینیم .
ممنون میشم راهنماییم کنید.
سلام. این آموزش رو ببینید :
https://netparadis.com/city-selection-list-ajax-php/
سلام.
من نیاز به دو تا دسته بندی دارم که به صورت parent و child هست و ابتدا parent انتخاب میشه و بعد از انتخاب parent دسته بندی child ظاهر میشه و کلا به صورت Dropdown button تو نرم افزار استفاده میشه.
ممنون میشم راهنماییم کنید.
سلام. از این آموزش استفاده کنید :
https://netparadis.com/city-selection-list-ajax-php
سلام.
ممنون بابت اطلاعاتی که دادید.
فقط من با فلاتر کار میکنم و این کد مربوط میشه به وب و Ajax
قسمتی که تو فلاتر برای دریافت اطلاعات نیاز هست رو نمیتونم انجام بدم.
سلام.
در زمینه فلاتر بنده نمیتونم راهنمایی کنم باید در php و فلاتر متوسط بلد باشید تا بتونید پیاده سازی کنید
با سلام و احترام
جناب شفیی ممنون بابت این آموزش مفید و کاربردی. بنده طبق آموزش پیش رفتم و همه چی درست هست فقط نمیدونم چطور باید در مگامنو دسته بندی های کلی و در زیرش زیر دسته هارو نمایش بدم. ممنون میشم راهنمایی بفرمایید.
سلام.
خوشحالیم که مفید واقع شده.
این نمایش کاملا بستگی به دانش html css شما داره ولی خب شما میتونید حلقه while رو داخل کدتون قرار بدید و دستی یکبار بدون ساختار خاصی تولید کنید و بعد تگ و کلاس ها را جایگزین کنید
سلام مجدد
ممنون بابت راهنماییون. جناب شفیعی بنده چون مبتدی هستم و در حال حاضر زیاد مسلط نیستم و در حال تمرین هستم، میخواستم اگر ممکنه بنده هزینه اش رو خدمت شما پرداخت کنم و شما زحمت بکشید اون تیکه کد رو برای بنده قبول زحمت کنید. فایل بنده آماده هست و منو آماده هست فقط عرض کردم قبلا که نمیدونم در منو چطور باید تفکیکشون کنم دسته هارو.
سلام. اطلاعات بیشتر خدمتتون ایمیل شد
سلام. دمتون گرم ♥
سلام.
خوشحالیم که مفید واقع شده.
موفق باشید.
سلام
میشه یه روش برای نمایش کاربران در بازاریابی شبکه ای پیشنهاد بدین
سلام.
از همین روش میتونید استفاده کنید که بدون محدودیت زیرشاخه های نامحدود از کاربران را هم می تواند نشان دهد.
موفق باشید.
چطور میتونم حلقه بازگشتیو شمارش کنم
برای نمایشش مشکلی نیست ولی چطور تعدادشو بدست بیارم
داخل حلقه شما باید یک متغییر به عنوان شمارشگر اضافه کنید که با هر بار تکرار حلقه این متغییر یکی به آن اضافه شود و در نهایت مقدار این متغییر رو میتونید استفاده کنید.
مثلا $counter = 0 و داخل حلقه این متغییر رو به اینصورت افزایش بدید : $counter++
موفق باشید.
این کارو انجام دادم ولی چون بازگشتیه به صورت آرایه بر میگردونه مثلا اگه ۷ تا کاربر پیدا کنه به صورته ۷ تا آرایه با مقدار ۱ برمیگردونه
سلام
من یه جدول دارم با تعداد زیادی رکورد که هر کدوم parent id متفاوتی دارن و parent اکثر رکوردها خودش child محسوب میشه، میخوام کاری کنم که از parent id صفر تمام اطلاعات تا مرحله ای که دیگه زیرمجموعه وجود ندارن به صورت درختی نمایش داده بشه و وقتی اخرین آیدی انتخاب شد تمام رکوردهایی که parent id مشابه اون بخش رو دارن تو یه جدول نشون داده بشه.
امیدوارم تونسته باشم منظورم رو منتقل کنم و بتونم از راهنمایی شما استفاده بکنم .
ممنون
سلام. همین آموزش جواب سوال شماست . سورس کد را اماده را مطابق نیاز پروژه خود تغییر بدید.
موفق باشید.
بسم الله الرحمن الرحیم
تشکر می کنم برای آموشهای خوب شما
من یک tableبه نام categoriesساختم با زیر منوهای cat_idوcat_titleوparent_idو کدهایی را که شما برای تابع بازگشتی php برای ساختار درختی قرار دادید را استفاده کردم ولی هیچ کدام از منوها و زیر منوها را در صفحه سایت فراخوانی نمی کند.
اگر راهنمایی بفرمایید تشکر می کنم.
سلام. خوشحالیم که مفید واقع شده.
معادل نام رکورد های جدول شما در این آموزش بصورت زیر است :
cat_id همان id
cat_title هم همان name
است و parent_id هم مشابه است. لطفا این مورد رو در تابع categoryTree لحاظ کنید.
در صورتی که حل نشد دقیق همین سورس کد رو از باکس دانلود دریافت و عینا کدهای آن را استفاده کنید تا خطای کد رو رفع کنید.
موفق باشید.
بسم الله الرحمن الرحیم
تشکر برای ارسال کدها.
امکان دارد بفرمایید در دستور echo چگونه باید
و- و استفاده کنم؟
خواهش می کنم.
به صورت زیر به جای تک کوتشین از دابل کوتیشن بهره ببرید
echo “
“;
امید
بسم الله الرحمن الرحیم
تشکر مجدد برای پاسخگویی شما
امکان دارد بفرمایید در دستور echo چگونه باید از ul و li و a استفاده کنم.
و cat_title را در ul و li و a قرار دهم.
خواهش می کنم.
echo ‘
‘;