Помогите с переписать цену при импорте в Bitrix

Статус
В этой теме нельзя размещать новые ответы.

Menro

web, seo, email, hack
Регистрация
27 Янв 2008
Сообщения
689
Реакции
138
Добрый день!
Я думаю, что знать Bitrix тут прям не особо важно, главное понимать PHP. По-этому, пришёл в эту ветку за помощью.

Имею некий скрипт, который импортирует некий XML файл, и на основании него создаёт товары.
Есть в этом файле две цены, и сейчас у меня проблема, что нужно одну из этих цен, поместить вместо другой. Разработчик этого скрипта предусмотрел, что можно сделать какие-то операции с данными после каких-то событий и у меня чуть-чуть не получается....

Если пишу вот так:

PHP:
    function PreparePrice(&$arPriceFields, $arOffer, $ID){//перед созданием цены
   
        $arPriceFields['PRICE'] = '1';
       
    }

Тогда всем товарам назначается цена 1. Ок, уже не плохо, теперь вместо 1, мне нужно засунуть туда цену из нужного мне поля, которую достаю я в другой функции:

PHP:
    function PrepareProps(&$PROPS, $arOffer){
   
    $PROPS['PROP_2083'] = $PROPS['YML2_RRTS']; //пропишет в нужную мне цену в отдельное поле (не в поле цена)

    }

Теперь собственно вопрос: как мне вытащить значение $PROPS['YML2_RRTS'] в функции PreparePrice?

Спасибо!
 
PHP:
function PreparePrice(&$arPriceFields, $arOffer, $ID){//перед созданием цены
        $arPriceFields['PRICE'] = '1';
        ... // get $PROPS['YML2_RRTS']
        return $PROPS['YML2_RRTS'];
}

function PrepareProps(&$PROPS, $arOffer){
        $arPriceFields1 = ?;
        $ID1 = ?;
        $PROPS['PROP_2083'] = PreparePrice($arPriceFields1, $arOffer, $ID1); //пропишет в нужную мне цену в отдельное поле (не в поле цена)
}
Если что задавайте вопросы, мало информации по входным данным чтобы лучше расписать)
Но на вопрос думаю ответил. return $PROPS['YML2_RRTS'];
 
Последнее редактирование:
PHP:
function PreparePrice(&$arPriceFields, $arOffer, $ID){//перед созданием цены
        $arPriceFields['PRICE'] = '1';
        ... // get $PROPS['YML2_RRTS']
        return $PROPS['YML2_RRTS'];
}

function PrepareProps(&$PROPS, $arOffer){
        $arPriceFields1 = ?;
        $ID1 = ?;
        $PROPS['PROP_2083'] = PreparePrice($arPriceFields1, $arOffer, $ID1); //пропишет в нужную мне цену в отдельное поле (не в поле цена)
}
Если что задавайте вопросы, мало информации по входным данным чтобы лучше расписать)
Но на вопрос думаю ответил. return $PROPS['YML2_RRTS'];
Если честно то не догоняю...

Попробовал так:

PHP:
    function PreparePrice(&$arPriceFields, $arOffer, $ID){//перед созданием цены

        $arPriceFields['PRICE'] = $PROPS['YML2_RRTS'];
        return $PROPS['YML2_RRTS'];
       
    }

Не пашет.
Как я это понимаю, то в функцию нужно передать аргументы типа: PreparePrice(&$arPriceFields, $arOffer, $ID, $PROPS)

Потому как внутри функции PreparePrice, $PROPS - пустой, а внутри PrepareProps содержит данные.

Чуть больше данных:

$arPriceFields - содержит поля с ценой
$arOffer - это элемент XML файла который парсится
$ID - это ID элемента который парсится
$PROPS - параметры элемента который парсится (в том числе нужный мне параметр $PROPS['YML2_RRTS'], который нужно прописать в $arPriceFields)
 
Тогда всем товарам назначается цена 1.
теперь вместо 1, мне нужно засунуть туда цену из нужного мне поля, которую достаю я в другой функции:
PHP:
PrepareProps

PHP:
function PrepareProps(&$PROPS, $arOffer){
    $PROPS['PROP_2083'] = $PROPS['YML2_RRTS']; //пропишет в нужную мне цену в отдельное поле (не в поле цена)
    $price = ...; // цена из нужного поля, можно сделать проверку там какую нибудь, неужели нельзя нормально исходники показать???
    return $price;
}

PHP:
function PreparePrice(&$arPriceFields, $arOffer, $ID){// перед созданием цены
        $arPriceFields['PRICE'] = PrepareProps($PROPS, $arOffer);
}

на сколько понял задачу... нужно картинку понять что в коде происходит...
выложи сурсы чтоли...
 
чтобы внутри функции была видна глобальная переменная, надо ее объявить внутри функции при помощи ключевого слова global:
PHP:
function PreparePrice(&$arPriceFields, $arOffer, $ID){
  global $PROPS; // теперь массив должен быть не пуст
  $arPriceFields['PRICE'] = '1';
}
 
PHP:
function PrepareProps(&$PROPS, $arOffer){
    $PROPS['PROP_2083'] = $PROPS['YML2_RRTS']; //пропишет в нужную мне цену в отдельное поле (не в поле цена)
    $price = ...; // цена из нужного поля, можно сделать проверку там какую нибудь, неужели нельзя нормально исходники показать???
    return $price;
}

PHP:
function PreparePrice(&$arPriceFields, $arOffer, $ID){// перед созданием цены
        $arPriceFields['PRICE'] = PrepareProps($PROPS, $arOffer);
}

на сколько понял задачу... нужно картинку понять что в коде происходит...
выложи сурсы чтоли...
Извините за нубство, у меня пока ничего не выходит.
Прикрепил 2 файла: core.php это типа основной файл обработчик, а myclass.php это файл в котором я пытаюсь внести изменения...
 

Вложения

  • source.zip
    11,8 KB · Просмотры: 2
Всем спасибо!
Разобрался.
В итоге достал нужные мне данные из $arOffer.

PHP:
$arPriceFields['PRICE'] = $arOffer['param']['1']['VALUE'];
 
Для просмотра ссылки Войди или Зарегистрируйся
вот прога которая работает с csv импортом в exel и обратно,меняем что надо и копируем :)
 
Верно, обычно необходимые данные можно получить просто проверив доступные переменные, print_r. И возможно в них уже есть нужные нам значения.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху