У меня есть коллекция сайтов. Мне сказали, что для этого мне нужен рекурсивный цикл.
Это то, что я пробовал:
Когда сайт загружается, вызовите getSiteTree(), который передает веб-сайт верхнего уровня моей функции getSubSite(). Оттуда я проверю, есть ли какие-либо подсайты. У меня есть логическое значение, но я пока не использую его для чего-либо еще, я только что видел его раньше для этого типа работы. В любом случае, оттуда я проверю, есть ли какие-либо подсистемы, если нет, я регистрирую конец ветки, если есть, я вызываю функцию снова с использованием нового URL-адреса и повторяю процесс. Глядя на мою консоль, она работает по назначению.
function getSiteTree(){
var tree = $('#treeviewList');
var rootsite = window.location.protocol + "//" + window.location.hostname;
var siteEnd = false;
getSubSite(rootsite);
}
function getSubSite(url){
$().SPServices({
operation: "GetWebCollection",
webURL: url,
async: true,
completefunc: function(xData, Status) {
var siteUrl;
var siteCount = $(xData.responseXML).find("Web").length;
if(siteCount == 0){
console.log("end of branch");
siteEnd = true;
}else{
$(xData.responseXML).find("Web").each(function() {
siteUrl = $(this).attr("Url");
console.log(siteUrl);
getSubSite(siteUrl);
});
}
}
});
}
Мои вопросы: теперь, когда у меня есть мои сайты, мне нужно взять эти сайты и создать что-то подобное, но я не уверен, как это сделать.
<li>Site 1
<ul>
<li>sub 1.1</li>
<li>sub 1.2</li>
<li>sub 1.3</li>
<ul>
<li>1.3.1</li>
</ul>
<li>sub 1.4</li>
<li>sub 1.5</li>
</ul>
</li>
<li>Site 2
<ul>
<li>sub 2.1</li>
<li>sub 2.2</li>
<li>sub 2.3</li>
<ul>
<li>2.3.1</li>
<li>2.3.2</li>
</ul>
</ul>
</li>
</ul>
У меня есть этот inital html:
<div id="treeviewDiv" style="width:200px;height:150px;overflow:scroll">
<ui id="treeviewList"></ui>
</div>
Это результат, который я могу получить, и то, что я пытаюсь выполнить. Надеюсь, это немного очистит http://i.imgur.com/D5eHeHe.png:
Вы хотите сделать что-то вроде этого, если у вас есть вложенный объект:
function buildTree($element, $object) {
var $ul = $('<ul></ul>');
var $li;
$object.forEach(function (item) {
$li = $('<li>' + item.Name + '</li>');
$ul.append($li);
if (item.SubCategories.length > 0) {
buildTree($ul, item.SubCategories);
}
$element.append($ul);
});
}
здесь скрипка: http://jsfiddle.net/snowburnt/uJbE8/1/
Для SharePoint вы отправляете RootWeb семейства сайтов, а вместо подкатегорий вы отправляете свойство item.webs. Все это, используя javascript или jquery-объект, конечно. Вы могли бы сделать это по-другому, но если вы хотите его перезаписать, это помогает иметь объект, содержащий другие объекты одного и того же класса,