簡體   English   中英

Umbraco連接以加載文檔

[英]Umbraco hook up to load document

我正在為umbraco編寫自定義屬性,該屬性計算文檔中的點擊數。

有什么方法可以在加載文檔時將邏輯連接到頁面?

示例:我有結構:

    • 關於我

兩者都有我的自定義屬性。

我想記錄一下它們何時加載。

注意:我不想使用任何JavaScript或頁面上的操作。 我想將其作為一個自定義DLL。

一種實現方法是有一個單獨的數據庫表專門用於頁面匹配,例如[PageHit]有兩列[NodeId][HitCount]

如果先前未記錄任何匹配,則頁面上的匹配會創建新記錄,或者增加現有記錄的計數。

您需要確保每頁記錄該Masterpage ,因此將其記錄在基礎Masterpage或基礎Controller是我的方法。

然后,您可以具有一個基於自定義數據類型的屬性,該數據類型將查找該屬性所基於的特定節點的點擊計數。 自定義數據類型可以是用戶控件,並且由於在Umbraco后台中,當您在內容編輯器中加載節點時,該節點的ID位於URL查詢中,因此您可以在用戶控件中訪問該ID以查詢數據庫。

使用單獨的表也使您也可以將事物分成單獨的DLL,因為您不必依賴Umbraco API,因為您可以使用PetaPoco或基本ADO之類的ORM。

我當然不會直接寫回節點本身,因為這會導致數據庫上不必要的負載,從而導致站點頁面加載上的延遲,並且通常會使速度變慢。

我選擇的解決方案是:使用IHttpModule,因為umbraco沒有任何可用於此的事件。

關於配置:我決定在應用程序啟動后動態地連接我的模塊。

感謝所有考慮我的問題。

如果要將這些數據保留在Umbraco后端中,則需要創建一個用戶控件並將該控件嵌入到母版頁(頂部母版頁)中。 在用戶控件中添加以下用法:

using umbraco.cms.businesslogic.web;
using umbraco.BusinessLogic;
using umbraco.presentation.nodeFactory;

和類似的方法:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack) // don't want to count postbacks
        {
            Document nodeCount = new Document(Node.GetCurrent().Id);
            int Count = 0;
            try
            {
                Count = Convert.ToInt32(nodeCount.getProperty("hitCount").Value);
            }
            catch
            {
                Count = 0; // value == null, not set yet
            }
            nodeCount.getProperty("hitCount").Value = Count + 1;
            nodeCount.Save();
            nodeCount.Publish(new User(0));
            umbraco.library.UpdateDocumentCache(nodeCount.Id);
        }

PS這是未經測試編寫的..只是我的頭上

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM