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