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

Тема в разделе "PHP", создана пользователем Menro, 24 янв 2018.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    686
    Симпатии:
    129
    Добрый день!
    Я думаю, что знать 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?

    Спасибо!
     
  2. NickSan

    NickSan Постоялец

    Регистр.:
    23 авг 2012
    Сообщения:
    68
    Симпатии:
    39
    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'];
     
    Последнее редактирование: 24 янв 2018
    Menro нравится это.
  3. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    686
    Симпатии:
    129
    Если честно то не догоняю...

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

    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)
     
  4. NickSan

    NickSan Постоялец

    Регистр.:
    23 авг 2012
    Сообщения:
    68
    Симпатии:
    39
    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);
    }
    на сколько понял задачу... нужно картинку понять что в коде происходит...
    выложи сурсы чтоли...
     
    Menro нравится это.
  5. Цуиьфыеук

    Цуиьфыеук Создатель Нарушитель

    Регистр.:
    15 янв 2018
    Сообщения:
    37
    Симпатии:
    19
    чтобы внутри функции была видна глобальная переменная, надо ее объявить внутри функции при помощи ключевого слова global:
    PHP:
    function PreparePrice(&$arPriceFields$arOffer$ID){
      global 
    $PROPS// теперь массив должен быть не пуст
      
    $arPriceFields['PRICE'] = '1';
    }
     
    Menro нравится это.
  6. Menro

    Menro web, seo, email, hack

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

    Вложения:

    • source.zip
      Размер файла:
      11,8 КБ
      Просмотров:
      2
  7. Menro

    Menro web, seo, email, hack

    Регистр.:
    27 янв 2008
    Сообщения:
    686
    Симпатии:
    129
    Всем спасибо!
    Разобрался.
    В итоге достал нужные мне данные из $arOffer.

    PHP:
    $arPriceFields['PRICE'] = $arOffer['param']['1']['VALUE'];
     
  8. Mr.Varenik

    Mr.Varenik

    Регистр.:
    5 янв 2018
    Сообщения:
    287
    Симпатии:
    47
  9. alx73

    alx73 Писатель

    Регистр.:
    13 апр 2019
    Сообщения:
    8
    Симпатии:
    0
    Верно, обычно необходимые данные можно получить просто проверив доступные переменные, print_r. И возможно в них уже есть нужные нам значения.
     
Статус темы:
Закрыта.