Опубликован: 07.11.2006 | Уровень: специалист | Доступ: свободно
Лекция 18:

XML

  1. Даем команду fileStructDoc на загрузку contents.php. Сценарий onLoad вызваем после загрузки.
    fileStructDoc.load ('contents.php');
  2. Добавляем функциональность как открытым, так и закрытым директориям и закрываем уже открытые директории для поддержки взаимодействия с пользователем.
    function toggleDirectory(item, index) {
      //isOpen is an attribute that we add when we open a 
      К//directory. It will be null to start 
      if (item.attributes.isOpen == 'true') {
    
        //user must click twice in order to close a directory 
        if (lastDirectorySelected == item) { 
          closeDirectory(item, index);
        } 
      } else {
        openDirectory(item, index); 
      }
    
      //keep track of user's last selection 
      lastDirectorySelected = item; 
    }
  3. Далее добавляем функциональность, которая будет поддерживать открытие директорий с помощью функции openDirectory.
    function openDirectory(item, index) { 
      item.attributes.isOpen = 'true'; 
      for (var i = 0; i<item.childNodes.length; i++) {
        var node = item.childNodes[i];
        var name = node.attributes.name;
  4. Теперь добавляем узлы категорий в список directories, выделяя заголовки по мере их углубления в структуру директорий. Цикл for в функции начинает работу на уровне узла из массива item.childNodes. Затем он переходит к его родительскому узлу, затем к родительскому узлу этого узла и т.д. до тех пор, пока не достигнет корневого узла с именем NAVIGATION. При каждой итерации он выделяет отступом запись, которая будет добавлена: чем глубже находится узел, тем больше будет смещена запись.
    if (node.nodeName == 'CATEGORY') { 
      //go up until we find the root
      for (var tempNode = item.childNodes[i]; tempNode.nodeName!=
      К'NAVIGATION'; tempNode = tempNode.parentNode) {
        //indent the entry
        name = ' ' + name; 
      }
  5. Здесь мы располагаем наш узел на следующей позиции в списке директорий.
    index++;
          directories.addltemAt(index, name, node); 
        } 
      } 
    }
  6. Вводим код для закрытия директорий функцией closeDirectory.
    function closeDirectory(item, index) 
      { item.attributes.isOpen = 'false';
  7. Сначала проходим через каждый элемент, являющийся подкатегорией закрываемого.
    for(var i = 0; item == item.childNodes[i].parentNode; i++) { 
      var node = item.childNodes[i]; 
      var name = node.attributes.name;
  8. Удаляем все подкатегории перед удалением категории рекурсивным вызовом функции closeDirectory.
    if(node.attributes.isOpen == 'true') { 
          closeDirectory( node, index + 1)
        }
        directories.removeItemAt(index + 1);
      } 
    }
  9. Выполняем инициализацию списка files в функции для поддержки ввода пользователем, когда он происходит.
    files.setChangeHandler('handleFilesSelection'); 
    function handleFilesSelection(component) {
      var item = component.getSelectedltem().data;
      updatePath(item.parentNode);
      var name = item.attributes.name;
      var extension = item.attributes.extension;
      url = path + name + ' . ' + extension;
      getURL(url, '_blank');
    }

    Поддержку файлов можно осуществлять многими способами. Можно загружать JPG и SWF в текущий фильм, либо загружать документы XML в другой объект XML, однако, для простоты, мы загружаем все файлы в новое окно браузера.

  10. Нужно создать функцию для поддержки добавления любых файлов, которые могут существовать в данной категории.
    function displayFiles (item) {
  11. Начнем с чистого листа.
    files.removeAll(); 
      Обрабатываем каждый из полученных узлов.
    for( var i = 0; i < item.childNodes.length; i++) {
      var node = item.childNodes[i]; 
      var name = node.attributes.name; 
      var extension = node.attributes.extension;
      Добавляем их в список files, если это файлы.
        if (node.nodeName == 'FILE') {
          files.addltem(name + ' .' + extension, node); 
        } 
      } 
    }
  12. Наконец, нам необходима функция для отслеживания пути выбранной директории из той директории, в которой мы находимся в данный момент. Цикл for в функции выступает в том же качестве, что и код смещения, рассмотренный в шаге 13. Он начинает работу с уровня выбранного узла и затем идет вверх до достижения корневого узла. Для каждого встречающегося узла он строит путь из корня к выделенному элементу.
    function updatePath(selectedNode) { 
      //first clear the path 
      path = ' ';
    
      //go up until we find the root
      for (var tempNode = selectedNode; tempNode.nodeName !=
      К'NAVIGATION'; tempNode = tempNode.parentNode) {
    //prepend the parent root name and a slash to the front
        К//of the path
        path = tempNode.attributes.name + V + path; 
      } 
    }

Вот и все! Ваш фильм Flash должен выглядеть примерно так.


Разумеется, фильм будет отображать содержимое папок вашего компьютера, а не то, что показано на рисунке. Помните, что запускать его нужно с сервера, и запускать так, чтобы работал PHP-сценарий. Несомненно, вы можете изменить и настроить результат вашей работы согласно вашим нуждам и требованиям. После вам уже не придется снова к этому возвращаться. Единственное, что вам понадобится делать для управление содержимым - это добавлять или удалять директории или файлы.

Игорь Хан
Игорь Хан
След не остается
Александр Коргапольцев
Александр Коргапольцев
Вопрос по содержанию лекции №2, курс Flash MX Studio
Евгения Новоселецкая
Евгения Новоселецкая
Россия
Станислав Бакулин
Станислав Бакулин
Эстония, Нарва