В этом разделе можно взять готовые, работающие решения для импорта в формате UMIDump 2.0.

Разделы и объекты каталога

В этом XML-файле приводится пример импорта двух разделов каталога с одним товаром в каждом из них, при этом один товар назначается рекомендуемым другому, что иллюстрирует импорт поля типа symlink.

<umidump version="2.0">

  <meta>
    <!-- определяем название XML-ресурса -->
    <source-name>MyXMLSource</source-name>
  </meta>

  <types>

    <!--описание типа для раздела каталога-->
    <!-- parent-id="{root-pages-type} определяет привязку к типу "раздел сайта" -->
    <type id="catalog_category" parent-id="{root-pages-type}">
      <!-- определяем базовый тип при помощи атрибутов @module и @method -->
      <base module="catalog" method="category" />
    </type>

    <!-- описание типа для объекта каталога -->
    <!-- parent-id="{root-pages-type} определяет привязку к типу "раздел сайта" -->
    <type id="catalog_object" parent-id="{root-pages-type}">
      <!-- определяем базовый тип при помощи атрибутов @module и @method -->
      <base module="catalog" method="object" />
    </type>

    <!-- описание типа для объекта каталога "Фильтр" -->       
    <type id="filter" title="Фильтр" parent-id="catalog_object">
      <!-- определяем базовый тип при помощи атрибутов @module и @method -->
      <base module="catalog" method="object" />
      <fieldgroups>
        <group name="filter_props" title="Свойства фильтров" visible="visible">
          <!-- поле типа "выпадающий список" -->
          <field name="filter_type" title="Тип фильтрации" visible="visible">
            <type data-type="relation"/>
          </field>
          <!-- поле типа "число" -->
          <field name="power" title="Ресурс" visible="visible">
            <type data-type="int"/>
          </field>
        </group>
      </fieldgroups>
    </type>

    <!-- описание типа для объекта каталога "Чайник" -->
    <type id="kettle" title="Чайник" parent-id="catalog_object">
      <!-- определяем базовый тип при помощи атрибутов @module и @method -->
      <base module="catalog" method="object" />
      <fieldgroups>
        <group name="kettle_props" title="Свойства чайников" visible="visible">
          <!-- поле типа "выпадающий список" -->
          <field name="warmer_type" title="Тип нагревательного элемента" visible="visible">
            <type data-type="relation"/>
          </field>
          <!-- поле типа "число" -->
          <field name="power" title="Мощность" visible="visible">
            <type data-type="int"/>
          </field>
        </group>
        <group name="recommend" title="Рекомендуемые товары" visible="visible">
          <!-- поле типа "ссылка на дерево" -->
          <field name="recommend" title="Рекомендуемые товары" visible="visible">
            <type name="Ссылка на дерево" data-type="symlink" multiple="multiple"/>
          </field>
        </group>
      </fieldgroups>
    </type>
  </types>

  <pages>

    <!-- описание раздела каталога "Фильтры" -->
    <page id="category_1" is-active="1" type-id="catalog_category" alt-name="filters">
      <name>Фильтры</name>
      <properties>
        <group name="common">
          <property name="title">
              <!-- зададим значение, применяющееся только при создании -->
              <default-value>Фильтры</default-value>
          </property>
     </group>
      </properties>
      <!-- определим шаблон, задающийся только при создании -->
      <default-template>category.xsl</default-template>
    </page>

    <!-- описание раздела каталога "Чайники" -->
    <page id="category_2" is-active="1" type-id="catalog_category" alt-name="kettels">
      <name>Чайники</name>
      <properties>
        <group name="common">
          <property name="title">
              <!-- зададим значение, применяющееся только при создании -->
              <default-value>Чайники</default-value>
          </property>
      </group>
      </properties>
      <!-- определим шаблон, задающийся только при создании -->
      <default-template>category.xsl</default-template>
    </page>

    <!-- описание объекта каталога - фильтр -->
    <page id="filter_1" is-active="1" type-id="filter" parentId="category_1" alt-name="Thomas_TWIN">
      <name>Thomas TWIN TT Aquafilter</name>
      <properties>
          <group name="cleaner_props">
            <!-- то что это поле "выпадающий список", уже определили в типах выше --> 
            <property name="filter_type">
              <value>
                <item name="микрофильтр / ультрафильтр"/>
              </value>
            </property> 
            <!-- то что это поле "число", уже определили в типах выше -->
            <property name="power">
              <value>1700</value>
            </property> 
          </group>
       </properties>
     </page>

    <!-- описание объекта каталога - чайник -->
    <page id="kettle_1" is-active="1" type-id="kettle" parentId="category_2" alt-name="Philips_4667">
      <name>Philips HD 4667</name>
      <properties>
          <group name="kettel_props">
            <!-- то что это поле "выпадающий список", уже определили в типах выше -->
            <property name="warming_type">
              <value>
                <item name="дисковый нагреватель"/>
              </value>
            </property> 
            <!-- то что это поле "число", уже определили в типах выше -->
            <property name="power">
              <value>2400</value>
            </property> 
          </group>
       </properties>
     </page>
  </pages>

  <!-- объект каталога - фильтр - назначается рекомендуемым к объекту каталога - чайник -->
  <relations>
     <relation page_id="kettle_1" field-name="recommend">
        <page id="filter_1">
     </relation>
  </relations>

</umidump>


Пример, иллюстрирующий динамическое добавление поля к объекту каталога, без описания его в секции type. 

<umidump version="2.0">
  <meta>
    <!-- определяем название XML-ресурса -->
    <source-name>MyXMLSource</source-name>
  </meta>

  <types>
    <!--описание типа для раздела каталога-->
    <type id="catalog_object" guid="catalog-object" title="объект каталога" parent-id="{root-pages-type}" locked="locked">
  </types>

  <pages>
    <!-- описание объекта каталога - чайник -->
    <page id="135" is-active="1" type-id="catalog_object" parentId="0" alt-name="kettle" link="/market/kettle/">
      <basetype> module="catalog" method="object">Объекты каталога</basetype>
      <name>Чайник</name>
      <!-- динамическое добавление свойств к объекту каталога -->
      <properties>
        <group name="recommend">
          <title>Рекомендуемые товары</title>
          <property id="389" name="warming_type" type="symlink" allow-runtime-add="1">
            <type name="Ссылка на дерево" data-type="symlink" multiple="multiple">
            <title>Рекомендуемые товары</title>
            <value>
              <!-- в качестве значения в поле передается объект каталога - фильтр -->
              <page id="5" parentId="3" link="/market/kettle/filter/" is-active="1" object-id="398" type-id="120" alt-name="filter_xs87">
                <basetype> module="catalog" method="object">Объекты каталога</basetype>
                <name>Фильтр для воды</name>
              </page>
            </value>
          </property>
        </group>
      </properties>
      <template>inner.tpl</template>
    </page>

    <!-- описание объекта каталога - фильтр -->
    <page id="5" is-active="1" type-id="catalog_object" parentId="0" alt-name="filter_xs87" link="/market/kettle/filter/">
      <basetype> module="catalog" method="object">Объекты каталога</basetype>
      <name>Фильтр для воды</name>
      <template>inner.tpl</template>
    </page>
  </pages>

  <relations>
  <!-- связываем объект каталога - фильтр - с объектом каталога - чайник -->
    <relation page_id="135" field-name="recommend">
      <page id="5"/>
    </relation>
  </relations>
</umidump>