PDA

View Full Version : ساخت منو و زیر منو پیشرفته در asp



mo7300
چهارشنبه 26 اردیبهشت 1397, 01:26 صبح
سلام
یه سیستم منو میخوام مانند منو سایت دیجی کالا
اگه کسی میتونه کمک کنه هم جداول بانک اطلاعاتی و هم کد نویسی کامل asp

336699
چهارشنبه 26 اردیبهشت 1397, 01:45 صبح
سلام
یه سیستم منو میخوام مانند منو سایت دیجی کالا
اگه کسی میتونه کمک کنه هم جداول بانک اطلاعاتی و هم کد نویسی کامل asp
فقط کد نویسی بهینه باشه
پیشنهاد اول
۵۰۰ هزار تومان در ۳ روز :لبخند:

mo7300
چهارشنبه 26 اردیبهشت 1397, 21:11 عصر
پیشنهاد اول
۵۰۰ هزار تومان در ۳ روز :لبخند:
فکر نمیکنم زیاد پیچیده باشه که اینقدر هزینه بر باشه
به راهنمایی ساده میخواستم
مخصوصا در مورد فراخوانی زیر منو ها از دیتابیس

ghossein
چهارشنبه 02 خرداد 1397, 14:11 عصر
مدل دیتابیس :
public partial class Menus {
public int MenuId { get; set; }
public string MenuName { get; set; }
public string MenuCaption { get; set; }
public string MenuController { get; set; }
public string MenuAction { get; set; }
public Nullable<int> ParentMenuId { get; set; }
public string MenuIcon { get; set; }
public string MenuType { get; set; }
public string MenuDescription { get; set; }

}

کدنویسی :
داخل کنترلر مورد نظر (به عنوان مثال اسم کنترلر باشه Layout)یه اکشن متد بسازید به نام Menu به اینصورت :


[ChildActionOnly]
public ActionResult Menu()
{
var menu = GetTreeMenus();
return PartialView(menu);
}


public class TreeMenu
{
public int id { get; set; }
public string label { get; set; }
public string action { get; set; }
public string controller { get; set; }
public int? parentid { get; set; }
public IList<TreeMenu> items { get; set; }
}



public IList<TreeMenu> GetTreeMenus()
{
var Menus = _menus.Where(x => x.ParentMenuId == null).ToList();
List<TreeMenu> tree = new List<TreeMenu>();
foreach(var m in Menus)
{
var node = new TreeMenu
{
id = m.MenuId,
label = m.MenuCaption,
controller = m.MenuController,
action = m.MenuAction,
parentid = m.ParentMenuId,
items = GetChildren(m.MenuId)
};
tree.Add(node);
}
return tree;
}




public List<TreeMenu> GetChildren(int id)
{
var Menus = _menus.Where(x => x.ParentMenuId == id).ToList();
List<TreeMenu> tree = new List<TreeMenu>();


foreach (var m in Menus)
{
var node = new TreeMenu
{
id = m.MenuId,
label = m.MenuCaption,
controller = m.MenuController,
action = m.MenuAction,
parentid = m.ParentMenuId,
items = GetChildren(m.MenuId)
};
tree.Add(node);
}
return tree;
}




view که میسازید از نوع PartialView باشه :

@model IList<TreeMenu>

@ShowTree(Model)


@helper ShowTree(IList<TreeMenu> menus)
{
<ul>
@foreach (var m in menus)
{
if (m.items.Count == 0)
{
<li>
@if (!string.IsNullOrEmpty(m.action) && !string.IsNullOrEmpty(m.controller))
{
<span>@Html.ActionLink(m.label, m.action, m.controller)</span>
}
else
{
<span>@m.label</span>
}
</li>
}
else if(m.items.Count > 0)
{
<li class="parent">
<div>
@if (!string.IsNullOrEmpty(m.action) && !string.IsNullOrEmpty(m.controller))
{
<span>
@Html.ActionLink(m.label, m.action, m.controller)
</span>
}
else
{
<span>@m.label</span>
}
<span class="downIcon ion-chevron-right ico8"></span>
</div>
@ShowTree(m.items)
</li>
}
}
</ul>
}




آخر سر هم باید یه جا این اکشن متذ رو فراخوانی کنید مثلا توی ویوی نمایش محصولات :

<div id="menu">@Html.Action("Menu", "Layout")</div>

Iran58
پنج شنبه 18 مرداد 1397, 09:46 صبح
سلام
مهندس عزیز حال اگر بخواهیم هنگام نمایش فقط عناوین اصلی نمایش داده شوند و هنگام کلیک زیر مجموع آن نمایش داده شود چکار باید کرد
باتشکر

میلاد رئیسی
پنج شنبه 18 مرداد 1397, 09:56 صبح
سلام
مهندس عزیز حال اگر بخواهیم هنگام نمایش فقط عناوین اصلی نمایش داده شوند و هنگام کلیک زیر مجموع آن نمایش داده شود چکار باید کرد
باتشکر

