
[spoiler]
1. События
Добавлены события на удаление цен.
Класс CPrice, метод Delete()
- OnBeforePriceDelete - позволяет отменить удаление
- OnPriceDelete - выполнение каких-то действий в процессе удаления цены
- OnBeforeProductPriceDelete - позволяет отменить удаление всех цен продукта или каких-то конкретных (например, в нужной валюте)
- OnProductPriceDelete - выполнение каких-то действий в процессе удаления цен
2. Редактирование и копирование профилей собственных обработчиков импорта и экспорта
Как уже , в собственные (или кастомизированные) обработчики импорта и экспорта редактирование профилей придется добавлять самим. Для этого потребуется немного изменений. Рассмотрим их на примере CSV экспорта (отличия для импорта будут указываться прямо в тексте). Все изменения вносятся в файл мастера экспорта (импорта) - код_обработчика_setup.php.
Итак, править будем csv_setup.php
Переменная $ACTION содержит код операции:
- EXPORT_SETUP - создание профиля (уже есть в коде)
- EXPORT_EDIT - редактирование
- EXPORT_COPY - копирование
В форму мастера экспорта добавляем такой код:
<?if ($ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY')
{
?><input type="hidden" name="PROFILE_ID" value="<? echo intval($PROFILE_ID); ?>"><?
}
?>
|
В режимах редактирования и копирования профиля доступен ассоциативный массив $arOldSetupVars. Массив содержит сохраненные настройки и имя профиля. Ключи массива - имена полей, перечисленные в $SETUP_FIELDS_LIST. Для нашего примера структура $arOldSetupVars такова:
$arOldSetupVars = array( 'IBLOCK_ID' =>, 'SETUP_FILE_NAME' =>, 'fields_type' =>, 'delimiter_r' =>, 'delimiter_other_r' =>, 'first_names_r' =>, 'first_line_names' =>, 'field_needed' =>, 'field_num' =>, 'field_code' =>, 'SETUP_PROFILE_NAME' => ); |
if (($ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY') && $STEP == 1)
{
if (isset($arOldSetupVars['IBLOCK_ID']))
$IBLOCK_ID = $arOldSetupVars['IBLOCK_ID'];
}
if ($STEP>1)
{
// валидация полей после шага
} |
На втором шаге редактируются остальные настройки профиля и мы их инициализируем. Но часть настроек (перечень свойств инфоблока) зависит от первого шага. Поэтому происходит проверка - не сменили ли мы инфоблок:
if (($ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY') && $STEP == 2)
{
if (isset($arOldSetupVars['fields_type']))
$fields_type = $arOldSetupVars['fields_type'];
if (isset($arOldSetupVars['delimiter_r']))
$delimiter_r = $arOldSetupVars['delimiter_r'];
if (isset($arOldSetupVars['delimiter_r_char']))
$delimiter_r_char = $arOldSetupVars['delimiter_r_char'];
if ($arOldSetupVars['delimiter_other_r'])
$delimiter_other_r = $arOldSetupVars['delimiter_other_r'];
if (isset($arOldSetupVars['first_names_r']))
$first_names_r = $arOldSetupVars['first_names_r'];
if (isset($arOldSetupVars['first_line_names']))
$first_line_names = $arOldSetupVars['first_line_names'];
if (isset($arOldSetupVars['SETUP_FILE_NAME']))
$SETUP_FILE_NAME = $arOldSetupVars['SETUP_FILE_NAME'];
if (isset($arOldSetupVars['SETUP_PROFILE_NAME']))
$SETUP_PROFILE_NAME = $arOldSetupVars['SETUP_PROFILE_NAME'];
/* Если инфоблок тот же - заполняем перечень свойств инфоблока */
if ($arOldSetupVars['IBLOCK_ID'] == $IBLOCK_ID)
{
if (isset($arOldSetupVars['field_needed']))
$field_needed = $arOldSetupVars['field_needed'];
if (isset($arOldSetupVars['field_num']))
$field_num = $arOldSetupVars['field_num'];
if (isset($arOldSetupVars['field_code']))
$field_code = $arOldSetupVars['field_code'];
}
}
if ($STEP>2)
{
// валидация полей после шага
}
|
Изменяем условие показа поля SETUP_PROFILE_NAME. Раньше было:
if ($ACTION=="EXPORT_SETUP")
{
// показываем поле SETUP_PROFILE_NAME
}
|
if ($ACTION=="EXPORT_SETUP" || $ACTION == 'EXPORT_EDIT' || $ACTION == 'EXPORT_COPY')
{
// показываем поле SETUP_PROFILE_NAME
}
|
UPD. Для тех, кто кастомизировал экспорт в Яндекс (/bitrix/modules/catalog/load/yandex_setup.php)
В своих скриптах замените строку
/bitrix/tools/catalog_export/yandex_util.php?IBLOCK_ID=<?=intval($IBLOCK_ID)?> |
/bitrix/tools/catalog_export/yandex_util.php?IBLOCK_ID=<?=intval($IBLOCK_ID)?>&<? echo bitrix_sessid_get(); ?> |