Показать сообщение отдельно
Старый 08.05.2009, 16:35
nOobCrafter вне форума Посмотреть профиль Отправить личное сообщение для nOobCrafter Найти все сообщения от nOobCrafter
  № 1  
Ответить с цитированием
nOobCrafter

Регистрация: Nov 2008
Сообщений: 894
Записей в блоге: 1
По умолчанию Сортировка XML

День добрый, ситуация такова, есть список фильмов предствленный в виде XML (генерится пхп-скриптом и отдается флешу). Его структура такова:
папка -
- фильм
- фильм
папка с фильмами -
- фильм
- фильм
папка с фильмами -
папка с фильмами -
- фильм
- фильм
В общем пхп бегает по всем папкам что етсь и если находит там файлы нужного формата то записывает их. Степень вложенности может быть любой (используется рекурсия). Вопрос в том как сделать так что бы флеш отображал сначала только фильмы, а потом уже папки с другими фильмами (дабы несколько упорядочить это дело).
Решил сначала пробегаться по хмлюе и проверять, если фильм — то добавляем, если нет то пропускам, когда фильмы кончаются опять пробегаюсь по хмл и на этот раз проверяю папки, если нод - папка, запускаю функцию еще раз, если не то пропускаю.
НО проблема в том что папки второй вложенности и ниже не отображаются, почему то. Вот что я получаю в трейсе:
Цитата:
Films1 // большая папка с фильмами
Films1/In English // одна вложенная папка все ок
end of Films1/In English // вот конец этой папки
Films1/Multiki // еще одна вложенная папка с фильмами
end of Films1/Multiki // ее конец
Films1/New // и вот еще одна папка, но в ней есть еще вложенная папка
end of Films1/New/A_Beautiful_Mind // но мы видим только ее конец
end of Films1/New // .....
Films1/Video pricols
end of Films1/Video pricols/Animals
end of Films1/Video pricols/Beavis and Buthead
end of Films1/Video pricols/Crash
..........
Сортирую так:
Код AS1/AS2:
///////////////-------------- Обходим ХМЛ ---------------////////////////
function sort(node) 
{
	var total_i:Number = node.length;
	for(var i:Number = 0; i < total_i; i++)         // первый цикл - ищу фильмы
	{
		var nodes = node[i].childNodes;
		if (typeof (nodes[0]) == "undefined")  // если нету вложенных файлов то считаю что это фильм
		{
			//trace(node[i].attributes.film);
			addElement(node[i].attributes.film, node[i].attributes.link, 12, 0x444444);
		}
	}
	for(var i:Number = 0; i < total_i; i++)       // второй цикл, обхожу папки
	{
             var nodes = node[i].childNodes;		// надо так, а не как ниже закоменчено
if (typeof (nodes[0]) != "undefined") // елси етсь потомки то это папка
		{
			// var nodes = node[i].childNodes;
			addFolder(node[i].attributes.name, 16, 0x333333);
			trace(node[i].attributes.name);
			sort(nodes);                 // если папка то запускаю эту функцию в ней
		}
		if (node[i].attributes.name != undefined){ trace("end of " + node[i].attributes.name); }   // тут мы отслеживаем конец какой то папки
	}
}
З.Ы. проблема решена, описка найдена, исправил код на будущее..


Последний раз редактировалось nOobCrafter; 08.05.2009 в 17:06.