2013-02-14 74 views
1

我最近開始使用Umbraco,並且正在弄清楚如何將自己的自定義節添加到其中。用數據庫中的記錄填充自定義樹

到目前爲止,我已經成功地添加一個新的部分,我也開始加入了自定義樹與各種博客文章等的幫助:http://www.robertgray.net.au/2011/5/10/creating-a-custom-content-tree-in-umbracohttp://www.geckonewmedia.com/blog/2009/8/3/how-to-create-a-custom-section-in-umbraco-4

這個新節的目的是爲了顯示我想要存儲在數據庫中的查詢。記錄只需要查看但不可編輯。

到目前爲止,我有一個名爲「查詢」的根節點和一個名爲「一般查詢」的節點。我想列出所有查詢作爲「一般查詢」的子節點,然後點擊時,我希望能夠在右側的主區域顯示查詢詳情。

在連接到上面的第一個博客文章,下面的代碼已經提供給演示如何顯示子節點:

using atomicf1.domain.Repositories; 
using atomicf1.persistence; 
using umbraco.cms.presentation.Trees; 

namespace atomicf1.cms.presentation.Trees 
{ 
    public class loadDrivers : BaseTree 
    { 
     private IDriverRepository _driverRepository; 

     public loadDrivers(string application) : base(application) 
     { 
      _driverRepository = new DriverRepository(); 
     } 

     protected override void CreateRootNode(ref XmlTreeNode rootNode) 
     { 
      rootNode.Icon = FolderIcon; 
      rootNode.OpenIcon = FolderIconOpen; 
      rootNode.NodeType = TreeAlias; 
      rootNode.NodeID = "init"; 
     } 

     public override void Render(ref XmlTree tree) 
     {   
      var drivers = _driverRepository.GetAll(); 

      foreach(var driver in drivers) { 
       var dNode = XmlTreeNode.Create(this); 
       dNode.NodeID = driver.Id.ToString(); 
       dNode.Text = driver.Name; 
       dNode.Icon = "user.png"; 
       dNode.Action = "javascript:openDrivers(" + driver.Id + ")"; 
       tree.Add(dNode); 
      }    
     } 

     public override void RenderJS(ref System.Text.StringBuilder Javascript) 
     { 
      Javascript.Append(
       @" 
        function openDrivers(id) 
        { 
         parent.right.document.location.href = 'plugins/atomicf1/editDriver.aspx?id=' + id; 
        } 
       "); 
     } 
    } 
} 

從我可以工作了,它似乎是「司機」在這個例子是從_driverRepository得出的。但是,似乎並沒有任何代碼示例解釋什麼是什麼以及如何實際從數據庫中首先檢索數據。

對此的任何幫助將非常感激。

回答

1

讓我通過說我對Umbraco知之甚少,所以這只是基於觀察!

如果你看一下在鏈接到羅伯特·格雷的博客文章的github repository的源代碼,你會發現DriverRepository實施(這僅僅是底層通用AbstractRepository抽象基類在實際工作中發生的外殼子類) 。這段代碼與Umbraco毫無關係,它只是一個存儲庫模式的實現,與NHibernate一起用於在這種情況下坐在Umbraco之上的示例F1應用程序內的數據訪問。這段代碼正在做的是從應用程序中檢索所有的驅動程序,循環它們並在Umbraco中創建相應的XmlTreeNode。

在您的情況下,您只需將您的應用程序中使用的任何數據訪問機制的引用替換爲(I)DriverRepository。

例如,如果你採取了類似的(雖然簡單)的方法來羅伯特,你可能有這樣的事情在你的應用程序如下:

public class EnquiryRepository : IEnquiryRepository { 

    // Methods for saving Enquiries, retrieving single Enquiries etc would go here... 

    public IEnumerable<Enquiry> GetAll() { 
    // Data access logic here - retrieve via NHibernate, Entity Framework, 
    // ADO.net, in-memory objects (as below) etc. 
    var enquiries = new List<Enquiry> 
    { 
     new Enquiry('Enquiry 1 title', 'Enquiry 1 content'), 
     new Enquiry('Enquiry 2 title', 'Enquiry 2 content'), 
     new Enquiry('Enquiry 3 title', 'Enquiry 3 content') 
    } 
    return enquiries; 
    } 

} 

你會再與這方面的工作在你的一把umbraco BaseTree子類以類似羅伯特的方式(循環和創建XmlTreeNodes等)。

+0

非常感謝你,這真的幫助我克服了被困住的一點,並清除了一些東西。 – Leah 2013-02-19 10:17:01