2016-08-23 4 views
2

나는 불행하게도 경우에, SharePoint 사이트 모음 사이트 및 하위 사이트의 구조를 렌더링하는 구성 요소를 구축을 위해 노력하고,이 코드는 위대한입니다 code from here셰어 포인트 2013 빌드 자바 스크립트

를 사용하지만, 오전를 사용하여 사이트 트리 탐색

<ul> 
    <li>site 1 
    <li>site 2 
    <li>site 3 
    <ul> 
    <li>Sub-site 3.1 
    <ul> 
    <li>Sub-site 3.1.1 
    <li>Sub-site 3.1.2 
    </ul> 
    <li>Sub-site 3.2 
    <ul> 
    <li>Sub-site 3.2.1 
    <li>Sub-site 3.2.2 
    </ul> 
</ul> 

(I는 다음 트 리뷰 라이브러리에 결합 할 수 있기 때문에), 내가/반환이 같은 라인을 따라 출력 뭔가를 건물에 관심이 있어요, 계층없이 모든 사이트를 하나씩 반환

이것에 대한 아이디어가 있거나 비슷한 것을 한 사람에게서 듣고 싶습니다. SharePoint 2013 용 jquery 사이트 트리보기 탐색과 같은 것을 찾고 있었지만 찾을 수있는 것은 모두 KWizCom treeview component (이는 우리의 문제를 완벽하게 해결할 수 있음)이었으며 서버 측 코드를 팜에 배포 할 수 없었습니다. 당신이 혼합으로 약간의 재귀를 던져 기꺼이하는 경우는 비교적 간단 사전

답변

1

감사합니다.

기본 프로세스는 다음과 같습니다. 주어진 웹의 모든 하위 웹을 가져와 계층 구조에 표시 한 다음 각 하위 웹에 대해 해당 프로세스를 반복합니다.

다음은 시작하기위한 예입니다. 현재 사용자가 액세스 할 수없는 사이트를 표시 할 수 없습니다, 그래서이, 현재 로그인 한 사용자의 권한으로 실행되는

<ul id="root_hierarchy"></ul> 

<script> 
ExecuteOrDelayUntilScriptLoaded(showWebHierarchy,"sp.js"); 

function showWebHierarchy(){ 
    var rootUrl = "/yoursitecollectionurl"; 
    rootNode = document.getElementById("root_hierarchy"); 
    get_subwebs(rootUrl,rootNode); 
} 

// get_subwebs is a recursive function that accepts the following parameters: 
// url: the server relative url of a web 
// node: <ul> element in which to display subsites 
function get_subwebs(url,node){ 
    var clientContext = new SP.ClientContext(url); 
    var webs = clientContext.get_web().get_webs(); 
    clientContext.load(webs); 
    clientContext.executeQueryAsync(function(){ 
     for(var i = 0, len = webs.get_count(); i < len; i++){ 
      var web = webs.getItemAtIndex(i); 
      node.insertAdjacentHTML("beforeend","<li><a target='_blank' href='" 
       + web.get_serverRelativeUrl() + "'>" 
       + web.get_title() + "</a><ul url='" 
       + web.get_serverRelativeUrl() + "'></ul></li>"); 
     } 
     var subnodes = node.querySelectorAll("ul"); 
     for(var i = 0, len = subnodes.length; i < len; i++){ 
      var subnode = subnodes[i]; 
      var url = subnode.getAttribute("url"); 
      get_subwebs(url,subnode); 
     } 
    },function(sender,args){alert(args.get_message());}); 
} 
</script> 

참고.

+0

위대한 것들! 그 덕분입니다. 내가 알아챈 한 가지는 일부 사용자가 전체 트리를 보지 못한다는 것입니다. 그들이 사이트에 액세스 할 수 없기 때문에 JavaScript가 사이트를 쿼리 할 수 ​​없기 때문입니다. 방문자에게 액세스 권한을 부여하여 문제를 해결할 수 있습니까? RunWithElevatedPrivileges 클라이언트 쪽 스크립트를 사용할 수 있다고 생각하지 않습니다. –

+0

방문자 액세스 권한을 부여하면 사용자 환경의 의미에 따라 트릭을 수행 할 수 있습니다. 실제로 "Open"및 "Use Remote Interfaces"세부적인 사용 권한을 부여하는 권한 수준이 실제로 필요합니다. 기본적으로 "읽기"권한 수준에는이 두 가지가 모두 포함됩니다. – Thriggle