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

Шаблоны экспорта (для разработчиков)

Информация, содержащаяся в этом разделе, является дополнительной к описанию шаблонов экспорта в разделе Экспорт. Детальное описание.

Шаблоны экспорта

Шаблоны должны быть расположены в каталоге /bitrix/php_interface/include/catalog_export/. Предустановленные шаблоны содержат только подключение реальных скриптов. Пользовательские шаблоны должны содержать весь код, который необходим для экспорта. В качестве шаблонов система предлагает все файлы этого каталога, оканчивающиеся на _run.php. Если в этом каталоге находится файл с таким же именем, но оканчивающийся на _setup.php, то система считает этот файл файлом дополнительных настроек (мастером экспорта) для соответствующего шаблона экспорта.

Если в начале шаблона экспорта находится тег <title> (возможно, в PHP комментариях), то содержимое этого тега принимается за название шаблона экспорта. В противном случае названием шаблона становится имя его файла.

Вы можете добавить в каталог /bitrix/php_interface/include/catalog_export/ любое количество произвольных шаблонов экспорта.

Шаблон экспорта

Шаблон экспорта представляет собой обычный PHP скрипт, в котором нет вывода данных. В этом скрипте доступны все стандартные переменные, а так же все переменные, которые установлены в мастере экспорта.

Шаблон экспорта может установить переменную $strExportErrorMessage, содержащую текстовое описание ошибок, которые произошли при выполнении экспорта. В этом случае система будет интерпретировать экспорт как неудачный и выведет содержимое переменной $strExportErrorMessage на экран.

Если после выполнения экспорта системе будет доступна переменная $SETUP_FILE_NAME, то система будет интерпретировать содержимое этой переменной как путь к файлу данных, в который был произведен экспорт. Путь может быть относительным или абсолютным. Система по окончании экспорта отобразит полный путь к файлу данных на экране.

Пример простейшего шаблона экспорта

<?
//<title>Простейший</title>
// Выведем в файл данных название выбраного инфоблока
$strName = "";

// Переменная $IBLOCK_ID должна быть установлена
// мастером экспорта или из профиля
// Переменная $SETUP_FILE_NAME должна быть установлена 
// мастером экспорта или из профиля
$IBLOCK_ID = IntVal($IBLOCK_ID);

// Модули каталога и инфоблоков уже подключены
$db_res = CIBlock::GetList(
	Array(), 
	Array("ID"=>IntVal($IBLOCK_ID))
);
if ($ar_res = $db_res->Fetch())
{
	$strName = $ar_res["NAME"];
}

if (strlen($strName)>0)
{
	if ($fp = @fopen($_SERVER["DOCUMENT_ROOT"].$SETUP_FILE_NAME, 'wb'))
	{
		@fwrite($fp, $strName);
		@fclose($fp);
	}
	else
	{
		$strExportErrorMessage = "Ошибка открытия файла данных на запись";
	}
}
else
{
	$strExportErrorMessage = "Информационный блок не найден";
}
?>

Мастер экспорта

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

Мастер экспорта может быть многошаговым. В этом случае следует использовать переменную $STEP, содержащую текущий шаг мастера. На следующий шаг переменная $STEP должна переходить с увеличенным соответственно значением.

На последнем шаге переменная $FINITE должна быть установлена в значение True. Система воспринимает эту ситуацию как конец мастера экспорта и передает управление на шаблон экспорта или на сохранение профиля.

После окончания мастера экспорта должна быть доступна переменная $SETUP_FIELDS_LIST, содержащая список имен переменных, устанавливаемых мастером экспорта. Имена переменных должны быть разделены запятыми.

Если в качестве действия было вызвано создание профиля экспорта (т.е. переменная $ACTION равна EXPORT_SETUP), то после окончания мастера экспорта должна быть доступна переменная $SETUP_PROFILE_NAME, содержащая имя создаваемого профиля.

В качестве переменной, содержащей путь к файлу данных, в который производится экспорт, рекомендуется использовать переменную $SETUP_FILE_NAME. В этом случае после окончания экспорта система подскажет пользователю полный путь к файлу данных.

Пример простейшего мастера экспорта

<?
$strMyError = "";

if ($STEP>1)
{
	$IBLOCK_ID = IntVal($IBLOCK_ID);
	if ($IBLOCK_ID <= 0)
	{
		$strMyError .= "Инфоблок не выбран.<br>";
	}

	if (strlen($SETUP_FILE_NAME) <= 0)
		$strMyError .= "Не указан файл данных.<br>";

	if ($ACTION=="EXPORT_SETUP" && strlen($SETUP_PROFILE_NAME)<=0)
		$strMyError .= "Не указано имя профиля<br>";

	if (strlen($strMyError) > 0)
	{
		$STEP = 1;
	}
}

echo ShowError($strMyError);

if ($STEP==1)
{
	?>
	<form method="post" action="<?echo $APPLICATION->GetCurPage() ?>">
<? echo bitrix_sessid_post(); ?>
		Выберите инфоблок:
		<select name="IBLOCK_ID">
		<?
		$db_res = CIBlock::GetList(Array(
			"iblock_type"=>"asc", 
			"name"=>"asc"
		));
		while ($res = $db_res->Fetch())
		{
			?>
			<option value="<?echo $res["ID"] ?>"
			<?if (IntVal($res["ID"]) == $IBLOCK_ID)
				  echo " selected";?>><?echo $res["NAME"];?></option>
			<?
		}
		?>
		</select><br>

		Укажите имя файла данных:
		<input type="text" name="SETUP_FILE_NAME" 
		value="<?echo (strlen($SETUP_FILE_NAME)>0) ? 
			htmlspecialchars($SETUP_FILE_NAME) : 
			"/upload/file.csv" ?>" size="50">
		<br>

		<?if ($ACTION=="EXPORT_SETUP"):?>
			Имя профиля:
			<input type="text" name="SETUP_PROFILE_NAME" 
			value="<?echo htmlspecialchars($SETUP_PROFILE_NAME)?>" 
			size="30">
			<br>
		<?endif;?>

		<?//Следующие переменные должны быть обязательно установлены?>
		<input type="hidden" name="lang" value="<?echo $lang ?>">
		<input type="hidden" name="ACT_FILE" 
		value="<?echo htmlspecialchars($_REQUEST["ACT_FILE"]) ?>">
		<input type="hidden" name="ACTION" value="<?echo $ACTION ?>">
		<input type="hidden" name="STEP" value="<?echo $STEP + 1 ?>">
		<input type="hidden" name="SETUP_FIELDS_LIST" 
		value="IBLOCK_ID,SETUP_FILE_NAME">
		<input type="submit" 
		value="<?echo ($ACTION=="EXPORT") ?
			"Экспортировать" :
			"Сохранить";?>">
	</form>
	<?
}
elseif ($STEP==2)
{
	// Второй шаг не нужен, говорим "передать управление дальше"
	$FINITE = True;
}
?>


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

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

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

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх