|
|
28.11.2011, 16:18
|
|
colorit
Студия Колорит
Зарегистрирован: 2011-01-26
Сообщений: 20
|
Есть компонент, скажем, называется он "Горячие ципы". В нем хранятся девочки и всяческая инфа о них, включая фотки. Так вот я хочу реализовать возможность загрузки нескольких фото к девочке (любого количества, разумеется). Мне нужно иметь возможность загружать, конечно, не только фото, но еще документы, резюме и прочие ненужные разнообразные файлы. Кароче задача сводится к прикреплению к объекту 100500 разнообразных файлов.
З.Ы.: В шаблоне вывода объекта я должен иметь доступ к каждому такому файлу, без ограничений.
|
|
|
30.11.2011, 11:03
|
|
DiGGy
DiGGy
Зарегистрирован: 2005-04-04
Сообщений: 1546
|
Вам нужен компонент "Горячие ципы (файлы)", где будет 2 поля: ID ципы и файл.
Temet nosce...
|
|
|
02.12.2011, 11:42
|
|
colorit
Студия Колорит
Зарегистрирован: 2011-01-26
Сообщений: 20
|
Вы предлагаете сделать так же, как с Альбомами и Фотогалереей (связывать 2 компонента)? Чтобы по одному файлу загружать и теряться с общем списке? Нееет, так не пойдет, нужно по-человечески.
|
|
|
02.12.2011, 12:51
|
|
Denis
Зарегистрирован: 2008-07-15
Сообщений: 666
|
Почему по одному?
пример
|
|
|
16.12.2011, 12:01
|
|
mxxn
Зарегистрирован: 2011-12-16
Сообщений: 8
|
Немного не понятно как реализован пример.
Видно что поля добавляются яваскриптом и у каждого индивидуальное имя. Не ясно как реализована обработка этих полей.
|
|
|
16.12.2011, 20:35
|
|
Гость
Гость
|
Вообще в
Условия добавления объекта
Array ( [name] => [type] => [tmp_name] => [error] => 4 [size] => 0 ) ------Array ( [name] => file.jpg [type] => image/jpeg [tmp_name] => C:\WINDOWS\TEMP\phpC7.tmp [error] => 0 [size] => 163742 )
сдается мне тут перехватывают
Хотя могли бы выложить код :-) компонента
|
|
|
17.12.2011, 12:30
|
|
ap
Зарегистрирован: 2009-04-30
Сообщений: 12
|
Да, попробовал сегодня реализовать, все получилось. Получаете имен закачиваемых файлов и копируете куда душе угодно.
print_r() в помощь
|
|
|
18.12.2011, 23:45
|
|
mxxn
Зарегистрирован: 2011-12-16
Сообщений: 8
|
Это все конечно хорошо. Непонятно только одно: предполагается ручной парсинг $_FILES (ручная запись в соответствующую директорию, а так же отдельный вручную составленный запрос к базе данных на добавление элемента компонента)?
Насколько я знаю у неткэт нет api для добавления элемента в компонент раздела программно.
|
|
|
19.12.2011, 09:14
|
|
Гость
Гость
|
На самом деле там писать не много, хотя конечно бы api помогло бы, можете создать просто поле и хранить там пути к файлам в виде
/netcat_files/40/45/file1.jpg:/netcat_files/40/45/file2.jpg
при выводе $ar_files=exploide(":", ...);
получаете массив, я что-то подобное делал в принципе если бы было встроено было проще, но и реализовать самому не сильно сложно
парсите строчку выводите файлы в альтернативной форме добавления, добавляете значки удалить, правда это все потом нужно реализовать (удаление)
единственный минус переносимость с проекта на проект, все заново т.к. генерить альтернативную форму надо и в шаблонах действий прописывать
если просто хотите добавлять в базу файлы по одному,
то парсить там ничего не надо путь типа netcat_files/$cc/$sub или /$sub/$cc на вскидку не помню
в базе там поля стандартные(в том плане что вся инфа уже есть только INSERT прописать), и для поля с файлом вычислять ничего не надо все из массива берется, на форуме недавно видел там расписано что значит, хотя в версиях отличаются поля немного
единственное что это все нужно протестировать как следует, поэтому готовое протестированное решение было бы очень уместно
|
|
|
19.12.2011, 13:37
|
|
mxxn
Зарегистрирован: 2011-12-16
Сообщений: 8
|
Условие добавления
Код:$uploads_dir = '/path/to/site/netcat_files/135/183/';
foreach ($_FILES["imgfile"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["imgfile"]["tmp_name"][$key];
$original_name = $_FILES["imgfile"]["name"][$key];
$name = nc_transliterate($original_name);
$name = nc_get_filename_for_original_fs($name, $uploads_dir);
$db_field = $original_name . ":" . $_FILES["imgfile"]["type"][$key] . ":" . $_FILES["imgfile"]["size"][$key] . ":135/183/" . $name;
if (move_uploaded_file($tmp_name, "$uploads_dir$name")) {
$db->query("INSERT INTO Message204 (User_ID, Subdivision_ID, Sub_Class_ID, Keyword, Created, LastUser_ID, SourceImage, ArticleID) VALUES
(1, 135, 183, '', '".date("Y-m-d H:i:s")."', 0, '".$db_field."', 0)");
}
}
}
Действие после добавления
Код:$db->query("UPDATE Message204 SET ArticleID = ".$message." WHERE ArticleID=0");
Не сильно оттестено, но вроде работает. Какие есть замечания?
|
|
|
20.12.2011, 00:53
|
|
DiGGy
DiGGy
Зарегистрирован: 2005-04-04
Сообщений: 1546
|
1. Надо также обрабатывать и случаи с ошибкой при закачке файла и в этих случаях выдавать $posting = 0; и соотв-ий текст ошибки.
2. Может случиться так, что действие после добавления не выполнится. Например, юзер качает 10 файлов и просто тупо не хватило времени работы скрипта (обычно у хостеров лимиты на 30-60 сек). В этом случае, закачанные файлы прицепятся к следующей закачке, а это уже нарушение целостности базы.
3. В User_ID лучше передавать реальный ИД юзера $AUTH_USER_ID. Еще лучше заполнять поле компонента Checked = 1. Вместо '".date("Y-m-d H:i:s")."' уж куда проще написать now().
4. ...
Temet nosce...
|