[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Загрузка файлов а-ля vBulletin
Sergey1974
Помогите разобраться в таком вопросе... Необходимо сделать приаттачивание файлов к заказу в стиле vBulletin... то есть открыта форма заполнения заказа, в ней есть кнопка "Добавить файл...", при нажатии которой в отдельном окне открывается форма, с помощью которой загружается файл... после загрузки это окошко автоматически закрывается, а название приаттаченного файла появляется в форме заказа... в общем все в стиле управления вложениями форума vBulletin... в каком направлении думать? Полагаю, что без AJAXа тут не обойтись... Кто может, поясните общий принцип и набросками кода...



Спустя 1 час, 54 минуты, 24 секунды (16.02.2010 - 12:29) FatCat написал(а):
Цитата (Sergey1974 @ 16.02.2010 - 11:35)
Полагаю, что без AJAXа тут не обойтись...

Запросто обойтись. Фтопку аякс.
На странице заказа делаете
<div id="attach"></div>

На странице загрузки скрипт
opener.getElementById('attach').innerHTML += 'отдаваемый код';
будет подгружать все что вам нужно на страницу заказа.

Спустя 39 минут, 26 секунд (16.02.2010 - 13:08) Sergey1974 написал(а):
Хм... ща попробую... Спасибо.

Спустя 3 часа, 36 минут, 17 секунд (16.02.2010 - 16:45) Sergey1974 написал(а):
Что-то ничего не понимаю...

Вот код из страницы заказа, открывающий форму аплоадера:

<div id="attach"></div>

<
a href="upload.php" target="_blank" onClick="uW = window.open(this.href, '{$lang.LNG_TITLE_UPLOADER}', 'location,width=500,height=200,top=40'); uW.focus(); return false;">{$lang.LNG_ORDER_ADD_FILE}</a>


Вот код из аплоадера, который по идее должен обновить див с тегом attach в странице заказа:

<script type="text/javascript">

function updateOrder(url)
{
opener.getElementById('attach').innerHTML += 'Файл загрузился!'; return true;
}

</script>


<form action="upload.php" method="post" enctype="multipart/form-data" name="upload" id="upload">
<label>
<input
name="fileName" type="file" id="fileName" size="50" />
</label>
<label>
<input
name="button" type="submit" id="button" onclick="javascript: updateOrder();" value="Обновить заказ" />
</label>
</form>


Но на практике обновление дива не происходит... функция
updateOrder() 
вызывается, но ничего не обновляет...

Спустя 28 минут, 37 секунд (16.02.2010 - 17:13) FatCat написал(а):
Цитата (Sergey1974 @ 16.02.2010 - 17:45)
function updateOrder(url)

Включи показ ошибок джаваскрипт.
Функция ждет передаваемого параметра url, а параметр не передается:
Цитата (Sergey1974 @ 16.02.2010 - 17:45)
onclick="javascript: updateOrder();"

Спустя 12 минут, 55 секунд (16.02.2010 - 17:26) Sergey1974 написал(а):
Параметр я убрал... Вот ошибка, которая выпадает:

opener.getElementById is not a function


Спустя 23 минуты, 55 секунд (16.02.2010 - 17:50) Sergey1974 написал(а):
Все, разобрался...

opener.getElementById('attach').innerHTML += 'Файл загрузился!'; return true;

надо писать так:


opener.document.getElementById('attach')...

Спасибо за помощь!

Спустя 3 часа, 46 минут, 2 секунды (16.02.2010 - 21:36) FatCat написал(а):
Цитата (Sergey1974 @ 16.02.2010 - 18:50)
opener.document.getElementById('attach')...

О как!
IE6 и краткую конструкцию отрабатывает.
Спасибо, буду иметь в виду, что нужно писать полный синтаксис.

Спустя 21 час, 25 минут, 20 секунд (17.02.2010 - 19:02) Sergey1974 написал(а):
В продолжение... Как сделать, чтобы загруженный файл был удален при незавершении заказа? Ну то есть, юзер открыл форму заказа, приаттачил файл, а тут перезагруз... ну или сам окно взял и закрыл... заказа нет а файл остался на серваке... и как от него избавиться?

Спустя 7 часов, 24 минуты, 54 секунды (18.02.2010 - 02:26) FatCat написал(а):
Цитата (Sergey1974 @ 17.02.2010 - 20:02)
Как сделать, чтобы загруженный файл был удален при незавершении заказа?

Самым логичным будет делать и загрузку и оформление заказа на одном сабмите.
Раз все раздельно, значит нужно при оформлении заказов сделать пересчет нужных файлов, а лишние удалить.

Например, если заказы хранятся в бд:

1. Массив имен файлов:
$files = array();
while(false !== ($file = readdir($dir_files)))$files[$file] = 1;



2. В цикле по таблице заказов unset нужные файлы.


3. В массиве останутся ненужные. Удаляем:
foreach($files as $file => $v)unlink($file);


PS: unset($files[".."]) и unset($files["."]) чуть не забыл. biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.