Таблица oc_order_download
Таблица oc_order_download предназначена для управления загружаемыми товарами (цифровыми товарами), приобретенными в заказах. Она связывает заказ, товар и файл для скачивания, а также контролирует лимиты и историю скачиваний.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
order_download_id |
int |
Уникальный идентификатор записи о загрузке в заказе. |
order_id |
int |
Внешний ключ, связывающий запись с конкретным заказом. Ссылается на таблицу oc_order.
|
order_product_id |
int |
Внешний ключ, связывающий запись с конкретной позицией (товаром) в заказе. Ссылается на таблицу oc_order_product.
|
name |
varchar(64) |
Название файла для скачивания, которое видит покупатель. |
filename |
varchar(128) |
Имя файла на сервере (путь относительно папки system/storage/download).
|
mask |
varchar(128) |
Маскированное имя файла, которое используется для формирования ссылки для скачивания и обеспечения безопасности. |
remaining |
int |
Количество оставшихся разрешенных скачиваний. При достижении 0 скачивание становится недоступным. |
Как это работает
Когда клиент покупает цифровой товар (для которого в карточке товара в админке указаны файлы для скачивания), после смены статуса заказа на "Выполнен" (или другой статус, для которого в настройках разрешено скачивание) в таблице oc_order_download создается запись.
Поле remaining инициализируется значением, указанным в настройках файла для скачивания в карточке товара. Каждое успешное скачивание уменьшает это значение на 1.
Поля filename и mask используются системой для безопасной выдачи файла. Пользователь скачивает файл не по прямому пути, а через специальный скрипт (например, index.php?route=account/download/download), который проверяет права доступа и использует mask для поиска нужного файла на сервере.
Клиент может увидеть свои доступные загрузки и историю скачиваний в Личном кабинете, в разделе "История загрузок".
Пример SQL-запроса
Получить все активные загрузки для заказа с ID 123, у которых еще остались попытки:
SELECT od.*, op.name as product_name
FROM oc_order_download od
LEFT JOIN oc_order_product op ON (od.order_product_id = op.order_product_id)
WHERE od.order_id = 123
AND od.remaining > 0;
Смотрите также
-
таблицу
oc_order,
которая хранит основную информацию о заказах -
таблицу
oc_order_product,
которая содержит товарные позиции заказов -
таблицу
oc_product_to_download,
которая связывает товары с доступными для скачивания файлами -
таблицу
oc_download,
которая является справочником всех файлов для скачивания в системе