2013-02-14 71 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