2015-08-19 4 views
1

У меня есть пакет, который загружает некоторую информацию из базы данных umbraco (4.7).Получить Узел URl из базы данных Umbraco (4.7)

Мне нужно извлечь свойство в Link to document узел ...

АНИ на сайте делает это как umbraco.library.NiceUrl(nodeid) ... Но у меня есть одно консольное приложение, которое не имеет-доступ к Umbraco вещи ...

1) Где я могу найти этот «хороший url» узла в базе данных?
2) Если нет (или слишком сложно), как можно настроить библиотеку umbraco API (4.7) с консольным приложением?

ответ

0
select 
    GROUP_CONCAT(EXTRACTVALUE(xml, "//@urlName") separator '/') as PATH 
from 
    cmscontentxml x inner join 
    umbraconode n on FIND_IN_SET(x.NODEID,n.PATH)>0 
where n.ID=19802 -- your id 
group by n.ID; 
1
SELECT 
    cast([xml] as xml).query('data(//@urlName[1])').value('.', 'varchar(20)') AS PATH 
    FROM cmsContentXml where nodeid = 19802 

Мои 2 цента на сумму

1

Я попытался выше ответы, но они требуют MySQL (нужен SQL Server), функцию CLR, или содержать только информацию о информации URL-адрес для текущего документа. Для детей и документов, глубоко в пути навигации, я хотел включить полный путь. Нижеследующие работы для меня

; WITH PathXml AS (

    /* -- This just gives nodes with their 'urlName' property 
     -- not in recycle bin, 
     -- level > 1 which excludes the top level documents which are not included in the url */ 
    SELECT 
     nodeId, 
     cast([xml] as xml).query('data(//@urlName[1])').value('.', 'varchar(max)') AS Path 
    FROM cmsContentXml x 
    JOIN umbracoNode n ON x.nodeId = n.id AND n.trashed = 0 AND n.level > 1 
) 

SELECT 
    un.id, 
    un.path, 
    '/' + 
    /* IsNull after the leading '/'. This will handle the top level document */ 
    IsNull((SELECT 
       pl.Path + '/' /* Ok to end with a/*/ 
      FROM PathXml pl 

      /* e.g. ',-1,1071,1072,1189,' LIKE '%,1072,%' */ 
      WHERE ',' + un.path + ',' LIKE '%,' + CAST(pl.nodeId AS VARCHAR(MAX)) + ',%' 

      /* order by the position of ',1072,' in ',-1,1071,1072,1189,' */ 
      ORDER BY CHARINDEX(',' + CAST(pl.nodeId AS VARCHAR(MAX)) + ',', 
           ',' + un.path + ',') 

      FOR XML PATH('')), 
    '') AS Url, 
    un.text PageName 
FROM umbracoNode un 
WHERE nodeObjectType = 'C66BA18E-EAF3-4CFF-8A22-41B16D66A972' /* "Document" https://our.umbraco.org/apidocs/csharp/api/Umbraco.Core.Constants.ObjectTypes.html#Umbraco_Core_Constants_ObjectTypes_Document */ 
AND trashed = 0 
ORDER BY 3 /* Url */ 
+0

Это работает в некоторых случаях, но в моем случае я ищу узлы, и когда один и тот же узел сопоставляется несколько раз, то сегменты URL дублируются. т. е. '/ global/global/global /', если глобальная страница найдена 3 раза. 'nodeObjectType' - полезный titbit, хотя – JDandChips