Загрузить вложения из связанных записей

Все вопросы/проблемы по установке и использовании.
Ответить
alumin
Сообщения: 8
Зарегистрирован: 06 янв 2021, 20:39
Имя: Алексей
Откуда: РФ, Динская

Загрузить вложения из связанных записей

Сообщение alumin »

Доброго времени суток!
Подскажите пожалуйста, как можно решить следующую задачу:
1. Есть сущность "Лабораторные исследования" (38)
2. Есть сущность "Полученные результаты" (39)
3. В сущности "Полученные результаты" создаются записи по крону из писем с вложениями полученных на почту.
4. Через автоматизацию по MySQL запросу устанавливается связь Исследований и Результатов, с помощью указанного в Исследовании номера. То есть берутся все записи в которых присутствует указанный в записи Исследования номер присутствующий в результатах и создается связь с таблицей Исследования. На этом этапе все нормально и открывая Исследование, мы видим таблицу с Результатами.
5. В каждом результате есть Вложение, файл pdf, он тоже берется из письма и успешно копируется в запись, доступен в ней при открытии этой записи.

Когда появляются результаты, клиенту отправляется смс с ссылкой на страницу (php скрипт), который через API берет из сущности 38 и показывает: Название исследования, дату (берет это он из сущности 38) и должен показывать ссылки на pdf с результатами (их может быть более чем 1, как правило 2-3 и более), которые нужно брать из связанных записей из сущности 39.

Вот код php-страницы, ссылка на которую отправляется клиенту. Но там показывает только Заголовки записей с результатами.

Код: Выделить всё

<?php

$i=$_GET['i'];

$params = array(
  'key' => 'апиключ',  
  'username' => 'пользователь',
  'password' => 'пароль',
  'action' => 'select',
  'entity_id' => 38, //ID сущности, из которой будут выбираться записи
  'limit' => 0, //Если не указан, выбираются все строки 
  'select_fields' => '405,409,422,411', //ID полей, значения которых будут выбираться
    'filters' => array(
        '409'=> $i, //Фильтр по числовому полю (код исследования)
  )
);
						                                    
$ch = curl_init('https://адрес_сайта/api/rest.php');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);			
$result = curl_exec($ch);
curl_close($ch);

if($result)
{
  $result = json_decode($result,true);
  
  //print_r($result);
}

?>
<html>
<body>
<table>
<tr>
<td>Код</td>
<td><?php print_r($result[data][0][409]); ?></td>
</tr>
<tr>
<td>Наименование исследования</td>
<td><?php print_r($result[data][0][405]); ?></td>
</tr>
<tr>
<td>Дата и время сдачи биоматериала</td>
<td><?php print_r($result[data][0][411]); ?></td>
</tr>
<tr>
<td>Результаты</td>
<td><?php print_r($result[data][0][422]); ?></td> 
//(сейчас тут названия связанных записей, а нужно что бы были ссылки на файлы во вложении из этих связанных записей)
</tr>
</table>

</body>
</html>
Вопрос, как на этой странице показать ссылки на файлы вложений в связанных результатах, а не их заголовки только?
Все для того, что бы клиент, без авторизации, получал результаты через ссылку отправленную ему по смс.
Заранее благодарю и извиняюсь, если вопрос простой, но уже неделю голову ломаю как это сделать.
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 1196
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич
Контактная информация:

Re: Загрузить вложения из связанных записей

Сообщение Fait »

Можно сделать так:
1) Создать в сущности 38 новое поле с типом PHP скрипт, в котором будут генерироваться ссылки на файлы через запятую. Если возникнут сложности, как это сделать, могу помочь.
2) В список возвращаемых полей через API добавляем ID этого поля, и получаем значение.
3) Разбираем полученное значение (в случае, если файлов несколько) пропускаем через explode. Затем перебираем полученный цикл и формируем итоговую строку для клиента, попутно оборачивая каждую ссылку в тег <a>, чтобы у клиента не просто текстом ссылка была.

Если нужна будет помощь в реализации, то напишите, я смогу реализовать вам эту возможность.
alumin
Сообщения: 8
Зарегистрирован: 06 янв 2021, 20:39
Имя: Алексей
Откуда: РФ, Динская

Re: Загрузить вложения из связанных записей

Сообщение alumin »

Благодарю, интересное решение.
Получается практически все через код будет работать, думал можно как-то встроенными средствами это решить.
Там возможно придется еще добавлять поле отправлен/не отправлен, так как результаты тоже приходят в разное время, и может один раз сразу два результата добавится, а может 1 и отправлять первые два к примеру второй раз нет смысла. Подумаю над кодом, но направление теперь понятно.
Аватара пользователя
Fait
Инвестор
Инвестор
Сообщения: 1196
Зарегистрирован: 19 ноя 2020, 17:46
Имя: Максим Балакшеев
Откуда: Россия, Златоуст
Организация: ИП Балакшеев Максим Георгиевич
Контактная информация:

Re: Загрузить вложения из связанных записей

Сообщение Fait »

alumin писал(а): 01 фев 2024, 18:01 Благодарю, интересное решение.
Получается практически все через код будет работать, думал можно как-то встроенными средствами это решить.
Там возможно придется еще добавлять поле отправлен/не отправлен, так как результаты тоже приходят в разное время, и может один раз сразу два результата добавится, а может 1 и отправлять первые два к примеру второй раз нет смысла. Подумаю над кодом, но направление теперь понятно.
Да, штатными средствами увы, никак.
Кодом можно добиться очень больших успехов ;)
alumin
Сообщения: 8
Зарегистрирован: 06 янв 2021, 20:39
Имя: Алексей
Откуда: РФ, Динская

Re: Загрузить вложения из связанных записей

Сообщение alumin »

Написал в ЛС )
Ответить