PDA

View Full Version : سوال در مورد موضوعات و زیر موضوعات



persian-boy
جمعه 19 اسفند 1390, 14:32 عصر
سلام دوستان

من میخوام قسمت دسته بندی هارو ایجاد کنم .

هنوز جدول مربوط رو نساختم . به نظر شما جدول مربوط به دسته بندی ها چطور باید باشه ؟
برای موضوع ها و زیرموضوع ها جدولی جدا باشه یا همگی در یک جدول باشن ؟

اگر امکانش هست بگید جدول رو به چه فرمی بسازم و یک نمونه کد برای لیست کردن موضوعات و زیر موضوعات به صورت زیر هم ( با استفاده از جدول خودتون ) قرار بدید .

hightech
جمعه 19 اسفند 1390, 17:01 عصر
شما باید کل موضوعات و زیرموضوعات رو تو یه جدول قرار بدید، اینطوری محدودیت سطح هم ندارید
برای اینکار جدول باید ساختار درختی داشته باشه که برای پیاده سازی اون راههای خیلی متنوعی وجود داره (از جمله محدود سازی شبیه لیست پیوندی)
راحت ترین راه اینه:
جدولی که میسازید همون ساختار عادی رو داره فقط باید یک فیلد والد یا پدر (parent) برای اون تعریف کنید که در اون id گروه پدر مشخص شده
اون گروههایی که ریشه هستن، مقدار parent صفر هست (بستگی به ساختار داره)
برای درست کردن لیست درختی هم باید از توابع بازگشتی استفاده کنید
یک نمونه ساده از این روش اینجا (http://stackoverflow.com/a/4844073) وجود داره

persian-boy
شنبه 20 اسفند 1390, 12:15 عصر
ممنون

از اون لینک چیزی متوجه نشدم :دی

hightech
شنبه 20 اسفند 1390, 12:28 عصر
از اون لینک چیزی متوجه نشدم :دی
نکنه کد آماده میخواید؟!؟!:متفکر:

persian-boy
شنبه 20 اسفند 1390, 19:53 عصر
نه دوست عزیز ، کد آماده به دردم نمیخوره

توضیح میخوام اگر امکانش باشه

hightech
شنبه 20 اسفند 1390, 23:25 عصر
ساختار اشیاءتون به این صورت میتونه باشه:
id,name,parent,etc
که etc سایر فیلدهای دلخواه هست
id ترتیب خودش رو داره که همون کلید اصلی هست
نام مشخصه و parent یا والد که میشه گفت یه کلید خارجی هست به id همین جدول
به این صورت که اگر گروه، یه گروه ریشه باشه و زیر مجموعه کسی نباشه parent صفر هست
اما اگه والد داشته باشه، id اون گروه توی parent قرار میگیره
مثلا اگه گروه a شناسه 1 داشته باشه و خودش ریشه باشه، فیلد والد مقدارش صفره
حالا گروه aa با شناسه 2 رو در نظر بگیرید که زیر مجموعه a هست، فیلد والد این گروه 1 میشه
اگه بخواید یه شاخه دیگه زیر aa بسازید باز شناسه aa رو بجای والد اون گروه جدید قرار بدید
کاشکی میتونستم براتون نقاشی کنم

farhadfery
شنبه 20 اسفند 1390, 23:31 عصر
سلام. من منطق این تابع
function categoriesToTree(&$categories) {
را نمی فهمم. می شه توضیح بدید؟ مخصوصا این بخشش را:

foreach ($categories as &$category) {
$category['subcategories'] = array();
$map[$category['id']] = &$category;
}

hightech
شنبه 20 اسفند 1390, 23:52 عصر
می شه توضیح بدید
این تابع، یه کمی پیچیدگی داره (برای واکشی البته)
ولی به این صورت هست که کل ساختار درختی رو توی متغیر map قرار میده
در حلقه اول

foreach ($categories as &$category) {
$category['subcategories'] = array();
$map[$category['id']] = &$category;
}
همونطور که میبینید، به هر گروه، فیلد جدید subcategories یا همون زیرگروهها رو اضافه کرده که یک آرایه خالی هست و اون گروه رو به map اضافه کرده
توی حلقه دوم، کار اضافه کردن زیرگروهها به فیلد subcategories انجام میشه

foreach ($categories as &$category) {
$map[$category['parent']]['subcategories'][] = &$category;
}
به این صورت که میاد هر گروه رو به آرایه ای [از map] اضافه میکنه که اندیس اون parent یا والد گروه فعلی باشه
دقت کنید که فیلد subcategories یک آرایه هست و اندیسهای اون، idهای گروههای موجوده
برای همین، هر گروهی که میخونه، والدش توی آرایه map وجود داره (بجز 0)
بهمین راحتی ساختار درختی رو میسازه (درسته انعطاف پذیر نیست اما خیلی راحته)

farhadfery
یک شنبه 21 اسفند 1390, 00:12 صبح
شما خوب توضیح دادید. ممنون. من نمی فهمم!

function categoriesToTree(&$categories) {

این $categoreis یه آرایه خالییه؟ که بهد لیست گرو ها تو اون قرار می گیره؟ یا قبلا لیست گروه ها (با یه کویری در اون قرار گرفته ) و تو این تابع مرتب می شند؟

hightech
یک شنبه 21 اسفند 1390, 00:23 صبح
چه حرفیه میزنید، اشکال از توضیح منه هر جاش رو متوجه نشدید بگید سعی میکنم بهتر توضیح بدم

categories چند خط بالاتر تعریف شده:

$categories = array(
array('id' => 1, 'parent' => 0, 'name' => 'Category A'),
array('id' => 2, 'parent' => 0, 'name' => 'Category B'),
array('id' => 3, 'parent' => 0, 'name' => 'Category C'),
array('id' => 4, 'parent' => 0, 'name' => 'Category D'),
array('id' => 5, 'parent' => 0, 'name' => 'Category E'),
array('id' => 6, 'parent' => 2, 'name' => 'Subcategory F'),
array('id' => 7, 'parent' => 2, 'name' => 'Subcategory G'),
array('id' => 8, 'parent' => 3, 'name' => 'Subcategory H'),
array('id' => 9, 'parent' => 4, 'name' => 'Subcategory I'),
array('id' => 10, 'parent' => 9, 'name' => 'Subcategory J'),
);
نیازی نیست که حتما آرایه مرتب باشه، اما توی جدول بهتر هست که ایندکس گذاری بشه و مرتب باشه بر اساس id و parent