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

Просмотрщик

Описание и подключение

Javascript-расширение ui.viewer позволяет автоматически просматривать разные типы файлов, сохраненные в b_file, например, офисные документы, видео- и аудиофайлы, файлы с кодом, автоматически конвертируя их, а также свои кастомные типы. При этом учитывается оригинальная проверка прав в модуле.

Подключение на PHP-странице


Подключение простое. Во-первых, нужно загрузить расширение:

\Bitrix\Main\UI\Extension::load("ui.viewer");

Во-вторых, чтобы по клику на ссылку или другую DOM-ноду, запускался просмотрщик, необходимо указать специальные data-атрибуты. Для этого лучше воспользоваться классом \Bitrix\Main\UI\Viewer\ItemAttributes:


//уверен, у вас есть id из b_file.ID
$fileId = 2208;

//и уверен, что у вас есть ссылка на скачивание этого файла.  
//Ведь его как-то получают пользователи?  
$urlToDownload = '/show_file.php?haha=hihi';

$attributes = \Bitrix\Main\UI\Viewer\ItemAttributes::tryBuildByFileId($fileId, $urlToDownload);
$attributes->setTitle("Назови меня своим именем.mp4");

...
//а дальше в месте вывода html'a вам необходимо просто вывести $attributes
echo "<div {$attributes}>Прикрепленный файл</div>";

//либо как-то так
<div <?= ItemAttributes::tryBuildByFileId($fileId, $urlToDownload)->setTitle('July.jpg')) ?> >Просмотреть файл</div>

Важно! Ваша точка отдачи файла должна работать с записью из b_file. И вызывать либо \CFile::viewByUser, либо \Bitrix\Main\Engine\Response\BFile, передавая ID файла, так как именно по ID файла и происходит "магия".


Поддержка листания нескольких файлов на странице

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


use \Bitrix\Main\UI\Viewer\ItemAttributes;
$attributes = ItemAttributes::tryBuildByFileId($fileId, $urlToDownload)
	->setTitle("Назови меня своим именем.mp4")
	->setGroupBy("blog-post-4")
;

Теперь при запуске просмотра, листание файлов будет между объектами, у которых установлена группа в blog-post-4.

Установка действий

По умолчанию при просмотре файла выводится действие "Скачать". Если необходимо добавить свои действия, то используйте ItemAttributes::addAction.


use \Bitrix\Main\UI\Viewer\ItemAttributes;
$attributes = ItemAttributes::tryBuildByFileId($fileId, $urlToDownload)
		->setTitle("Назови меня своим именем.mp4")
		->addAction([
			'type' => 'edit',
			'action' => 'BX.SomeModule.Handlers.runEdit',
		])
		->addAction([
			'type' => 'destroy',
			'text' => 'Destroy The Universe',
			'action' => 'BX.SomeModule.Handlers.destroy', //ссылка на фунцкию-обработчик
			'buttonIconClass' => 'ui-btn-icon-remove', //класс иконки кнопки
			'params' => [ //параметры, которые будут переданы внутрь функции-обработчика
				'objectId' => 4546,
			],
			//js-расширение, в котором находятся функции-обработчики.Это расширение будет автоматически загружено при просмотре
			'extension' => 'someModule.viewer.actions', 
		]),
		->addAction([
			'type' => 'order',
			'text' => 'Выбрать режим',
			//выпадающее меню. Формат пунктов см. в BX.PopupMenuWindow
			'items' => [
				[
 					'text' => 'Item 1',
					'onclick' => "BX.SomeModule.Handlers.handleClick(1)",
				],            
				[
					'text' => 'Item 2',
					'onclick' => "BX.SomeModule.Handlers.handleClick(2)",
			],
		])
;

Важно! В action передается ссылка на js-функцию, которая будет вызвана при клике на кнопку в просмотрищке. В функцию будет передан текущий просматриваемый элемент и доп.параметры.


/**
 * @param {BX.UI.Viewer.Item} item
 * @param {Object} params
 */
BX.SomeModule.Handlers.destroy = function(item, params)
{
	//some work
	console.log(params.objectId); //выведет 4546
}

Отметим, что по умолчанию есть тексты, иконки для type:

  • download
  • edit
  • share
  • print
  • info
  • delete

Советы

Просмотрщик спроектирован так, чтобы легко запускаться и внутри слайдера-iframe, поэтому обязательно оформляйте js-обработчики в расширения и указывайте их при добавлении addAction.

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

Если у вас уже загружены данные по b_file.ID, то воспользуйтесь

\Bitrix\Main\UI\Viewer\ItemAttributes::tryBuildByFileData(array $fileData, $sourceUri);


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Илья Черкасов
Сообщение не промодерировано, возможны ошибки и неточности.
Для того, чтобы отображение файла сработало, эндпоинт должен отдать файл через следующую конструкицю:
Код
$file_response = \Bitrix\Main\Engine\Response\BFile::createByFileId($file_id);
$file_response->send();
// где $file_id - id файла из таблицы b_file
С использованием CFile::viewByUser($file_id); не разобрался, эндпоинт с использованием данной функции вроде отдает контент файла, но ui.viewer не может его спарсить и выкидывает ошибку в консоли браузера.
1
Кирилл Молчанов
Сообщение не промодерировано, возможны ошибки и неточности.
BX.SomeModule.Handlers.runEdit - собственно где получить то что может использоватся вместо SomeModule? Например Битрикс24 Docs? Как называется обработчик?
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх