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


открытие файлов через поле связь, прикрепленных в другой таблице


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

#1 Radik

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

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

Отправлено 05 Ноябрь 2013 - 22:06

Есть "таблица 1", к полю f2222 тип "файлы" делаются вложения
Таблица 2 поле f3333 тип связь с "таблица 1".
Какое поле создать и вычисление в таблица 2, чтобы при закрытом доступе к "таблица 1" открывать вложения в "Таблица 2"?

#2 Radik

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

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

Отправлено 07 Ноябрь 2013 - 12:13

Хотелось бы получить ответ от разработчиков...

#3 CbCoder

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

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

Отправлено 07 Ноябрь 2013 - 12:24

Для вычислений права доступа значения не имеют. Залезаете напрямую в бд, в поле с файлами, достаете оттуда список загруженных файлов. Затем, через функцию get_file_path($field_id, $line_id, $name_file) получаете путь к файлу на диске.

#4 Radik

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

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

Отправлено 08 Ноябрь 2013 - 01:12

как корректно скопировать поле тип "файл" (вложено много файлов) в другое поле тип файл ?

#5 andibrag

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

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

Отправлено 08 Ноябрь 2013 - 08:09

Просмотр сообщенияRadik (08 Ноябрь 2013 - 01:12) писал:

как корректно скопировать поле тип "файл" (вложено много файлов) в другое поле тип файл ?
Вам не нужно поле файл. Создаете в Таблице_2 поле текст, многострочное, с отображением HTML форматирования, например Вложения.
В Таблице_1 делаете вычисление при изменении поля f2222
$files = preg_split("/[\n]+/", $line['f2222']);
$files_link='';
	foreach ($files as $filename)
	{
	 $file_path = get_file_path('2222' ,$ID , $filename); // Получаем путь к файлу
	 $filename = trim($filename);
	 $files_link = $files_link?$files_link . "<br/>":$files_link;
	 $files_link .= '<a href="open_file.php?table={номер таблицы 1}&field=2222&line=' . $ID . '&file=' . urlencode($filename) . '">' . $filename  . '</a>';
	}	
update_query( array( 'Вложения' => $files_link ) , 'Таблица_2' , '`f3333`=' . $ID );
В данном примере соотношение таблиц один к одному, т.е. на одну запись в таблице 1, приходится одна запись в таблице 2.

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

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

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


#6 Radik

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

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

Отправлено 08 Ноябрь 2013 - 13:57

спасибо, пробую. как вычисление делать при изменении "Таблица 2 поле f3333 тип связь" , так как при прикреплении файла - связи еще может не быть...?

Сообщение отредактировал Radik: 08 Ноябрь 2013 - 13:58


#7 andibrag

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

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

Отправлено 08 Ноябрь 2013 - 14:09

Просмотр сообщенияRadik (08 Ноябрь 2013 - 13:57) писал:

как вычисление делать при изменении "Таблица 2 поле f3333 тип связь" , так как при прикреплении файла - связи еще может не быть...?
Трудно советовать не понимая структуры и что за чем делается. Логика подсказывает, что если связанной записи нет, значит ее нужно либо создать (через insert_query например) и внести данные, либо просто игнорировать вычисление, если она не нужна. А если есть - значит обновить через update_query.

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

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

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


#8 Radik

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

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

Отправлено 08 Ноябрь 2013 - 16:02

Ошибка SQL запроса:

UPDATE f_data171 SET WHERE f7261=107

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE f7261=107' at line 1


Код:

$files = preg_split("/[\n]+/", $line['Платежка']);
$files_link='';
foreach ($files as $filename)
{
$file_path = get_file_path('7241' ,$ID , $filename); // Получаем путь к файлу
$filename = trim($filename);
$files_link = $files_link?$files_link . "<br/>":$files_link;
$files_link .= '<a href="open_file.php?table={551}&field=7241&line=' . $ID . '&file=' . urlencode($filename) . '">' . $filename . '</a>';
}
update_query( array( 'f8081' => $files_link ), 'LCL' , 'f7261=' . $ID );

#9 CbCoder

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

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

Отправлено 08 Ноябрь 2013 - 16:28

Функция update_query работает с "внешними" именами полей, а не внутренними. Вероятно, спутали с data_update.

update_query( array( 'Мое поле' => $files_link ), 'LCL' , 'f7261=' . $ID );

#10 Radik

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

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

Отправлено 14 Ноябрь 2013 - 12:26

Спасибо, работает.

#11 skazkin

    Новичок

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

Отправлено 04 Февраль 2014 - 16:28

Вопрос к разработчикам:
Подскажите, как передать файл (поле тип "файл") из подчиненной таблицы в основную таблицу (в поле тип "файл") при помощи вычисления.
(в тех. поддержке сказали, что решение у разработчика есть, но лучше написать в этой теме)

#12 CbCoder

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

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

Отправлено 12 Февраль 2014 - 11:39

Если кратко, общими словами, то алгоритм такой:
  • Копируем содержимое поля файл, из подчиненной записи в родительскую. Это стандартная операция, аналогичная, например, переносу текстового поля. При этом перенесется только имя файла.
  • Копируем сам прикрепленный файл. Файлы хранятся в папке files. Узнать путь к исходному файлу можно через функцию get_file_path($field_id1, $line_id1, $filename), сохранить по новому пути через save_data_file($field_id2, $line_id2, $filename, $data). Примеры применения ищите на форуме.






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

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