2010-07-14 20 views
2

我是Umbraco的新手,我很喜歡它,我瞭解它是如何工作的,但我想知道如何以及創建最佳方式是什麼用戶控件顯示umbraco的數據庫的一些信息?當它很簡單時,我使用XSL模板來做,但現在我需要更多的可能性。創建UserControl以在Umbraco 4.1中顯示DocumentType的列表

我試圖做的是有一個UC連接到Umbraco的數據庫,獲取documentType「NewsItem」的所有文檔並將它們列在我的UC中。

我發現這篇文章:Umbraco: List Child Nodes in User Control但它不是很完美,因爲我不想硬編碼nodeId,我想根據DocumentType找到我的新聞。

我現在有一個API來訪問umbraco的數據,但沒有找到任何例子。我還在umbraco.tv上觀看了很多視頻,但仍然沒有一個好的方法來解決這個問題。還有LINQ to Umbraco(http://our.umbraco.org/wiki/reference/api-cheatsheet/linq-to-umbraco),但不知道這是否是一種很好的方法。

此外,有沒有一種方法來測試其他WebProject內的用戶控件?我的意思是在其他項目中連接到Umbraco的db,這樣你就不必在umbraco的網站去測試它了?

非常感謝!

回答

4

有幾個方面給你的問題,我會嘗試一次解決一個問題。

  1. 使用umbraco.presentation.nodefactory獲取特定類型的節點。在這個例子中我將承擔所有的NewsItems在這種情況下節點ID爲1024的

    using umbraco.presentation.nodeFactory; 
    
    namespace cogworks.usercontrols 
    { 
        public partial class ExampleUserControl : System.Web.UI.UserControl 
        { 
         protected void Page_Load(object sender, EventArgs e) 
         { 
          var specificNode = new Node(1024); 
          var childNodes = specificNode.Children; 
    
          foreach(var node in childNodes) 
          { 
           if(node.NodeTypeAlias == "NewsItem") 
           { 
            //Do something with your NewsItem node! 
           } 
          } 
         } 
        } 
    } 
    

特定節點的孩子這可能不是最有效的方式,但是是OK的一個例子。

  • 遞歸遍歷節點樹以及將找到的節點的列表的例子:

    public static List<Node> SelectChildrenByNameRecursive(Node node, string docType) 
    { 
        var nodes = new List<Node>(); 
    
        foreach (Node child in node.Children) 
        { 
         FindChildrenByDocType(child, docType, ref nodes); 
        } 
    
        return nodes; 
    } 
    
    private static void FindChildrenByDocType(Node node, string docType, ref List<Node> nodes) 
    { 
        if (node.NodeTypeAlias == docType) 
        { 
         nodes.Add(node); 
        } 
    
        foreach (Node childNode in node.Children) 
        { 
         FindChildrenByDocType(childNode, docType, ref nodes); 
        } 
    } 
    
  • 同樣只是示例代碼...

    012fa
    1. 測試Umbraco,您總是需要在Umbraco的實例中運行,因爲nodefactory是內存內容緩存的頂部的API。

    2. 延伸閱讀

    http://blog.hendyracher.co.uk/umbraco-helper-class/

    http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-(linq-null-safe-access)

    +0

    感謝蒂姆的回答!你覺得Linq和Umbraco有什麼關係?我們可以在一個單獨的Web項目中測試它嗎?您在此提供的有用鏈接!但是有什麼方法可以與數據庫一起工作,而無需在Umbraco中測試我們的控件,以便更好地分離併爲我的UC添加單元測試? – VinnyG 2010-07-15 14:48:26

    相關問題