MODX XML Import

Приветствую, есть xml файл. Требуется брать из него значения и по ним создавать новую страницу в modx. Не могу понять, как это реализовать

продажа
<property-type>жилая</property-type>
квартира
<creation-date>2019-01-29T11:41:05+03:00</creation-date>
<last-update-date>2019-01-29T12:34:55+03:00</last-update-date>

Россия
Ленинградская область
Всеволожский район
<locality-name>пос. Бугры </locality-name>
Всеволожский район, посёлок Бугры, Тихая улица, 1
Парнас
<time-on-transport>10</time-on-transport>

60.0697
30.4123

storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo11789_43887e641.jpg

storage4.kv1.ru/clients/hors/images/base/base_new_kv/photo20050_afdc7b7d1.jpg

storage4.kv1.ru/clients/hors/images/base/base_new_kv/plan20050_8d89b34b1.jpg

34.18
кв. м

Жилой комплекс будет обеспечен собственной социальной инфраструктурой, включающей три детских сада на 775 мест и общеобразовательную школу, рассчитанную на 1 383 учащихся. На первых этажах зданий предусмотрены коммерческие помещения, в которых разместятся объекты инфраструктуры шаговой доступности — магазины, аптеки, салоны красоты и другие, необходимые для комфортной жизни службы и сервисы. Для удобства автомобилистов предусмотрен паркинг вместимостью свыше 4 000 машиномест, а также гостевые парковочные зоны.

1
<rooms-offered>1</rooms-offered>
7
<floors-total>17</floors-total>
<building-name>Новые Горизонты</building-name>
<yandex-building-id>51646</yandex-building-id>
<building-type>Кирпично-монолит.</building-type>
<building-section>очередь 1, корпус 1</building-section>
<built-year>2017</built-year>
<ready-quarter>2</ready-quarter>
<building-state>hand-over</building-state>
+
<is-elite>-</is-elite>
+
2555000
RUR

<deal-status>переуступка</deal-status>
<sales-agent>

+
агентство
HORS
<email/>
</sales-agent>
предчистовая
Denis Chernavin
12 февраля 2019, 21:14
modx.pro
1
981
-1

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

