Перейти к содержимому


Копирование поля "файл" из смежной таблицы

поле файл копирование

Сообщений в теме: 7

#1 Виктор

    Участник

  • Пользователи
  • PipPip
  • 17 сообщений

Отправлено 25 Март 2013 - 15:52

Являюсь пользователем Saas версии КБ.
Столкнулся с проблемой копирования полей из связной таблицы, типа - "Файл".

Есть таблица "Договора" связная с таблицей "Заказы" через поле "По заказу".
Таблица "Заказы" содержит поле Замерные бланки, тип поля - "Файл" (сюда мы загружаем отсканированные замерные бланки).

Таблица "Договора" также содержит поле Замерные бланки, тип поля - "Текст" с поддержкой HTML форматирования.
В таблицу "Договора" добавлено вычисление:
$line['Замерные бланки'] = "<a href='open_file.php?table=201&field=5211&line=".$line['По заказу']['ID']."&file=".$line['По заказу']['Замерные бланки']."'>".$line['По заказу']['Замерные бланки']."</a>";

С одним загруженным файлом в поле Замерные бланки таблицы "Заказы" - все работает безупречно.
Но появилась необходимость загружать несколько файлов в поле Замерные бланки таблицы "Заказы" и начались проблемы:

Если загружаем два файла 'замер1.jpg' и 'замер1.jpg' в поле Замерные бланки таблицы "Заказы", то в поле Замерные бланки таблицы "Договора" формируется ссылка вида замер1.jpg замер1.jpg
клик по которой вызывает ошибку "File doesn`t exists".

Может кто сталкивался с подобной проблемой и имеет решение? Прошу помочь с вычислением, в результате которого будут формироваться раздельные ссылки: 1ссылка=1файл.

Спасибо.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Март 2013 - 16:47

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

#3 Виктор

    Участник

  • Пользователи
  • PipPip
  • 17 сообщений

Отправлено 25 Март 2013 - 16:54

Просмотр сообщенияCbCoder (25 Март 2013 - 16:47) писал:

Вы неправильно вычисление составили. Необходимо создавать ссылки по каждому файлу в отдельности, а у вас ссылка всего одна. Естественно, что в случае двух и более файлов они "слипаются" вместе, что и приводит к ошибке.
Я так понимаю, это в том случае если мы имеем несколько полей типа "Файл" с одним файлом на каждое поле?

А как быть когда несколько файлов загружены в одно поле?

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Март 2013 - 17:21

Просмотр сообщенияВиктор (25 Март 2013 - 16:54) писал:

Я так понимаю, это в том случае если мы имеем несколько полей типа "Файл" с одним файлом на каждое поле?

С чего вы это взяли? У меня, как и у вас, речь идет об одном поле с несколькими файлами. Как вы собираетесь одной ссылкой загрузить несколько файлов сразу? Если у вас в поле не один файл, то и ссылок должно быть несколько - посмотрите в оригинальное поле для сравнения.

Вам необходимо разделить список файлов и создать ссылки на каждый файл отдельно.

#5 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 357 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 25 Март 2013 - 17:58

Просмотр сообщенияCbCoder (25 Март 2013 - 17:21) писал:

Вам необходимо разделить список файлов и создать ссылки на каждый файл отдельно.
foreach ($line['По заказу']['Замерные бланки'] as $filename)
{
  $filename = trim($filename);
  $files_link = $files_link?$files_link . "<br/>":$files_link;
  $files_link .= '<a href="open_file.php?field=5211&line=' . $line['По заказу']['ID'] . '&file=' . $filename . '">' . $filename  . '</a>';
}
$line['Замерные бланки'] =  $files_link;
примерно так

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 762 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Март 2013 - 18:14

Цитата

примерно так

Не совсем. В поле "файл" нет готового массива, там просто список файлов с разделением через перенос строки. Вначале надо получить массив имен файлов, разобрав содержимое поля через функцию explode:

$files = explode("\r\n", $line['По заказу']['Замерные бланки']);
foreach ($files as $filename)
// далее тот же код


#7 andibrag

    Прежде, чем задать вопрос, продумайте свое решение.

  • Активный пользователь
  • PipPipPip
  • 1 357 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 25 Март 2013 - 18:31

Просмотр сообщенияCbCoder (25 Март 2013 - 18:14) писал:

Не совсем. В поле "файл" нет готового массива, там просто список файлов с разделением через перенос строки. Вначале надо получить массив имен файлов, разобрав содержимое поля через функцию explode:

$files = explode("\r\n", $line['По заказу']['Замерные бланки']);
foreach ($files as $filename)
// далее тот же код
Сорри, потерял строчку при копировании кода
$files = preg_split("/[\n]+/", ['По заказу']['Замерные бланки']);
то же самое по сути

Творческая группа "ТАВР".

www.TAVR.pro Художественная ковка, металлоконструкции.

www.СтолМет.рф Складные столы, стулья и системы для их хранения


#8 Виктор

    Участник

  • Пользователи
  • PipPip
  • 17 сообщений

Отправлено 25 Март 2013 - 18:37

Гениально!

Огромное спасибо Вам andibrag и CbCoder!





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных