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
81
-1

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

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>
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
        Нашел в чем проблема, он не понимает русский