PDA

Просмотр полной версии : Как вызвать окно с отображением дерева каталогов?


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
$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.

Таким образом, во флеше код будет:
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....
Если внутри цикла записать
FILES.push(this[i]); вместо FILES[i] = this[i];, то получим массив с номерными индексами, что позволит использовать его для получения имени файла так:
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
Спасибо большое. Разбираюсь теперь :)