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

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

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

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

Шаблоны должны быть расположены в каталоге /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