我最近开始使用Umbraco,我正在弄清楚如何将自己的自定义部分添加到其中。
到目前为止,我已设法添加新的部分,并且我还开始在各种博客帖子的帮助下添加自定义树,例如:http://www.robertgray.net.au/2011/5/10/creating-a-custom-content-tree-in-umbraco和http://www.geckonewmedia.com/blog/2009/8/3/how-to-create-a-custom-section-in-umbraco-4
这个新部分的目的是显示我想要存储在数据库中的查询。记录只需要查看但不可编辑。
到目前为止,我有一个名为'Inquiries'的根节点和一个名为'General Inquiries'的节点。我想将所有查询列为“一般查询”的子节点,然后点击后,我希望能够在右侧主要区域显示查询详情。
在上面链接的第一篇博客文章中,提供了以下代码来演示如何显示子节点:
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
。但是,似乎没有任何代码示例解释这是什么以及如何从数据库中实际检索数据。
对此的任何帮助都将非常感激。
答案 0 :(得分:1)
让我先说一下我对Umbraco知之甚少,所以这只是基于观察!
如果你查看链接到Robert Gray博客文章的github repository中的源代码,你会发现DriverRepository的实现(它只是底层泛型{{3}的shell子类。实际工作发生的抽象基类)。这段代码与Umbraco无关,它只是一个存储库模式的实现,与AbstractRepository一起用于在这种情况下位于Umbraco顶部的示例F1应用程序中的数据访问。这段代码正在做的是从应用程序中检索所有驱动程序,循环遍历它们并在Umbraco中创建相应的XmlTreeNodes。
在您的情况下,您只需将(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等)。