abp-CMS模塊-廣告

来源:https://www.cnblogs.com/jionsoft/archive/2020/06/13/13111013.html
-Advertisement-
Play Games

無論是開發app還是網站,可能都需要一個廣告功能,比如我們常見的在首頁有個輪播廣告,裡面會輪播顯示多個圖片。還有比如一個新聞門戶網站 很常見的 banner橫幅廣告,還有js特效廣告等。本篇說說在abp(5.9)中如何實現廣告模塊。 源碼地址:https://gitee.com/bxjg1987/a ...


無論是開發app還是網站,可能都需要一個廣告功能,比如我們常見的在首頁有個輪播廣告,裡面會輪播顯示多個圖片。還有比如一個新聞門戶網站 很常見的 banner橫幅廣告,還有js特效廣告等。本篇說說在abp(5.9)中如何實現廣告模塊。

源碼地址:https://gitee.com/bxjg1987/abp 基於abp一代5.9版
線上演示:http://git.weilaikj.cn/  賬號密碼 admin  123qwe

廣告位

它代表某個頁面上,某個位置,比如:首頁頂部用來放輪播廣告那個位置。再比如:新聞列表頁右側廣告位。廣告位有個名字屬性,還有尺寸相關的屬性

廣告控制項

它是在頁面用來展示廣告的頁面組件定義,比如:圖片輪播控制項。再比如:靜態圖片展示控制項。

這裡的控制項只是定義某個控制項,在資料庫表中就是一條記錄,定義了控制項名、控制項類型(輪播、靜態圖、普通文本)、控制項參數等屬性。前端可以根據這些數據來定義界面。因為可能有不同的前端,就算同樣是pc網站前端,我也無法限制你將來用什麼樣的形式來展現一個輪播圖片的控制項。所以我只能把後臺定義的輪播圖片控制項的相關參數給你,至於如何使用這些參數來顯示輪播控制項,只能由你來實現了。

廣告

它就表示一個廣告,這就代表廣告主將來要投放的廣告。比如客戶提供的一張圖片。它有廣告標題、廣告類型(是圖片?文本?一段html?一段js?)廣告內容(比如是圖片類型廣告,則它存儲圖片的url)、URL(點擊廣告時要跳轉到哪去)

廣告發佈記錄

它是上面3個概念的多對多關係的建立,它是一條廣告發佈記錄。什麼時候,發佈哪個廣告,使用什麼樣的控制項,發佈到哪幾個廣告位。如:有個圖片廣告 要顯示到 首頁輪播控制項中,同時顯示到新聞列表頁右側,用靜態圖片廣告控制項展示

廣告 與 廣告發佈記錄 合併

目前沒有這樣處理,不過可以說說思路。廣告、廣告位、廣告控制項,最後通過廣告發佈記錄將它們多對多關聯,這樣的設計非常靈活。但是也相對複雜。可以考慮將廣告和廣告發佈記錄合併,這樣就沒那麼靈活了,比如同一個廣告要同時發佈到多個廣告位(首頁和列表頁和內容頁,甚至是多個欄目的不同位置都有同時顯示某個廣告)。或者同一個廣告要用不同的控制項展示時。合併這倆概念要實現前面說的這種需求,就需要將同一個廣告多次發佈,其實本質上就是兩個廣告,只是廣告內容一樣

cms模塊中的廣告源碼簡述

首先在CMS/BXJG.CMS.Core/Ad中建立上面各概念對應的實體類:廣告位(AdPositionEntity)、廣告控制項(AdControlEntity)、廣告(AdEntity)、廣告發佈記錄(AdRecordEntity)等實體

然後在CMS/BXJG.CMS.EFCore/EFMaps中建立相應的ef映射文件 xxMap.cs

然後在CMS/BXJG.CMS.Application/Ad中建立應用服務介面及實現,當然還有對應的dto對象。這裡需要註意,系統管理員需要在管理後臺對廣告進行管理,比如定義廣告位、對廣告的增、刪、改、查、發佈、撤銷等操作。網站或app或小程式前臺展示廣告時則是不需要用戶登錄的,匿名用戶應該也可以看到這些廣告。所以這裡將 分別定義後臺和前端對廣告的處理對應的介面,而不是定義在同一個介面中。具體來說IBXJGCMSFrontAdRecordAppService是專門給前端用的介面,裡面只包含對廣告的查詢功能。IBXJGCMSAdAppService則是給後臺對廣告進行管理的介面,裡面包含對廣告的增、刪、改、查、發佈撤銷等,不過寫文章時此介面和實現還沒有做。

下麵按abp的套路定義許可權和菜單

到此cms模塊中的廣告功能基本定義完成。

如何集成到主程式

上面大致說了下cms模塊中的廣告功能相關源碼。在我們的項目中模塊與主程式儘量獨立。CMS是我們定義的一個內容管理模塊,廣告只是下麵一個功能。源碼中的ZLJ.XXX是我們的主程式。這個主程式會來集成不同的模塊,廣告模塊就是其中之一。你也可以在你的abp項目中來單獨引入這個廣告模塊,只是目前這個模塊沒有發佈成nuget包。

下麵說說如何在我們主程式中使用cms模塊中的廣告功能

在ZLJ.EntityFrameworkCore/EntityFrameworkCore/ZLJDbContext中定義廣告相關實體的 DbSet

