Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как вызвать окно с отображением дерева каталогов? (http://www.flasher.ru/forum/showthread.php?t=135953)

BonKatty 05.02.2010 19:29

Как вызвать окно с отображением дерева каталогов?
 
Может кто нибудь использовал такую функцию во Флеш которая давала бы возможность 1)вызывать окно с деревом каталогов с определённого места и 2)подгружать выбранный файл?

mooncar 05.02.2010 19:52

Как для (1), так и (2):
Без дополнительных надстроек типа Zinc на локальном компе это невозможно, потому что флеш не умеет работать с файловой системой на таком уровне.
Но все это возможно для флешки, находящейся а сервере, при этом (1) возможно с некоторым использованием PHP.

udaaff 05.02.2010 20:09

В AS3 можно данные файла получить через FileReference.

BonKatty 05.02.2010 21:41

mooncar
Чудненько. А можно поподробней как осуществляли?
Спасибо.

mooncar 05.02.2010 22:33

Нужды не было, не осуществлял, но подсказать могу.
Если надо получить листинг серверного каталога и разобрать ответ скрипта внутри флеша, закиньте такой скрипт в искомый каталог на сервере:

Файл list.php
PHP код:

<?php
$dir 
".";
$n 0;
$dp opendir($dir);
while (
$file readdir($dp))
if (
$file != '.' && $file != '..') echo 'file'.$n++.'='.$file.'&';
closedir($dp);
?>

Запрос к скрипту делаете из экземпляра класса LoadVars.
Флеш получит после запроса строку вида
Код:

file0=1.txt&file1=2.txt&file3=somefile.ext& ....... и т.д.
Останется элементарно ее распарсить внутри метода onLoad.

Таким образом, во флеше код будет:
Код AS1/AS2:

var lv:LoadVars = new LoadVars();
var FILES:Array = new Array();
lv.onLoad = function  (success:Boolean) {
        if (success) {
                for (i in this) {
                        if (i.substr(0, 4) == 'file') {
                                FILES[i] = this[i];
                        }
                }
                startListingShow();
        }
};
 
lv.load ('http://www.xxx.ru/dir/list.php');

На выходе имеем массив FILES, содержащий названия файлов каталога, а индексы массива будут строки вида file0, file1....
Если внутри цикла записать
Код AS1/AS2:

FILES.push(this[i]);

вместо
Код AS1/AS2:

FILES[i] = this[i];

, то получим массив с номерными индексами, что позволит использовать его для получения имени файла так:
Код AS1/AS2:

trace (FILES[0]); //выведет 1.txt
trace (FILES[2]); //выведет somefile.ext

Хотя сам массив будет доступен везде, начинать его использовать (startListingShow) можно только изнутри onLoad, чтобы была гарантия загрузки данных.

Какая будет startListingShow , т. е. как отобразить содержимое массива - тут от ваших целей зависит, от опыта и фантазии..
Хотите - используйте компонент Tree, хотите - аттачтте столбиком красивышные иконки с подписями-названиями файлов.
Либо просто список в динамическом текстовом поле выводите, это ваше усмотрение.

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

BonKatty 15.02.2010 13:44

Спасибо большое. Разбираюсь теперь :)


Часовой пояс GMT +4, время: 15:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.