Я пытаюсь использовать JQuery для анализа файла sitemap.xml, чтобы он выглядел следующим образом: http://astuteo.com/slickmap/demo/
Поработав над ним несколько часов, я решил, что мне действительно нужна помощь в правильном направлении.
основной шаблон, который у него есть, где каждый отступ имеет отдельный уровень каталога:
<ul id="primaryNav" class="col4">
<li id="home"><a href="http://sitetitle.com">Home</a></li>
<li><a href="/services">Services</a>
<ul>
<li><a href="/services/design">Graphic Design</a></li>
<li><a href="/services/development">Web Development</a></li>
<li><a href="/services/marketing">Internet Marketing</a>
<ul>
<li><a href="/social-media">Social Media</a></li>
<li><a href="/optimization">Search Optimization</a></li>
<li><a href="/adwords">Google AdWords</a></li>
</ul>
</li>
<li><a href="/services/copywriting">Copywriting</a></li>
<li><a href="/services/photography">Photography</a></li>
</ul>
</li>
</ul>
Я использую google sitemap.xml, который выглядит следующим образом:
http://meyers.ipalaces.org/sitemap_000.xml
<url>
<loc>http://meyers.ipalaces.org/</loc>
<lastmod>2011-02-26T09:32:18Z</lastmod>
<changefreq>hourly</changefreq>
<priority>0.4</priority>
</url>
<url>
<loc>http://meyers.ipalaces.org/meyers/photos/Explorer</loc>
<lastmod>2011-02-26T09:31:33Z</lastmod>
<changefreq>hourly</changefreq>
<priority>0.2</priority>
</url>
Метод, который я придумал, позволяет не устанавливать все точно так, как он есть в шаблоне css, но вместо этого я просто сосредоточился на том, чтобы получить правильные уровни:
То, что он делает, принимает уровень URL, проходит через каждый уровень, пытаясь создать список на основе предыдущего уровня.Таким образом, в примере www.example.com/brand/model/product/
:
он получает первый элемент [0], www.example.com
это уровень 1, поэтому он проверяет, есть ли ul[id=1]
, если нет, запустите create_ul
и добавьте егодо #content
.Теперь присоедините li
к ul
, которое он только что сделал .. уровень 1 "особенный", потому что он должен быть создан первым, поэтому у меня в коде много if level==1
.
Для следующего элемента [1] он получает brand
уровня 2. На этот раз он проверяет, есть ли li[id=www.example.com] ul[id=2]
, если он существует, он создаст его и затем прикрепит li
кul
.
Этот метод не работает для меня вообще, он также портится, если, скажем, уровень 8 имеет тот же идентификатор и что-то из уровня 4. Мне просто нужна новая идея о том, как подойтиthis.
Вот мои функции на данный момент, но я уверен, что я должен просто отбросить большую часть кода:
function create_ul(level, id, prev_id) {
var ul = $('<ul/>',{
id: level
});
if(level==1) {
$('#content').append(ul);
} else {
$('ul[id='+(level-1)+'] li[id='+prev_id+']').append(ul);
}
}
function create_li(level, id, prev_id){
if (level ==1){
if ($('ul[id='+level+']').length == 0) {
create_ul(level, id, prev_id);
} else if ($('ul[id='+level+'] li[id='+id+']').length > 0) {
return;
}
var li = $('<li/>',{
id: id
});
var a = $('<a/>',{
text: level + " - " + id,
href: "nothing yet"
});
$('ul[id='+level+']').append(li);
return;
}
// If there is no UL for the LI, create it
if ($('li[id='+prev_id+'] ul[id='+level+']').length == 0) {
create_ul(level, id, prev_id);
} else if ($('ul[id='+level+'] li[id='+id+']').length > 0) {
return;
}
var li = $('<li/>',{
id: id
});
var a = $('<a/>',{
text: level + " - " + id,
href: "nothing yet"
});
li.append(a);
$('li[id='+prev_id+'] ul[id='+level+']').append(li);
}
$.ajax({
type: "GET",
url: "/sitemap_000.xml",
dataType: "xml",
success: parseXml
});
function parseXml(xml) {
URLS = new Array(new Array(), new Array(), new Array());
$(xml).find("loc").each(function(){
var url = $(this).text();
URLS[1].push(url);
url = url.replace("http://", "")
var url_array = url.split("/");
URLS[0].push(url_array);
var rawLastMod = $(this).parent().find('lastmod').text();
var timestamp = rawLastMod.replace(/T.+/g, '');
var lastMod = formatDate(timestamp);
URLS[2].push(lastMod);
});
$(URLS[0]).each(function(i, url_array){
$(url_array).each(function(index, fragment){
var level = index+1;
var id = fragment;
if(index!=0) {
var prev_id = URLS[0][i][index-1];
} else {
var prev_id = null;
}
if(id != "") {
create_li(level, id, prev_id);
}
});
});
}
Я решил ответить на решение PHP вместоJavascript.Я использую этот скрипт PHP: http://www.freesitemapgenerator.com/xml2html.html