public virtual DbSet<AdEntity> BXJGCMSAds { get; set; }
public virtual DbSet<AdControlEntity> BXJGCMSAdControls { get; set; }
public virtual DbSet<AdPositionEntity> BXJGCMSAdPositions { get; set; }
public virtual DbSet<AdRecordEntity> BXJGCMSAdRecords { get; set; }

此時進入api頁面可以看到廣告服務介面https://git.weilaikj.cn/swagger/index.html,可以測試了。(打開頁面,Ctrl + F搜索"BXJGCMSFrontAdRecord")

在主程式中集成模塊時,手動在主程式的DbContext中定義DbSet比較繁瑣,網上有動態向DbContext加入DbSet的方法,著名的微信庫Senparc的SCF應該就是那種方式,不過我還不會。還有一個原因,有時候我們需要主程式在集成模塊註冊DbSet時提供實體泛型參數,手動方式最直觀。(動態DbSet應該也可以指定實體泛型參數)

由於廣告模塊足夠簡單,它不需要引用主程式的某些概念,也沒有考慮給模塊調用方提供擴展廣告、廣告位、廣告控制項等的能力,因此在主程式集成廣告功能就很簡單。如果將來考慮允許模塊調用方通過繼承的方式,來為廣告添加更多自定義屬性,可以考慮在廣告相關的應用服務中,將廣告(AdEntity)變成泛型的。將來由模塊調用方來提供一個繼承至AdEntity的子類

另一種情況是模塊內部需要引用主程式的提供的一些概念時,比如 AdEntity中需要引用主程式中的XXX類,作為導航屬性,那麼AdEntity本身就需要定義成泛型的AdEntity<xxx>,這樣模塊內部就不要直接依賴主程式的某個類,而是由將來主程式調用時指定

這裡說的兩種情況後續會專門寫一篇來介紹,目前shop文件夾中相關源碼已有體現。

前端處理

通過IBXJGCMSFrontAdRecordAppService介面,前端頁面可以獲取當前發佈的廣告信息,裡面包含了廣告位、廣告控制項、廣告、發佈相關屬性,前端可以根據這些數據自由控制前端廣告的展示。這部分功能模塊沒有也很難提供。

結束

這裡簡單介紹了下項目中設計的abp cms模塊中的廣告功能,這個設計參考了部分cms系統,目前只有個骨架,後續會逐步完善。目前項目中類似的模塊還有幾個,沒來得及寫說明。後續再補充吧。希望找到熱愛abp的朋友,一個做模塊,互相分享,因為我們可能在做一樣的功能,沒必要重覆勞動。

目前的目標是開發常用,簡單、實用,不考慮擴展性的模塊,將來逐步實現擴展性  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 生活中有很多事情是低效益,重覆性。比如每天上某些網站,先登錄再簽到打卡,比如每隔一段時間清理回收站的文件等等。一個成熟的軟體工程師應該想到用軟體解決他。 對於這些簡單的小任務,一般用腳本實現。比如Python腳本或者JavaScript腳本等等,不過還得裝運行環境。如果能在電腦上直接用就好了,那麼有 ...
  • SQL--資料庫的設計(範式) 博客說明 文章所涉及的資料來自互聯網整理和個人總結,意在於個人學習和經驗彙總,如有什麼地方侵權,請聯繫本人刪除,謝謝! 概念 設計資料庫時,需要遵循的一些規範。要遵循後邊的範式要求,必須先遵循前邊的所有範式要求 定義 設計關係資料庫時,遵從不同的規範要求,設計出合理的 ...
  • 給所有開發人員配備一個開發調試小助手 來來來,幫我看下剛纔按鈕請求的參數是否正確 來來來,幫我看下當前打開的頁面的頁面地址是什麼 來來來…… 這是你未來的場景 應用系統開發過程中 關於前端調試, 最常聽到的是, 你F12一下 點擊NetWork 查看請求 Headers 看一下請求的內容 關鍵是左側 ...
  • 在開發UIBarChart的過程中,需要繪製Y軸的刻度,數據作圖時,縱橫坐標軸刻度範圍及刻度值的取法,很大程度上取決於數據的分佈。對某一組數據,我們很容易就能知道如何選取這些值才能使圖畫得漂亮。但是要想找到一個通用的演算法,用以對任意分佈的數據決定這些值,並不是一件容易的事 ...
  • ExceptionFilter 主要是為了捕捉系統異常。通常我們會繼承 ExceptionFilterAttribute ,實現自定義系統異常捕捉。 版本:.Net Core 3.1 一、基本創建過程 新建 .Net Core Mvc 並新建控制器 ExceptionFilterController ...
  • 我們來創建動態菜單吧 首先,先對動態菜單的概念、操作、流程進行約束:1.Host和各個Tenant有自己的自定義菜單2.Host和各個Tenant的許可權與自定義菜單相關聯2.Tenant有一套預設的菜單,規定對應的TenantId=-1,在添加租戶時自動將標準菜單和標準菜單的許可權初始化到添加的租戶 ...
  • 直接上代碼 1 public static class ImageCompress 2 { 3 /// <summary> 4 /// 圖片壓縮 5 /// </summary> 6 /// <param name="imagePath">圖片文件路徑</param> 7 /// <param na ...
  • 看了看原生UWP的ScrollViewer,滑動很流暢(例如 開始菜單),但是WPF自帶的ScrollViewer滾動十分生硬.. 突發奇想,今天來實現一個流暢滾動的ScrollViewer. 一、目標 查閱網上的實現方法,要麼直接重寫控制項,要麼一堆Storyboard..很是無奈,還有些許bug. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...