1

最近 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です。ただし、それが何であり、そもそもデータベースから実際にデータを取得する方法を説明するコード例はないようです。

これに関するヘルプは非常に高く評価されます。

4

1 に答える 1

1

私は Umbraco についてほとんど知らないので、これは観察に基づいているだけです!

Robert Gray のブログ投稿にリンクされているgithub リポジトリのソース コードを見ると、DriverRepositoryの実装が見つかります (これは、実際の作業が行われる、基礎となる汎用のAbstractRepository抽象基本クラスの単なるシェル サブクラスです)。このコードは Umbraco とは関係ありません。これは、この場合 Umbraco の上にあるサンプル F1 アプリケーション内のデータ アクセス用のNHibernateと組み合わせたリポジトリ パターンの実装にすぎません。このコードが行っていることは、アプリケーションからすべてのドライバーを取得し、それらをループして、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;
  }

}

次に、Umbraco BaseTree サブクラスで、Robert と同様の方法でこれを操作します (ループして XmlTreeNode を作成するなど)。

于 2013-02-15T16:55:24.377 に答える