PDA

View Full Version : سوال: امکان اضافه کردن زیرشاخه های نامحدود در وب سایت



bahar_engineer
پنج شنبه 19 تیر 1393, 13:05 عصر
سلام
در طراحی یک فروشگاه با محصولات فوق العاده متنوع چطور باید برنامه نویسی کرد تا مدیر سایت امکان درج گروه های مختلف با زیرگروه های متفاوت رو داشته باشه ؟ تعداد زیرگروه ها و زیرشاخه های محصولات اصلا مشخص نیست و بسته به هر گروهی متفاوت است. برای مثال ممکنه یک گروه دیجیتال 4 زیرگروه داشته باشه و هر زیرگروه بصورت مجزا هر کدوم چندین زیرگروه داشته باشن. من به عنوان برنامه نویس چطور باید این کارو انجام بدم؟ دینامیک بذارم زیرگروه اضافه کنه ؟ گنگه قضیه ... لطفا راهنمایی کنید.

nice_boy_a
پنج شنبه 19 تیر 1393, 13:24 عصر
سلام. خیلی راحت می تونی انجام بدی! شما از ساختار پدر فرزندی استفاده کن.

ali.monje
پنج شنبه 19 تیر 1393, 13:34 عصر
من یه بار برا یدونه زیر مجموعه اینطور کاری کردم با یکم بهبود میتونی کاری که میخوای بکینی

تو پایگاه داده برای جدول دسته بندی هات مثلا به این شکل طراحی میکنی :
1) آی دی 2) نام دسته 3) دسته مادر

دسته مادر رو از نوع int میگیری و اگه خودش دسته مادر بود مقدار صفر میدی و اگه زیر دسته بود آیدی دسته مادرش رو از همین جدول میذاری.
موقعی هم که میخوای نشون بدی برای بدست آوردنشون دو تا حلقه میسازی تا وقتی مقدار دسته مادر صفر هست حلقه اصلی اجرا میشه و وقتی دسته مادر غیر صفر بود میره فرزندان رو پیدا مکینه


public string childgroup(int a)
{
string child = "";
SqlDataAdapter da = new SqlDataAdapter("select id,group_title from groups where root=@root", cs);
da.SelectCommand.Parameters.Add("@root", a);
DataTable te = new DataTable();
da.Fill(te);
if (te.Rows.Count > 0)
{
for (int i = 0; i < te.Rows.Count; i++)
{
child = child + te.Rows[i]["group_title"].ToString() + ",";
childid = childid + te.Rows[i]["id"].ToString() + ",";
}
return child;
}
else
{
return child;
}


}
public void rootgroup()
{
SqlDataAdapter da = new SqlDataAdapter("select id,group_title from groups where root=0", cs);
DataTable te = new DataTable();
da.Fill(te);
if (te.Rows.Count > 0)
{
Response.Write("<ul class=" + "menu" + ">");
for (int i = 0; i < te.Rows.Count; i++)
{
string allchild = childgroup(Convert.ToInt32(te.Rows[i]["id"]));
if (allchild != "")
{
Response.Write("<li class=" + "nav" + "><a href=\"/category.aspx?cat=" + te.Rows[i]["id"].ToString() + "\"" + "title=\"" + "مطالب در گروه " + te.Rows[i]["group_title"] + "\">" + te.Rows[i]["group_title"] + "</a>");
Response.Write("<ul>");
string[] child = allchild.Split(',');
string[] child_id = childid.Split(',');
int child_id_i = 0;
foreach (string str in child)
{
if (str != "")
{
Response.Write("<li><a href=\"/category.aspx?cat=" + child_id[child_id_i].ToString() + "\"" + "title=\"" + str + "\">" + str + "</a></li>");
child_id_i++;
}
}
childid = "";
Response.Write("</li>");
Response.Write("</ul>");
}
else
{
Response.Write("<li><a href=\"/category.aspx?cat=" + te.Rows[i]["id"].ToString() + "\"" + "title=\"" + "مطالب در گروه " + te.Rows[i]["group_title"] + "\">" + te.Rows[i]["group_title"] + "</a></li>");
}
}
Response.Write("</ul>");
}
}

rafiee.mostafa64
پنج شنبه 19 تیر 1393, 18:57 عصر
میتونی توی دیتابیست میتونی به طور مثال به صورت زیر یک table تعریف کنی که تمامی گروه ها و زیر گروه هارو شامل بشه

id
name
parentid
و یه ریلیشن از parentid به id داشته باشی در واقع کلید اصلی وخارجی هر دو داخل خود همون table وجود داره
امیداروم متوجه منظورم شده باشی اگه متوجه نشدی بازم توضیح بدم