Umbraco 4.6+를 사용하면 C#에서 특정 doctype의 모든 노드를 검색 할 수 있습니까? umbraco.NodeFactory
네임 스페이스를보고 있었지만 아직 사용법을 찾지 못했습니다.Umbraco 4.6+ - C#에서 doctype으로 모든 노드를 얻는 방법?
17
A
답변
16
내가 오늘이 일을하고 있었는데, 아래 코드가 (umbraco.presentation.nodeFactory를 사용하여) 작동해야하고 nodeId -1로 호출하여 사이트의 루트 노드를 얻은 다음 작동 시키도록합니다. :
private void DoSomethingWithAllNodesByType(int NodeId, string typeName)
{
var node = new Node(nodeId);
foreach (Node childNode in node.Children)
{
var child = childNode;
if (child.NodeTypeAlias == typeName)
{
//Do something
}
if (child.Children.Count > 0)
GetAllNodesByType(child, typeName);
}
}
3
또는 재귀 방법 :
using umbraco.NodeFactory;
private static List<Node> FindChildren(Node currentNode, Func<Node, bool> predicate)
{
List<Node> result = new List<Node>();
var nodes = currentNode
.Children
.OfType<Node>()
.Where(predicate);
if (nodes.Count() != 0)
result.AddRange(nodes);
foreach (var child in currentNode.Children.OfType<Node>())
{
nodes = FindChildren(child, predicate);
if (nodes.Count() != 0)
result.AddRange(nodes);
}
return result;
}
void Example()
{
var nodes = FindChildren(new Node(-1), t => t.NodeTypeAlias.Equals("myDocType"));
// Do something...
}
15
은 결국 당신을 가정하면이 특정 유형의 노드의 몇 가지가 필요합니다, 당신보다 더 많은 검색 방지하기 위해 항복 키워드를 사용하는 것이 더 효율적이 될 것입니다 해야만합니다 :
public static IEnumerable<INode> GetDescendants(this INode node)
{
foreach (INode child in node.ChildrenAsList)
{
yield return child;
foreach (INode grandChild in child.GetDescendants())
{
yield return grandChild;
}
}
yield break;
}
그래서 최종 호출이 유형별 노드가 될 것입니다 얻을 : 당신은 단지 처음 다섯을 얻으려면
new Node(-1).GetDescendants().Where(x => x.NodeTypeAlias == "myNodeType")
을 그래서, 당신은 (5) 끝으로 .Take을 추가 할 수 있으며 것입니다 전체 트리를 꺼내기보다는 처음 5 가지 결과 만 반복합니다. 그냥 매크로 (Umbraco 4.7+)가 사용하는 면도칼 스크립트 파일을 만드는 경우, 나는 특히 유용 줄여서 발견
1
...
var nodes = new Node(-1).Descendants("DocType").Where("Visible");
희망이 누군가를하는 데 도움이! umbraco에서
1
은 7.0 당신은 사용이
foreach (var childNode in node.Children<ChildNodeType>())
{
...
}
관련 문제
- 1. 트리에서 임의의 노드를 얻는 방법?
- 2. 특정 요소 값을 가진 노드를 얻는 방법
- 3. C에서 const-correctness를 얻는 방법 #?
- 4. C에서 CPU 주파수를 얻는 방법 #
- 5. C에서 IUnknown에 포인터를 얻는 방법
- 6. XML :: XPath를 사용하여 부모 노드를 얻는 방법?
- 7. dijit.Tree에 초점을 맞춘 노드를 얻는 방법?
- 8. tinyxml을 사용하여 요소의 부모 노드를 얻는 방법
- 9. salesforce에서 특정 계정의 하위 노드를 얻는 방법
- 10. Umbraco 캐싱
- 11. 최소한의 복잡성으로 트리보기에서 모든 노드를 확인하는 방법
- 12. yaml의 모든 노드를 문자열로 만드는 방법
- 13. 동일한 ID를 보유한 모든 노드를 선택하는 방법
- 14. YUI의 트리 뷰에서 모든 자식 노드를 얻는 법
- 15. C에서 호출 메서드 속성을 얻는 방법 #
- 16. Umbraco XSLT는 현재 페이지에 관계없이 newsitem 하위 노드를 선택합니다.
- 17. Umbraco URL이 한 노드에서 홈 노드를 표시합니다. 때로는
- 18. Umbraco 내용 이름 Umbraco CMS에서
- 19. C에서 pthread의 물리적 ID를 얻는 방법
- 20. C에서 외부 IP의 MAC 주소를 얻는 방법
- 21. C에서 ExecuteOracleNonQuery에서 rowid를 다시 얻는 방법
- 22. C에서 installerclass 내의 msi 경로를 얻는 방법
- 23. C에서 중첩 된 클래스의 인스턴스를 얻는 방법 ++
- 24. 객관적인 C에서 특정 요일을 얻는 방법?
- 25. Neo4j에서 특정 노드를 찾는 방법
- 26. yii의 모든 CActiveRecords를 얻는 방법
- 27. 모든 문자의 위치를 얻는 방법
- 28. umbraco - usercontrols - umbracoNaviHide
- 29. Qt 4.6 OpenGL GLSL
- 30. C# - XPath-Question : 지정된 부모 노드에서 노드를 얻는 방법?
처럼 할 수 -1 ID와 사이트의 루트 노드가 좋은 팁입니다 얻을! 고마워. – ComethTheNerd