[spoiler]
1. События
Добавлены события на удаление цен.
Класс CPrice, метод Delete()
- OnBeforePriceDelete - позволяет отменить удаление
- OnPriceDelete - выполнение каких-то действий в процессе удаления цены
- OnBeforeProductPriceDelete - позволяет отменить удаление всех цен продукта или каких-то конкретных (например, в нужной валюте)
- OnProductPriceDelete - выполнение каких-то действий в процессе удаления цен
2. Редактирование и копирование профилей собственных обработчиков импорта и экспорта
Как уже
Итак, править будем 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(); ?> |