Я недавно начал использовать 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

Цель этого нового раздела - отобразить запросы, которые я хотел бы сохранить в базе данных. Записи нужно просто просматривать, но нельзя редактировать.

Пока у меня есть корневой узел под названием "Запросы" и узел ниже под названием "Общие запросы". Я хотел бы перечислить все запросы как дочерние узлы «Общие запросы», а затем, нажав на, я хотел бы иметь возможность отображать детали запроса в основной области справа.

В первом сообщении блога, ссылка на который приведена выше, был предоставлен следующий код, демонстрирующий, как отображать дочерние узлы:

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
Leah 14 Фев 2013 в 19:37

1 ответ

Лучший ответ

Позвольте мне предварить это, сказав, что я очень мало знаю об Умбрако, так что это просто основано на наблюдениях!

Если вы посмотрите исходный код в репозитории github, ссылка на который есть в сообщении блога Роберта Грея, вы найдете реализация DriverRepository (который является просто оболочкой подкласс базового абстрактного абстрактного AbstractRepository где и происходит настоящая работа). Этот код не имеет ничего общего с Umbraco, это просто реализация шаблона репозитория в сочетании с NHibernate для доступа к данным внутри пример приложения F1, которое в данном случае находится поверх Umbraco. Этот код извлекает все драйверы из приложения, перебирает их и создает соответствующие узлы XmlTreeNodes в Umbraco.

В вашей ситуации вы просто меняете ссылки на (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 и т. Д.).

1
Luke Bennett 15 Фев 2013 в 20:55
Большое спасибо, это действительно помогло мне пройти через то, на чем я застрял, и прояснило несколько вещей в моей голове.
 – 
Leah
19 Фев 2013 в 14:17