Документация для разработчиков
Темная тема

Введение

Внимание! Мы настоятельно рекомендуем ознакомиться сначала с REST-документацией модуля Сайты, чтобы понять как модуль функционирует (тем более REST доступен и в коробочной версии). Данную документацию рассматривайте как подспорье при работе в коробке, когда вам действительно мало функционала REST, или вы хотите детальнее разобраться в API.

Файлы в Сайтах24 хранятся как и файлы остальной системы в таблице b_file и взаимодействие с ними происходит посредством класса CFile. Но есть также дополнительная прослойка API, которая следит за количеством "ссылок" на файл.

Чтобы лучше понять необходимость прослойки, стоит обратиться к блокам. Представьте, что вы добавили картинку в блок. Это одна запись в таблице b_file. Потому этот блок скопировали, вот записи уже две. А потом скопировали страницу, записи (на рассматриваемый файл) уже три. А теперь удаляем самый первый блок. И вот тут прослойка контролирует, нет ли больше ссылок на данный файл? Если нет, она удаляет файл и на диске через CFile::delete. В ином случае удаления физического не происходит.

Если въедливый читатель пойдет дальше, то он увидит, что при удалении сущности (например, блока) удаление файла не произойдет сразу (даже если он остался единственным). Запись в таблице-прослойке пометится как запись к удалению, и только системный агент позже произведет анализ и удаление. Это сделано для оптимизации.

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

Чтобы система понимала, где какой файл внутри блока, каждая нода, содержащая картинку, автоматически маркируется дата-атрибутами data-fileid и data-fileid2x, где хранится непосредственно идентификатор файла для обычной версии и для ретина-версии.

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

if (\Bitrix\Main\Loader::includeModule('landing'))
{
	// идентификатор некоего файла из таблицы b_file
	$fileId = 123;
	// прикрепление файла к сайту ид=1
	Bitrix\Landing\File::addToSite(1, $fileId);
	// удаление привязки к файлу (или массиву файлов) от сайта ид=1
	Bitrix\Landing\File::deleteFromSite(1, $fileId);
	// прикрепление файла к странице ид=1
	Bitrix\Landing\File::addToLanding(1, $fileId);
	// удаление привязки к файлу (или массиву файлов) от страницы ид=1
	Bitrix\Landing\File::deleteFromLanding(1, $fileId);
	// прикрепление файла к блоку ид=1
	Bitrix\Landing\File::addToBlock(1, $fileId);
	// удаление привязки к файлу (или массиву файлов) от блока ид=1
	Bitrix\Landing\File::deleteFromBlock(1, $fileId);
	// замена файла (или массива файлов) в блоке ид=1 (старые привязки будут удалены)
	Bitrix\Landing\File::replaceInBlock(1, $fileId);
	// получение массива файлов из текста $content (атрибуты data-fileid)
	Bitrix\Landing\File::getFilesFromBlockContent(1, $content);
	// копирует файлы блока от одного к другому
	Bitrix\Landing\File::copyBlockFiles(1, 2);
	// финальный уборщик, проверяющий помеченные к удалению привязки и удаляющий файлы
	Bitrix\Landing\File::deleteFinal(30);
	// получить список всех ид файлов с блока ид=1
	Bitrix\Landing\File::getFilesFromBlock(1);
	// получить список всех ид файлов со страницы ид=1
	Bitrix\Landing\File::getFilesFromLanding(1);
	// получить список всех ид файлов с сайта ид=1
	Bitrix\Landing\File::getFilesFromSite(1);
}


© «Битрикс», 2001-2024, «1С-Битрикс», 2024