• 1405/08/16

پیاده سازی سرویس ماژول تبلیغات :

سلام و احترام خدمت استاد و همه دوستان 

بنده در پروژه خودم سرویس مربوط به Ad را به این صورت پیاده سازی کرده ام. کدها چون زیاد بودن کل لینک پروژه را میزارم. (سرویس - ریپوزیتوری - ویومدل ها - کانفیگ ها - کنترلر ها - ویو ها و ...)

https://riazikade.com/AddZone%20-%20Copy.rar

فقط چند نکته این که :
1 - ماژول AdZone را کامل حذف کرده ام و از Enum استفاده کرده ام :

public enum AdZoneEnum
{
    [Display(Name = "پایین هدر صفحه اصلی")]
    BottomOfHeaderHomePage = 1,

    [Display(Name = "سمت چپ اسلایدر صفحه اصلی")]
    LeftOfSliderHomePage = 2,


    [Display(Name = "پایین اسلایدر صفحه اصلی")]
    BottomOfSliderHomePage = 3,


    [Display(Name = "وسط صفحه اصلی")]
    CenterHomePage = 4,


    [Display(Name = "بالای فوتر صفحه اصلی")]
    TopOfFooterHomePage = 5

}

 

 

2 - حذف اسلاید ها به صورت حذف سخت هست. (از BaseEntity ارث بری نشده)

        public void Delete(Ad ad)
        {
            _context.Remove(ad);
        }

 

 

3 - یک ویوکامپوننت کلی (AdBoxViewComponent) برای مدیریت همه ی محل های تبلیغاتی ساخته شده

(ارسال پارامتر AdZoneEnum  به کامپوننت)

namespace ShopStock.Web.Components
{
    public class AdBoxViewComponent : ViewComponent
    {
        private readonly IAdService _adService;
        public AdBoxViewComponent(IAdService adService)
        {
            _adService = adService;
        }


        public async Task<IViewComponentResult> InvokeAsync(AdZoneEnum adZone)
        {

            List<AdItemForFrontViewModel> ads = await _adService.GetAdsByAdZoneForFrontAsync(adZone);

            return View(ads);
        }
    }
}

 

 

4 - تبدیل تاریخ های شمسی به میلادی و میلادی به شمسی با استفاده از جاوااسکریپت و در ویو صورت میگیره
(رفرنس ها و کدهای جاوااسکریپتی قسمت پایین ویوهای create و edit ماژول Ad)

 

5 - کلیک روی هر بنر شمارش میشه
(فایل Default.cshtml کامپوننت AdBoxViewComponent ---  فایل custom.js قالب - اکشن TrackAdClick در کنترلر Home  و در ادامه سرویس Ad )
 

// شماره تعداد کلیک های بنرهای تبلیغاتی
[HttpPost]
public async Task<IActionResult> TrackAdClick(int adId)
{
    await _adService.RecordClickAsync(adId);
    return Ok();
}

 

ثبت کلیک یک  آپدیت مستقیم در دیتابیس ایجاد میکنه و هیچ داده ای از دیتابیس واکشی نمیشه.

 // ViewCount Field
 public async Task IncrementClickCountAsync(int adId)
 {
     await _context.Ads
         .Where(a => a.Id == adId)
         .ExecuteUpdateAsync(s => s.SetProperty(a => a.ViewCount, a => a.ViewCount + 1));
 }

 

6 - قسمت کامپوننت مربوط به بنر ها میتونه تو مموری کش قرار بگیره.

 

با تشکر.

 

  • 1405/08/16
  • ساعت 08:54

ممنون وحید جان 

خیلی عالی ساختی و میزارم تو پروژه