создание migx параметров при импорте из 1c

Добрый день!
есть такой плагин
<?php
if ($modx->event->name != 'mSyncOnProductImport') return;

 $analogTitle = $properties["Аналог"];
 $analog = $modx->getObject('modResource', array('pagetitle' => $analogTitle));
 $analogId = $analog ? $analog->id : 0;
 
 $colors = explode('•#', $properties["Цвет маркера"]);
 $colorName = $colors[0];
 $color = count($colors) > 1 ? $colors[1] : "";
 
 if (empty($color) && $analogId == 0) return;
 
 $colorTV = '[{"MIGX_id":"1","colorname":"' . $colorName . '","direct":"' . $analogId . '","color":"' . $color . '"}]';
 $resource->setTVValue('scolor', $colorTV);
создает таблицу в migx, но только одну, а как модернизировать, что бы создавались все параметры, если их больше 1
Станислав
09 сентября 2019, 13:46
modx.pro
1
156
0

Комментарии: 13

Павел Романов
09 сентября 2019, 15:00
+1
Как-то так:
<?php
if ($modx->event->name != 'mSyncOnProductImport') return;

$analogTitle = $properties["Аналог"];
$analog = $modx->getObject('modResource', array('pagetitle' => $analogTitle));
$analogId = $analog ? $analog->id : 0;
$colors = explode('•#', $properties["Цвет маркера"]);

foreach($colors as $key => $color){
    $colorTV[$key]['MIGX_id'] = $key;
    $colorTV[$key]['colorname'] = '***'; // данные из $color 
    $colorTV[$key]['direct'] = $analogId;
    $colorTV[$key]['color'] = '***'; // данные из $color
}
 
 $colorTV = json_encode($colorTV);
 $resource->setTVValue('scolor', $colorTV);

«Данные из $color» зависят от того, что у Вас в поле «Цвет маркера».
    Станислав
    09 сентября 2019, 15:14
    0
    работает, но цвета еще надо проставлять и маркер, они разделяются через •#, как их получать теперь?
      Павел Романов
      09 сентября 2019, 15:16
      0
      Я об этом и написал. Что у Вас в $properties[«Цвет маркера»]? Как выглядит строка?
        Станислав
        09 сентября 2019, 15:20
        0
        -<ВариантыЗначений>
        
        
        -<Справочник>
        
        <ИдЗначения>5261fba1-c9a0-11e9-a8cb-7085c2b7a4a6</ИдЗначения>
        
        <Значение>Желтый•#F3F425</Значение>
        
        </Справочник>
        
        
        -<Справочник>
        
        <ИдЗначения>e4118ca6-816e-11e9-a8c9-7085c2b7a4a6</ИдЗначения>
        
        <Значение>розовый•#BE07C5</Значение>
        
        </Справочник>
        
        </ВариантыЗначений>
        вот часть выгрузки
          Павел Романов
          09 сентября 2019, 15:33
          0
          Это в XML, а я про переменную $properties[«Цвет маркера»] в плагине.
          Там, если цветов несколько, что содержится? Только одно значение:
          Желтый•#F3F425
          Или как-то все перечисляются:
          Желтый•#F3F425,розовый•#BE07C5
            Станислав
            09 сентября 2019, 15:43
            0
            почему то попадает только последний вариант, т.е. розовый•#BE07C5
              Павел Романов
              09 сентября 2019, 15:54
              +1
              Тогда нужно либо в 1С их прописывать в одном поле, как-нибудь типа
              Желтый#F3F425•Розовый#BE07C5•Красный#FF0000
              и тогда:
              <?php
              if ($modx->event->name != 'mSyncOnProductImport') return;
              
              $analogTitle = $properties["Аналог"];
              $analog = $modx->getObject('modResource', array('pagetitle' => $analogTitle));
              $analogId = $analog ? $analog->id : 0;
              
              $colors = explode('•', $properties["Цвет маркера"]);
              foreach($colors as $key => $color){
                  $colorTV[$key]['MIGX_id'] = $key;
                  $colorTV[$key]['colorname'] = explode('#',$color)[0]; 
                  $colorTV[$key]['direct'] = $analogId;
                  $colorTV[$key]['color'] = explode('#',$color)[1];
              }
               
              $colorTV = json_encode($colorTV);
              $resource->setTVValue('scolor', $colorTV);

              Либо обратиться в поддержку компонента по поводу множественных значений свойств.
                Станислав
                09 сентября 2019, 15:57
                0
                Спасибо, понял!
                  Станислав
                  09 сентября 2019, 15:59
                  0
                  еще аналоги по такому же принципу работают, видимо их тоже в цикл нужно, но берет он их тоже по последнему значению
                    Станислав
                    09 сентября 2019, 16:02
                    0
                    а не знаете, как еще это свойство
                    -<Изготовитель>
                    
                    <Ид>30c0f313-b2d5-11e9-a8ca-7085c2b7a4a6</Ид>
                    
                    <Наименование>Kristroom</Наименование>
                    
                    </Изготовитель>
                    отправить в поле minishop2 vendor, стандартный не работает, это из import xml
                      Павел Романов
                      09 сентября 2019, 16:08
                      0
                      Направить поле Изготовитель на vendor. В документации есть пример (второй параметр).
                        Станислав
                        09 сентября 2019, 16:15
                        0
                        к сожалению так не работает, вот что ответил разработчик

                        Изготовитель у вас тоже как-то не совсем стандартно, вложенный тег с идентификатором, его надо в событии mSyncOnBeforeImportProduct обрабатывать как
                        $data['manufacturer'] = (string)$xml->Изготовитель->Наименование;
        Станислав
        10 сентября 2019, 10:57
        0
        Может сталкивался кто то с таким
        -<Изготовитель>
        
        <Ид>30c0f313-b2d5-11e9-a8ca-7085c2b7a4a6</Ид>
        
        <Наименование>Kristroom</Наименование>
        
        </Изготовитель>
        к сожалению стандартным методом не работает

        Изготовитель у вас тоже как-то не совсем стандартно, вложенный тег с идентификатором, его надо в событии mSyncOnBeforeImportProduct обрабатывать как
        $data['manufacturer'] = (string)$xml->Изготовитель->Наименование;
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          13