رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
خواندن و نمایش دسته بندیها از بانک با smarty
#1
من یه جدول categories دارم که شامل چهار فیلد id,parent_id,name,confirmed هست.
حالا میخوام دسته بندیها رو از داخل این جدول بخونم و توی صفحه نشون بدم .
این کد مربوط به بخش php از اسمارتی هست:
$categories_query=  mysql_query("select * from categories WHERE confirmed=1");
$categories_quantity=mysql_num_rows($categories_query);
$categories=array();
$i=0;
while($categories_fetch=  mysql_fetch_array($categories_query)){
    $categories[$i++]=array(
        'id'=>$categories_fetch['id'],
        'name'=>$categories_fetch['name'],
        'parent_id'=>$categories_fetch['parent_id'],
        
    
    );
}
$smarty->assign("categories",$categories);
$smarty->assign("categories_quantity",$categories_quantity);

وتوی فایل tpl هم کدم به این شکله:
        <div class="collapse navbar-collapse" id="main-nav">
            <ul class="nav navbar-nav">
               
                <li class="active"><a href="#">{$categories[0].name}</a></li>
                 {section name=category start=1 loop=$categories}
                 {if !($categories[category].parent_id)}
                <li><a href="#">{$categories[category].name}</a></li>
               
                {/if}
                    {/section}
            </ul>
        </div>
تا اینجا تونستم دسته بندیهایی که زیردسته بندی ندارن رو نمایش بدم اما نمیدونم چطوری میتونم زیردسته بندیها رو نمایش بدم.
ممنون میشم راهنماییم کنید.
پاسخ
تشکر شده توسط:
#2
اول شما در PHP دسته بندی خود را بصورت یک درخت بسازید سپس در smarty با استفاده از یک تابع درخت خود را چاپ کنید.

بهینه ترین حالت اش این است که همان موقع ایی که دارین درخت را می سازین همان موقع یک رشته html تولید کنین تا از دوباره خواندن یک درخت جلوگیری کنید.
پاسخ
تشکر شده توسط:
#3
میشه با مثال، واضح تر توضیح بدید؟ Huh
پاسخ
تشکر شده توسط:
#4
یک نکته رو بهتره توی همه پروژه هاتون رعایت کنید. برای جلوگیری از مصرف دوبرابر حافظه، بجای mysql_fetch_array از mysql_fetch_assoc استفاده کنید. برای درک تفاوتشون، یکبار خروجی هر دو رو با var_dump نمایش بدین.
پاسخ
تشکر شده توسط: f_ghasemianpour
#5
(19-03-1394، 09:14 ب.ظ)ADMIN نوشته: یک نکته رو بهتره توی همه پروژه هاتون رعایت کنید. برای جلوگیری از مصرف دوبرابر حافظه، بجای mysql_fetch_array از mysql_fetch_assoc استفاده کنید. برای درک تفاوتشون، یکبار خروجی هر دو رو با var_dump نمایش بدین.

چقدر جالب، mysql_fetch_assoc خیلی حافظه کمتری مصرف میکنه.ممنون از راهنماییتون.
ولی من هنوز جواب سوالم رو نگرفتم! :(
پاسخ
تشکر شده توسط:
#6
یک مثال ساده میزنم و راه حل را واضح تر می کنم.

شما باید داده های سطری در دیتابیس را به یک آرایه ایی از PHP تبدیل کنید.

مثلا

شناسه : 1
نام : cat1
پدر : 0

شناسه : 2
نام : cat2
پدر : 0

شناسه : 3
نام : cat3
پدر : 1

شناسه : 4
نام : cat4
پدر : 3

خوب اینجا باید ابتدا پدر های اصیل یا ریشه را بدست بیاریم (یعنی اون سطر هایی که مقدار پدر آن ها صفر است)

سپس اون هایی که پدرشان صفر نیست را استخراج می کنیم و بصورت توابع بازگشتی به پدر های آن ها اضافه می کنیم.


مثلا در بالا شناسه 1 و 2 پدر اصیل یا ریشه هستند و به آرایه اضافه می شوند. سپس شناسه های 3 در آرایه جستجو شده و پدر آن یعنی شناسه 1 را میابیم (توابع بازگشتی) و به فرزندان شناسه 1 شناسه 3 افزوده میشه و سپس شناسه 4 را در آرایه جستجو می کنیم و پدر آن شناسه 3 را میابیم و به فرزندان شناسه 3 شناسه 4 را اضافه می کنیم و به همین ترتیب


اینم نمونه مثال

http://www.maheshchari.com/php-nested-ca...sql-query/

http://www.phpclasses.org/package/4947-P...MySQL.html
پاسخ
تشکر شده توسط: abdollah110110




کاربران در حال بازدید این موضوع: 2 مهمان