Search code examples
umbraco

Get Umbraco node by path in c# (Language Switching)


I have a multi language site with the following structure:

siteroot
- en
-- home
-- login
-- etc.
- de
-- home
-- login
-- etc. 

The content beneath the language nodes is not necessarily the same. When switching languages I want to test if a parallel language node exists.

Currently I'm doing the following:

  • get current path
  • replace the language part of path e.g. replace /en/login to /de/login
  • the closest I've found to test the existence of a page is: XPathNodeIterator i = umbraco.library.GetXmlDocumentByUrl("http://localhost/de/login");

Debugging this shows, that umbraco actually hits the database. This can't be the best way to test the existence of a page.

Anybody have a better method at hand?


Solution

  • By the sounds your using the document class in cms.businesslogic.web namespace. This class is used for modifying/publishing nodes inside of umbraco.

    Try using the node class that resides in umbraco.presentation.nodeFactory. This will interact with the in-memory XML cache only.

    Node.GetCurrent() //static method - will give you the current loaded page.
    Node.Parent //class property - will give parent method
    

    The problem with the node class, that it can't take XPath queries (and will not give performance)

    I've written a dynamic Linq provider that can be used to query the Umbraco XML structure using compiled xslt expressions. I going to be publishing in the next week or so. Let me know if your interested...