Kiten
12 февраля 2019, 23:46
+1
По-разному, например:
1. Загрузить XML-файл куда-нибудь в бэкенд.
2. Написать сниппет, в нем создать из XML-файла объект с помощью функции simplexml_load_file();
3. Создать переменные, обращаясь к нужным полям объекта;
4. Создать объект с помощью $modx->newObject('modDocument');
5. Прописать нужные параметры из переменных;
    Степан Прищепенко
    13 февраля 2019, 09:07
    0
    Как вариант конечно, но товарищ имеет ввиду скорее всего родной импорт от modx, никогда им не пользовался.
      Kiten
      13 февраля 2019, 09:27
      0
      Посмотрим, что скажет товариЩЪ)
        Denis Chernavin
        13 февраля 2019, 09:48
        0
        Любым способом самым надежным и действенным)
        Просто в пхп не особо(
    Kiten
    13 февраля 2019, 10:31
    0
    Щас, дай ка посмотрю
      Kiten
      13 февраля 2019, 10:46
      +1
      Сегодня созвездия расположились особым образом и я добрый!)
      Вот код. Во-первых, у тебя XML не полностью приведен видимо. Должен быть корень (имя произвольное).
      Допустим, XML-файл сидит в папке misc, и называется 77777.xml

      <?xml version="1.0" encoding="UTF-8"?>
      <root>
      продажа
      <property-type>жилая</property-type>
      квартира
      <creation-date>2019-01-29T11:41:05+03:00</creation-date>
      <last-update-date>2019-01-29T12:34:55+03:00</last-update-date>
      Россия
      Ленинградская область
      Всеволожский район
      <locality-name>пос. Бугры </locality-name>
      Всеволожский район, посёлок Бугры, Тихая улица, 1
      Парнас
      <time-on-transport>10</time-on-transport>
      60.0697
      30.4123
      storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo11789_43887e641.jpg
      storage4.kv1.ru/clients/hors/images/base/base_new_kv/photo20050_afdc7b7d1.jpg
      storage4.kv1.ru/clients/hors/images/base/base_new_kv/plan20050_8d89b34b1.jpg
      34.18
      кв. м
      Жилой комплекс будет обеспечен собственной социальной инфраструктурой, включающей три детских сада на 775 мест и общеобразовательную школу, рассчитанную на 1 383 учащихся. На первых этажах зданий предусмотрены коммерческие помещения, в которых разместятся объекты инфраструктуры шаговой доступности — магазины, аптеки, салоны красоты и другие, необходимые для комфортной жизни службы и сервисы. Для удобства автомобилистов предусмотрен паркинг вместимостью свыше 4 000 машиномест, а также гостевые парковочные зоны.
      1
      <rooms-offered>1</rooms-offered>
      7
      <floors-total>17</floors-total>
      <building-name>Новые Горизонты</building-name>
      <yandex-building-id>51646</yandex-building-id>
      <building-type>Кирпично-монолит.</building-type>
      <building-section>очередь 1, корпус 1</building-section>
      <built-year>2017</built-year>
      <ready-quarter>2</ready-quarter>
      <building-state>hand-over</building-state>
      +
      <is-elite>-</is-elite>
      +
      2555000
      RUR
      <deal-status>переуступка</deal-status>
      <sales-agent>
      +
      агентство
      HORS
      <email/>
      </sales-agent>
      предчистовая
      </root>
      То, что в XML есть дефисы, тоже не очень хорошо. Но можно при выполнении запросов обернуть нужные поля в фигурные скобки с кавычками.
      Создаем сниппет, назовем его temp.

      <?php
      $xml= simplexml_load_file('misc/77777.xml');    //создаем объект из xml
      
      $parent = 2;    //ид родителя
      $template = 3;    //ид шаблона
      $pagetitle = $xml->{'property-type'}[0];    //берем отсюда название
      $alias = 'page';    //имя адреса
      $publishedon = $xml->{'creation-date'}[0];    //дата создания
      $published = true;    //опубликовано
      $introtext = $xml->{'building-name'}[0];    //аннотация
      $content = $xml->{'building-type'}[0];    //контент
      
      $doc = $modx->newObject('modDocument');    //создаем и заполняем
      $doc->set('parent',$parent);
      $doc->set('template',$template);
      $doc->set('pagetitle',$pagetitle);
      $doc->set('alias',$alias);
      $doc->set('publishedon',$publishedon);
      $doc->set('published',$published);
      $doc->set('introtext',$introtext);
      $doc->setContent($content);
      $doc->save();    //сохраняем
      Использовать свои поля по аналогии. Можно обернуть в цикл и создавать несколько.
      Сниппет можно вставить куда-нибудь и открыть страницу, он активируется.
      Вуаля!
        Denis Chernavin
        13 февраля 2019, 11:14
        0
        ничесе)
        Спасибо большое, вроде понял что куда и как)
        Сейчас буду тогда пробовать и дополнять)
          Denis Chernavin
          13 февраля 2019, 11:46
          0
          Извиняюсь, что наглею)
          Но при попытке спарсить этим кодом мой xml он ни в какую не хочет выводить значения

          <?xml version="1.0" encoding="utf-8"?>
          <realty-feed xmlns="http://webmaster.yandex.ru/schemas/feed/realty/2010-06">
            <generation-date>2019-02-12T20:49:06+03:00</generation-date>
          
              <offer internal-id="N20050">
              <type>продажа</type>
              <property-type>жилая</property-type>
              <category>квартира</category>
          
                  <creation-date>2019-01-29T11:41:05+03:00</creation-date>
                <last-update-date>2019-01-29T12:34:55+03:00</last-update-date>
                <location>
              <country>Россия</country>
                      <region>Ленинградская область</region>
                  <district>Всеволожский район</district>
                    <locality-name>пос. Бугры  </locality-name>    
              <address>Всеволожский район, посёлок Бугры, Тихая улица, 1</address>
                          <metro>
                      <name>Парнас</name>
                                  <time-on-transport>10</time-on-transport>        </metro>
                              <latitude>60.0697</latitude>
                  <longitude>30.4123</longitude>
              
          </location>
                                      <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo11789_43887e641.jpg</image>
                                                      <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_kv/photo20050_afdc7b7d1.jpg</image>
                                        <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_kv/plan20050_8d89b34b1.jpg</image>
                              
          
          
              <area>
              <value>34.18</value>
              <unit>кв. м</unit>
              </area>
                                <description>
                              
                      Жилой комплекс будет обеспечен собственной социальной инфраструктурой, включающей три детских сада на 775 мест и общеобразовательную школу, рассчитанную на  1 383 учащихся. На первых этажах зданий предусмотрены коммерческие помещения, в которых разместятся  объекты инфраструктуры шаговой доступности - магазины, аптеки, салоны красоты и другие, необходимые для комфортной жизни службы и сервисы. 
          Для удобства автомобилистов  предусмотрен паркинг вместимостью свыше 4 000 машиномест, а также  гостевые парковочные зоны.
                      </description>
          
          
                  <rooms>1</rooms>    <rooms-offered>1</rooms-offered>                    <floor>7</floor>      <floors-total>17</floors-total>    <building-name>Новые Горизонты</building-name>
                <yandex-building-id>51646</yandex-building-id>    <building-type>Кирпично-монолит.</building-type>    <building-section>очередь 1, корпус 1</building-section>
          
                    <built-year>2017</built-year>
                  <ready-quarter>2</ready-quarter>
                      <building-state>hand-over</building-state>    <lift>+</lift>
              <is-elite>-</is-elite>
              <parking>+</parking>
              <price>
                <value>2555000</value>
                <currency>RUR</currency>
              </price>
          
              <deal-status>переуступка</deal-status>
                <sales-agent>
              <name>  </name>  <phone>+</phone>
            <category>агентство</category>
            <organization>HORS</organization>
              <email></email>
          </sales-agent>      
              <renovation>предчистовая</renovation>
                          
                      
            </offer>
            <offer internal-id="N20051">
              <type>продажа</type>
              <property-type>жилая</property-type>
              <category>квартира</category>
          
                  <creation-date>2019-01-29T11:41:06+03:00</creation-date>
                <last-update-date>2019-01-29T12:34:55+03:00</last-update-date>
                <location>
              <country>Россия</country>
                              <locality-name>Санкт-Петербург</locality-name>
                  <sub-locality-name>Кировский</sub-locality-name>
              
              <address>Двинская ул., 8, к. 3, литера А</address>
                          <metro>
                      <name>Балтийская</name>
                      <time-on-foot>15</time-on-foot>                    </metro>
                              <latitude>59.9069</latitude>
                  <longitude>30.2513</longitude>
              
          </location>
                                      <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo12145_390385ad1.jpg</image>
                                        <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo12145_b8d66ef41.jpg</image>
                                        <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo12145_eddcf1b91.jpg</image>
                                        <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo12145_69ad9d481.jpg</image>
                                        <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_dom/photo12145_628a458b1.jpg</image>
                                                      <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_kv/photo20051_3fc206f21.jpg</image>
                                        <image >https://storage4.kv1.ru/clients/hors/images/base/base_new_kv/plan20051_849483991.jpg</image>
                              
          
          
              <area>
              <value>89.37</value>
              <unit>кв. м</unit>
              </area>
                                <description>
                              
                      Квартира в строящемся жилом комплексе &quot;Екатерингоф&quot; в Кировском районе. От станции метро &quot;Нарвская&quot; - 15 минут пешком. В 170 метрах детский сад, три школы. Поблизости есть клиника и медицинский центр, продуктовые магазины. 
          Квартиры сдаются с качественной предчистовой отделкой, большие кухни, кладовые. Разные варинты планировок. Звоните и мы подьерем для Вас лучший вариант.
                      </description>
          
          
              <new-flat>1</new-flat>    <rooms>3</rooms>    <rooms-offered>3</rooms-offered>                    <floor>6</floor>      <floors-total>13</floors-total>    <building-name>Панорамы залива</building-name>
                <yandex-building-id>56558</yandex-building-id>    <building-type>Кирпично-монолит.</building-type>    <building-section>Корпус 1</building-section>
          
                    <built-year>2019</built-year>
                  <ready-quarter>2</ready-quarter>
                      <building-state>unfinished</building-state>    <lift>+</lift>
              <is-elite>-</is-elite>
              <parking>-</parking>
              <price>
                <value>7150000</value>
                <currency>RUR</currency>
              </price>
          
              <deal-status>переуступка</deal-status>
                <sales-agent>
              <name>  </name>  <phone>+</phone>
            <category>агентство</category>
            <organization>HORS</organization>
              <email></email>
          </sales-agent>      
              <renovation>предчистовая</renovation>
                          
                      
            </offer>
          
          
          </realty-feed>
            Влад
            30 сентября 2021, 18:17
            0
            Добрый день, можете подсказать как сохранять в TV поля?
            Пробую $doc->setTVValue('image',$image);
            Если в дефолтные поля, то все работает но в TV не сохраняет, в чем может быть причина?
            Kiten
            13 февраля 2019, 12:32
            0
            Посмотри, может в reality-feed параметр мешает.
            Я бы убрал все параметры в тегах с помощью автозамены.
            PHP может ругаться из-за каких-то символов.
            Можно еще поодиночке проверять с помощью echo.
              Denis Chernavin
              13 февраля 2019, 12:50
              0
              В том то и дело, что нельзя ничего менять в xml
              но на выбор есть 2 вида, Тот что я показывал и еще один
                Kiten
                13 февраля 2019, 13:02
                +1
                Только что проверял твой XML какой есть, без каких-либо изменений.
                Все нормально парсится.
                Проверь сначала с помощью echo, типа того:
                <?php
                $xml= simplexml_load_file('misc/77777.xml');
                echo $xml->offer[0]->type[0];
                Проверь путь к файлу XML, имя и тд.
                Также правильно обращаться к полям XML. Где-то мб опечатка.
                Проверь версии PHP и MODX.
                Причина может быть где угодно!
                  Denis Chernavin
                  13 февраля 2019, 13:35
                  0
                  Нашел в чем проблема, он не понимает русский
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              13