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

这个新部分的目的是显示我想存储在数据库中的查询。记录只需要查看但不可编辑。

到目前为止,我有一个名为“查询”的根节点和一个名为“一般查询”的节点。我想将所有查询列为“General Enquiries”的子节点,然后单击时,我希望能够在右侧的主要区域中显示查询详细信息。

在上面链接的第一篇博客文章中,提供了以下代码来演示如何显示子节点:

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. 但是,似乎没有任何代码示例解释它是什么以及它是如何从数据库中实际检索数据的。

对此的任何帮助将不胜感激。

4

1 回答 1

1

让我先说我对 Umbraco 知之甚少,所以这只是基于观察!

如果您查看链接到 Robert Gray 的博客文章的github 存储库中的源代码,您会发现DriverRepository的实现(它只是底层通用AbstractRepository抽象基类的 shell 子类,实际工作发生在这里)。此代码与 Umbraco 无关,它只是与NHibernate结合的 Repository Pattern 的实现,用于在本例中位于 Umbraco 之上的示例 F1 应用程序中的数据访问。这段代码所做的是从应用程序中检索所有驱动程序,循环它们并在 Umbraco 中创建相应的 XmlTreeNode。

在您的情况下,您只需将 (I)DriverRepository 的引用替换为您在应用程序中使用的任何数据访问机制。

例如,如果您要对 Robert 采取类似(尽管更简单)的方法,您的应用程序中可能会出现以下内容:

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;
  }

}

然后,您将以与 Robert 类似的方式在 Umbraco BaseTree 子类中使用它(循环并创建 XmlTreeNodes 等)。

于 2013-02-15T16:55:24.377 回答