Шаблоны экспорта (для разработчиков)
Информация, содержащаяся в этом разделе, является дополнительной к описанию шаблонов экспорта в разделе Экспорт. Детальное описание.
Шаблоны экспорта
Шаблоны должны быть расположены в каталоге /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;
}
?>