View Full Version : دسته و زیر دسته ها و طریقه نمایش محصولات هر دسته
rahahost
یک شنبه 16 آذر 1393, 18:45 عصر
سلام خدمت دوستان
در مورد دسته ها و زیر دسته ای هر دسته سوالی بپرسم که انشالله مثله سوالهای قبلیم بی جواب نمونه !
میخوام برای دسته های محصولاتم زیر دسته تعریف کنم که هر زیر دسته هم برای خودش زیر دسته هایی داره ( محدودیتی نداره و این ممکنه تا ۱۰ مرحله زیر دسته داشته باشه )
و اما سوال :
چطوری میتونم دسته ها و زیر دسته هارو به شکل درختی مرتب کنم ؟
دقیقا مثله وردپرس ( در بخش دسته ها اگر دقت کنید) ، اگر هم ندیدید ، ترتیب چینش دسته ها به شکل زیر هست :
خودرو
_ پراید
_سمند
__ سمند ال اکس
__ سمند طرح جدید
____ سمند طرح جدید با ایربک
____ سمند طرح جدید بدون ایربک
__ سمند ملی
____سمند ملی تیب ۱
____ سمند ملی تیپ ۲
در هر مرحله از زیر دسته ها ( زیر دسته ای که عضو دسته ی دیگه هست ) یک علامت آندرلاین ( _ ) قرار داره که مشخص کننده دسته و زیر دسته های اون هست .
سوال دوم : گفتیم هر دسته ، زیر دسته هایی داره !
اگر فرضا ما بخوایم محصولات دسته ” سمند ملی” رو نمایش بدیم ، باید محصولاتی که در زیر مجموعه ی اون هم هست به نمایش در بیاد مگر اینکه بخوایم محدود کنیم که فقط محصولات زیر دسته “سمند ملی تیپ ۲″ نمایش داده بشه .
برای این مورد هم اگر راهنماییم کنید ممنون میشم .
لطفا این مورد رو برام همراه با نمونه مثال بزنید تا بتونم مشکل رو حل کنم http://php4you.ir/wp-includes/images/smilies/icon_smile.gif
rahahost
دوشنبه 17 آذر 1393, 21:07 عصر
فکر نکنم جوابی از این سوال بگیرم ( مثله سوالات دیگه ! )
کسی هست بتونه کمک کنه که این پکیج رو چطوری میشه استفاده کرد :
https://github.com/lazychaser/laravel-nestedset
MRmoon
سه شنبه 18 آذر 1393, 15:25 عصر
منظورتون نصبشه؟ اگه آره که کافیه یه خط دستور بنویسین (تو ترمینال، cmd یا ...)
rahahost
چهارشنبه 19 آذر 1393, 18:15 عصر
منظورتون نصبشه؟ اگه آره که کافیه یه خط دستور بنویسین (تو ترمینال، cmd یا ...)
ممنون از جوابتون اما نه ، منظورم نصبش نیست ، طریقه استفاده از این پکیج هست .
پکیج دیگه ای هم پیدا کردم که فکر کنم این بهتر باشه :
https://github.com/etrepat/baum
یه سری نمونه ها نوشته که من نمیفهمم چطور باید ازش استفاده کرد
من دسته و زیر دسته رو تونستم با این دستور ذخیره کنم :
$root = Category::create(['name' => 'Root category']);
کلا میشه این پکیج رو برام توضیح بدید که چطور میتونم محصولاتی که تو هر دسته هست رو نمایش بدم و اگه اون دسته ، زیر دسته داشت ، محصولات زیر دسته هاشم نمایش بدم ؟
ممنونم .
rahahost
چهارشنبه 19 آذر 1393, 23:29 عصر
تا به حال با این پکیج کار کردین ؟
https://github.com/etrepat/baum
میدونید چطور میتونم خروجی مرتب شده بر اساس دسته و زیر دسته ( درختی ) بگیرم ازش ؟
مثله وردپرس :
<ul class="task-list">
<li>Electronics
<ul class="task-list">
<li>TV & Home Theater</li>
<li>Tablets & E-Readers</li>
<li>Computers
<ul class="task-list">
<li>Laptops
<ul class="task-list">
<li>PC Laptops</li>
<li>Macbooks (Air/Pro)</li>
</ul>
</li>
<li>Desktops</li>
<li>Monitors</li>
</ul>
</li>
<li>Cell Phones</li>
</ul>
</li>
<li>Health Fitness & Beaty</li>
<li>Small Appliances</li>
<li>Major Appliances</li>
</ul>
و برای نمایش محصولات هر دسته بطوری که محصولات زیر دسته هاشم نمایش بده رو به چه شکل باید کدم رو بنویسم ؟
rahahost
پنج شنبه 20 آذر 1393, 20:29 عصر
اضافه کردن دسته و زیر دسته درون این پکیج فوق العاده آسونه اما متاسفانه خروجی گرفتن ازشو نفهمیدم !
مثلا اگه به این شکل بنویسم :
$root = Productcategory::all();
var_dump($root->name);
این الان فقط یک خروجی میده :
array(5) {
[13]=>
string(10) "ماشین"
[14]=>
string(11) " سایپا"
[16]=>
string(12) " پراید"
[17]=>
string(14) " زانتیا"
[15]=>
string(22) " ایران خودرو"
}
نمیدونم چطوری خروجی با تک ul و li بگیرم !
مورد دیگه هم محصولات یک دسته و محصولات زیر دسته ها ( کل دسته هایی که در زیر مجموعه این دسته هست ) رو نمایش بدم !
rezakho
سه شنبه 25 آذر 1393, 23:44 عصر
اول یک رابطه یک به چند به خود جدول دسته بندی ها بزنید مثلکد زیر
public function childs()
{
return $this->hasMany('Category','parentId');
}
بعد یک متد استاتیک برای پیمایش درخت مورد نظر می نویسیم، روش کار هم توی پیمایش درخت ها سرچ کنید پیدا می کنید، این متد 3 تا ورودی می گیره، اولی مدل ریشه هست، دومی سطح هست برای نمایش همون _ ابتدا نام شاخه ها و سومی کاراکتر مورد استفاده مثلا - یا _
خروجی متد هم تگ های option برای استفاده در تگ select هست
public static function getNestedForCombo($cat, $level, $delimiter)
{
if(count($cat->childs) > 0)
{
$str = '';
$str .= '<option style="color:red">' . str_repeat($delimiter, $level) . $cat->name . '</option>';
$level++;
foreach($cat->childs as $child)
{
$str .= static::getNestedForCombo($child, $level, $delimiter);
}
return $str;
}
return '<option>' . str_repeat($delimiter, $level) . $cat->name . '</option>';
}
در انتها هم به این شکل استفاده کنید
$cat = Category::find(123);
$optionTags = Category::getNestedForCombo($cat, 0, '_');
$html = '<select>' . $optionTags . '</select>';
rahahost
جمعه 28 آذر 1393, 18:57 عصر
ممنون رضا جان ، لطفت کم نشه از لاراولیا ;)
این مشکل کاملا حل شده ولی یه ایرادی که داره اینه که اگه بخوام همه سته ها و زیر دسته هارو نمایش بدم ، خطا میده ، منظورم با این کوئری هست :
$cat = Productgroup::all();
واسه این راهه حلی داره ؟
و یه مورد مهمتر اینکه اگه بخوام بصورت ul و li های تودر تو همین کارو انجام بدم ، راهه حلی هست ؟
مورد آخر هم اینکه : چطوری میشه خروجی رو صفحه بندی کرد ؟ مثلا اگر یک دسته 500 تا زیر دسته داشته باشه ( فرضا ) خیلی زشت و بد شکل در میاد و حتما باید صفحه بندی داشته باشیم
سعیمو کردم اما متاسفانه نشد !
rezakho
شنبه 29 آذر 1393, 00:21 صبح
نباید خطا بده، چه خطایی میده حالا؟
برای li و ul هم یه کپی از اون متد بگیر و تگ های option رو با li عوض کن
اگر تعداد دسته ها و زیر دسته ها زیاد باشه، روش های دیگه ای باید استفاده کنی و اینا جواب گو نیست، مثلا از treeview استفاده کنی یا از autocomplete یا ...
rahahost
شنبه 29 آذر 1393, 19:28 عصر
نباید خطا بده، چه خطایی میده حالا؟
برای li و ul هم یه کپی از اون متد بگیر و تگ های option رو با li عوض کن
اگر تعداد دسته ها و زیر دسته ها زیاد باشه، روش های دیگه ای باید استفاده کنی و اینا جواب گو نیست، مثلا از treeview استفاده کنی یا از autocomplete یا ...
این خطارو میده :
Undefined property: Illuminate\Database\Eloquent\Collection::$childs
در صورتی که آی دی رو مستقیم میدم ، مشکلی پیش نمیاد !
خروجی ul و li میتونم بگیرم ازش ولی محدود هستش و فقط یه خروجی li دارم که زیر مجموعه نداره
واسه treeview که گفتی ، نمونه داری که بتونم تو لاارول ازش استفاده کنم ؟
من یه کد پیدا کردم اما نتونستم ازش استفاده کنم درون لاراول :
http://stackoverflow.com/questions/13002327/using-recursion-to-build-navigation
خروجی میخوام مثله لینک بالا باشه که زیر دسته هارو درون ul و li بصورت زیر مجموعه های نامحدود نمایش بده .
rezakho
شنبه 29 آذر 1393, 21:35 عصر
آهان !!!
خوب جان برادر، خروجی متد all آرایه هست، شما باید یک مدل رو به اون متد getNestedForCombo بدی نه آرایه ای از مدل ها !
اگر هدفت داشتن همه سردسته ها توی خروجی هست، کار دیگه ای بکن، بیا یک دسته بندی درست کن به نام ریشه، همه سردسته ها رو بگذار زیر مجموعه اش و اونوقت این ریشه رو واکشی کن و بده به getNestedForCombo
rezakho
شنبه 29 آذر 1393, 21:41 عصر
در ضمن
این getNestedForCombo همین متد توی لینک بالاست، کاری که گفتم رو انجام بده درست میشه
rahahost
یک شنبه 30 آذر 1393, 03:22 صبح
ممنون رضا جان .
درسته ، یه آرایه میده و منم با foreach خواستم تک تک آی دی هارو تست کنم که نشد ( این زیاد مهم نیست ) .
روشی که گفتی ( یه دسته اصلی داشته باشم ) رو به فکرم رسیده بود ولی گفتم شاید راهه حله بهتری هم داره !
واسه خروجی یک مرحله ای مشکلی ندارم ( منظورم یک ul و li های درونش هست ) چون کدی که دادی کاملا واضحه ;)
مسئله مهم دسته و زیر دسته های بی نهایت هست ( ul و li های تودرتو ) که تا به اینجا نتونستم حلش کنم .
rezakho
یک شنبه 30 آذر 1393, 17:45 عصر
متدی که بهتون دادم، به صورت بازگشتی تمام زیر دسته ها رو پیمایش میکنه، مشکل جای دیگه هست، متد درسته
یا کد رو دستکاری کردید، و یا اینکه رابطه داده های داخل جدولت صحیح نیست
rahahost
دوشنبه 01 دی 1393, 01:39 صبح
متدی که بهتون دادم، به صورت بازگشتی تمام زیر دسته ها رو پیمایش میکنه، مشکل جای دیگه هست، متد درسته
یا کد رو دستکاری کردید، و یا اینکه رابطه داده های داخل جدولت صحیح نیست
ممنونم رضا جان :x
یه راهنمایی هم بکنی برای قسمت آخر سوالم ، کارم کلا راه میافته :
مسئله مهم دسته و زیر دسته های بی نهایت هست ( ul و li های تودرتو ) که تا به اینجا نتونستم حلش کنم .
rezakho
جمعه 05 دی 1393, 19:07 عصر
سلام
برای نمایش به صورت ul و li هم از این متد استفاده کن
public static function getNestedForList($cat)
{
if(count($cat->childs) > 0)
{
$str = '';
$str .= '<li>' . $cat->name .'<ul>';
foreach($cat->childs as $child)
{
$str .= static::getNestedForList($child);
}
$str .= '</ul></li>';
return $str;
}
return '<li>' . $cat->name . '</li>';
}
و به این شکل هم استفاده کن
'<ul>' . Category::getNestedForList(Category::find(2)) . '</ul>'
به جای عدد 2 هم آی دی ریشه دسته بندی رو بده
rahahost
شنبه 06 دی 1393, 23:13 عصر
خوده خودشهحاج رضای گل ، دمت گرم :x
در مورد صفحه بندی هم که پرسیده بودم ، منظورم اینه :
اگر ما درون جدول دسته ها ، 200 تا دسته داشته باشیم و بخوایم درون مدیریت دسته ( پنل مدیریت ) اونها رو نمایش بدیم ، صفحه خیلی طولانی میشه و الکی کش میاد !
میشه کاری کرد که 10 تا دسته رو نمایش بده و شماره بندی صفحهات داشته باشه ؟ مثلا صفحه دوم از رکورد 10 تا 20 و همینطور تا آخر ؟
یه عکس هم ضمیمه کردم که منظورمو میرسونه :
126959
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.