سلام . دوست گرامی شما میبایست مباحث ajax و جاوا اسکریپت رو در وب مطالعه کنید . چون تا جایی که من چند روزه در سایت برنامه نویس چرخ میزنم سوالاتتون در خصوص ضعف از جاوا اسکریپت هستش .

یه راهنمایی در خصوص این که مواردی مثل منو یا لینک های فوتر یا مواردی که زیاد تغییری ندارن و از دیتابیس فراخوانی میشن بهتون بکنم که میبایست این موارد در مرورگر کلاینت کش بشن و هر یک ساعت یا یک روز یا بستگی به خودتون داره فراخوانی بشه در غیر این صورت با هر بار رفرش صفحه باید این موارد از دیتابیس خونده بشه که سرعت لود سایت میاد پایین و تعداد درخواست های کاربر به دیتابیس میره بالا . :چشمک:

Iran58
پنج شنبه 18 مرداد 1397, 10:01 صبح
سلام . دوست گرامی شما میبایست مباحث ajax و جاوا اسکریپت رو در وب مطالعه کنید . چون تا جایی که من چند روزه در سایت برنامه نویس چرخ میزنم سوالاتتون در خصوص ضعف از جاوا اسکریپت هستش .

یه راهنمایی در خصوص این که مواردی مثل منو یا لینک های فوتر یا مواردی که زیاد تغییری ندارن و از دیتابیس فراخوانی میشن بهتون بکنم که میبایست این موارد در مرورگر کلاینت کش بشن و هر یک ساعت یا یک روز یا بستگی به خودتون داره فراخوانی بشه در غیر این صورت با هر بار رفرش صفحه باید این موارد از دیتابیس خونده بشه که سرعت لود سایت میاد پایین و تعداد درخواست های کاربر به دیتابیس میره بالا . :چشمک:
سلام
و باتشکر
مهندس منظورم فراخوانی اطلاعات نیست میخواهم در لود اولیه فقط عناوین اصلی نمایش داده شود وبعد کلیک کرد کاربر زیرمجموعه ان باز شود

میلاد رئیسی
پنج شنبه 18 مرداد 1397, 11:05 صبح
میدونم . من یه قدم جلو تر رو گفتم .

برای این کار باید همه موراد رو فراخوانی کنی ولی با استفاده از جاوا اسکریپت و css فقط عنوان ها رو نمایش بدی بعد در رویداد کلیک عناوین متد نمایش زیر مجموعه ها رو بنویسی

ghossein
پنج شنبه 18 مرداد 1397, 12:32 عصر
سلام
برای مثال بالا :

$("div#menu ul li div").click(function () {
var parent = $(this).parent();
var status = $(parent).attr('class');
if (status === 'parent') {
$(parent).find("ul").show();
$(parent).removeClass("parent");
$(parent).addClass("expand");
}
if (status === 'expand') {
$(parent).find("ul").hide();
$(parent).removeClass("expand");
$(parent).addClass("parent");
}
});

Iran58
پنج شنبه 18 مرداد 1397, 13:23 عصر
سلام
برای مثال بالا :

$("div#menu ul li div").click(function () {
var parent = $(this).parent();
var status = $(parent).attr('class');
if (status === 'parent') {
$(parent).find("ul").show();
$(parent).removeClass("parent");
$(parent).addClass("expand");
}
if (status === 'expand') {
$(parent).find("ul").hide();
$(parent).removeClass("expand");
$(parent).addClass("parent");
}
});
باسلام وسپاس از جوابتان
الف)اگر بخواهیم وقتی صفحه لود میشود داده ها جمع باشند(فقط عنوان اصلی باشد وکلیک کردیم دادهای فرزند نمایش داده شوند)چه کدی باید نوشت
ب) این چگونه می توانیم تبدیل به منو آکاردئوی(accordion) نه کشوی کنیم
باتشکر

ghossein
پنج شنبه 18 مرداد 1397, 16:18 عصر
سلام
کدهای css مثال بالا هم به این صورت میشه :

div#menu ul li a{ color:#f5faff;
text-decoration: none;
display: block;
padding-right: 10px;
}
div#menu ul li div {padding-right: 10px; }


div#menu ul li {
color: #f5faff;
font-family: 'IRANSans';
font-weight: 200;
font-size: 10pt;
line-height: 30px;
text-align: right;
background-color: #1f242a;
border-bottom: 1px solid #242b32;
}
div#menu ul li.expand:hover {
text-align: right;
background-color: #1f242a;
border-right: none;
color: #89ff8f !important;
}
div#menu ul li a:hover ,div#menu ul li div:hover{
text-align: right;
background-color: #414141;
border-right: 2px solid #89ff8f;
color: #89ff8f !important;
}
div#menu ul li:last-child{
border-bottom: none;
}
div#menu ul li ul{
display: none;
}
div#menu ul li ul li{
background-color: #222222;
border-bottom: none;
}