Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - KTI

Страницы: [1] 2 3 ... 5
1
Схема не помогла  :'(
Согласно схеме у каждой группы может быть поле "описание" типа строка

<cml:element name="Наименование" type="КомментарийТип">
<cml:annotation>
<cml:documentation>Наименование группы товаров</cml:documentation>
</cml:annotation>
</cml:element>
<cml:element name="Описание" type="КомментарийТип" minOccurs="0"/>
<cml:element name="Свойства" minOccurs="0">

я решил его использовать для заполнения например TITLE ( или DESCRIPTION, в принципе не важно)
Переделал выгрузку:
<Группа>
       <Ид>21de84cb-13d1-4d2d-ac54-5824c5e10d7a</Ид>
        <Наименование>Телевизоры</Наименование>
        <Описание>Купить Телевизоры</Описание>
</Группа>

Переделал шаблон импорта commerceML2.xsl
<property name="title" type="string">
<title>Поле TITLE</title>
<value>
<xsl:text>Купить </xsl:text>
<xsl:value-of select="Описание" />
</value>
</property>
<property name="h1" type="string">
<title>Поле H1</title>
<value><xsl:value-of select="Наименование" /></value>
</property>

Все равно TITLE остается пустым!!
Причем текст вставляется в поле TITLE  - ("Купить") , т.е. почему-то не находит тег "описание"
Что еще можно попробовать?

PS кстати, из схемы видно, что для каждой группы можно задать свои свойства, которые будут принадлежать только этой группе, но в шаблоне импорта эти свойства не обрабатываются!
Обрабатываются только свойства товаров.
Свойства групп очень удобно использовать, например для количества товаров в этой группе
Или для списка производителей в этой группе и т.д.

2
Кажется нашел пути решения! По крайней мере понял почему у меня не работало...
Все что написал ниже только мое мнение, на правдивость совершенно не претендую  ;D
В общем (после долгих экспериментов) понял, что входной файл import.xml прогоняется через схему валидации (или как там она называется). Для CommerceML она называется CommerceML2.04.xsd (в папке \xsl\xsd). И все теги которые не вписываются в эту схему просто удаляются (или игнорируются)!
Поэтому нельзя во входном файле импорта добавлять любые теги.

Теперь у меня снова возникли вопросы.
1) Как и что мне добавить в эту схему, чтобы у меня эти теги воспринимались
я вроде нашел кусок, который отвечает за группы (категории) товаров

	<cml:complexType name="Группа">
<cml:annotation>
<cml:documentation>Описывает группу товаров в каталоге </cml:documentation>
</cml:annotation>
<cml:sequence>
<cml:element name="Ид" type="ИдентфикаторГлобальныйТип">
<cml:annotation>
<cml:documentation>Идентификатор группы товаров в классификаторе</cml:documentation>
</cml:annotation>
</cml:element>
<cml:element name="Наименование" type="КомментарийТип">
<cml:annotation>
<cml:documentation>Наименование группы товаров</cml:documentation>
</cml:annotation>
</cml:element>
<cml:element name="Описание" type="КомментарийТип" minOccurs="0"/>
<cml:element name="Свойства" minOccurs="0">
<cml:annotation>
<cml:documentation>Содержит коллекцию свойств, значения которых можно или нужно указать для товаров, принадлежащих данной группе, в каталоге, пакете предложений, документах</cml:documentation>
</cml:annotation>
<cml:complexType>
<cml:sequence>
<cml:element name="Свойство" type="Свойство" maxOccurs="unbounded"/>
</cml:sequence>
</cml:complexType>
</cml:element>
<cml:element name="Группы" minOccurs="0">
<cml:annotation>
<cml:documentation>Содержит описание вложенных групп товаров</cml:documentation>
</cml:annotation>
<cml:complexType>
<cml:sequence>
<cml:element name="Группа" type="Группа" maxOccurs="unbounded"/>
</cml:sequence>
</cml:complexType>
</cml:element>
</cml:sequence>
</cml:complexType>

2) К чему (плохому) может привезти изменение схемы валидации?
3) Схема обновляется при обновлении сайта? Можно-ли сделать кастомную схему? чтобы не затиралась при обновлении
4) Есть-ли другие пути решения?

3
Что уже пробовал...
Даже если в выгрузке поставить Наименование = TITLE, все равно TITLE остается пустым

 <Группа>
                      <Ид>d359e107-5f8b-4260-82da-9e0cf73fad3f</Ид>
                      <Наименование>Телевизоры</Наименование>
              <TITLE>Телевизоры</TITLE>
                    </Группа>

Хотя если посмотреть в oXygen'е, то выходные данные (umiDump20) получаются абсолютно одинаковые

          <group name="common">
               <title>Основные параметры</title>
               <property name="title" type="string">
                  <title>Поле TITLE</title>
                  <value><![CDATA[Телевизоры]]></value>
               </property>
               <property name="h1" type="string">
                  <title>Поле H1</title>
                  <value><![CDATA[Телевизоры]]></value>
               </property>
            </group>

т.е. смотрите.. если в шаблоне сделать
					<property name="title" type="string">
<title>Поле TITLE</title>
<value><xsl:value-of select="Наименование" /></value>
</property>
<property name="h1" type="string">
<title>Поле H1</title>
<value><xsl:value-of select="TITLE" /></value>
</property>

То (хотя TITLE = Наименование) и в выходном файле получаются одинаковые данные, поле TITLE все-равно остается пустым!!!
А если сделать (т.е. как было изначально)
					<property name="title" type="string">
<title>Поле TITLE</title>
<value><xsl:value-of select="Наименование" /></value>
</property>
<property name="h1" type="string">
<title>Поле H1</title>
<value><xsl:value-of select="Наименование" /></value>
</property>

то поле TITLE заполняется правильно! (становится равным наименованию)
бред какой-то..

4
Возникла такая проблема..
При импорте данных из 1С нужно импортировать поля TITLE, DESCRIPTION
Для начала хотя-бы TITLE. и хотя-бы для категорий товаров (не для самих товаров)
В файле commerceML2.xsl поле TITLE заполняется так
				<group name="common">
<title>Основные параметры</title>
<property name="title" type="string">
<title>Поле TITLE</title>
<value><xsl:value-of select="Наименование" /></value>
</property>
<property name="h1" type="string">
<title>Поле H1</title>
<value><xsl:value-of select="Наименование" /></value>
</property>
</group>

я сделал в выгрузке из 1С дополнительное поле TITLE (кусок файла import.xml )
                   <Группа>
                      <Ид>d359e107-5f8b-4260-82da-9e0cf73fad3f</Ид>
                      <Наименование>Телевизоры</Наименование>
              <TITLE>Купить Телевизоры</TITLE>
                    </Группа>

а шаблон commerceML2.xsl поменял на

				<group name="common">
<title>Основные параметры</title>
<property name="title" type="string">
<title>Поле TITLE</title>
<value><xsl:value-of select="TITLE" /></value>
</property>
<property name="h1" type="string">
<title>Поле H1</title>
<value><xsl:value-of select="Наименование" /></value>
</property>
</group>

НО при импорте поле TITLE становится пустым! Причем если поменять обратно на "Наименование" - оно заполняется наименованием, т.е. поля H1 и TITLE  становятся одинаковые. А если H1 <> TITLE  то TITLE  просто остается пустым.
Вопрос почему?

5
мне кажется ajax тут ни при чем, надо понять на что уходят 2-2,5сек
т.е. сколько времени уходит на запрос, сколько обрабатывает сервер (через сколько приходит ответ), сколько выполняется "Отображение изменений", а потом уже анализировать

6
Есть в вики статейка "Обновление объектов созданных вручную данными из 1С", там описано соответствие page_id и ИД из 1С. И примеры есть, на основе их можно попробовать получить page по ИД из 1с. Если получится, можете выложить код, лишним не будет

7
Шаблоны XSLT / Re:Импорт данных в UMI
« : 19 Октября 2012, 06:05:29 »
может этот кусок:
<xsl:template match="Группы/Группа" mode="types">
<type id="{Ид}" title='1C: {Наименование}' parent-id="root-catalog-object-type">
<xsl:if test="name(../../.) = 'Группа'">
<xsl:attribute name="parent-id"><xsl:value-of select="../../Ид" /></xsl:attribute>
</xsl:if>
<base module="catalog" method="object">Объект каталога</base>

<fieldgroups>
<!-- product fields -->
<group name="product" title="1C: Общие свойства" visible="visible">
<field name="photo" title="Картинка" visible="visible">
<type name="Изображение" data-type="img_file"/>
</field>
<field name="video" title="Видео" visible="visible">
<type name="Видео" data-type="string"/>
</field>
<field name="bar_code" title="Штрих-код" visible="visible">
<type name="Строка" data-type="string"/>
</field>
<field name="weight" title="Вес" visible="visible">
<type name="Число с точкой" data-type="float"/>
</field>
</group>
</fieldgroups>
</type>

<xsl:apply-templates select="Группы" mode="types" />

</xsl:template>

В нем для photo создается отдельное поле
<field name="photo" title="Картинка" visible="visible">
<type name="Изображение" data-type="img_file"/>
</field>
но, если картинок несколько, то автоматически создаются поля photo1, photo2
 и т.д. Причем только в тех разделах каталога, где они есть у товара. Хотя предварительно они не определяются.
Я по аналогии сделал для поля видео:
<field name="video" title="Видео" visible="visible">
<type name="Видео" data-type="string"/>
</field>
Шаблон заработал и поле появилось, но.. для всего каталога! т.е. для всех товаров, а мне бы хотелось только для той категории в которой у товаров есть  поле видео, т.е. как у photo2, 3
Надеюсь понятно написал   :-[

8
Шаблоны XSLT / Re:Импорт данных в UMI
« : 18 Октября 2012, 10:25:21 »
реквизит allow-runtime-add="1" в шаблоне есть
для картинок создаются поля, а для поля видео (тип строка), не хочет

9
Шаблоны XSLT / Re:Импорт данных в UMI
« : 18 Октября 2012, 10:21:54 »
XML: (урезанный)
<Товары>
<Товар>
  <Ид>15545916-b8a9-4054-b943-d76dc2c6e14b</Ид>
  <Наименование>Холодильник</Наименование>
  <БазоваяЕдиница Код="796" НаименованиеПолное="Штука" МеждународноеСокращение="PCE">шт</БазоваяЕдиница>
  <Картинка>import_files/15/15545916-b8a9-4054-b943-d76dc2c6e14b_2.jpg</Картинка>
  <Видео>http://www.youtube.com/watch?v=IvLUcOAAAAAAAYAA</Видео>
</Товар>

шаблон <xsl:template match="Товар/Видео"> точно выполняется


10
Шаблоны XSLT / Импорт данных в UMI
« : 17 Октября 2012, 12:55:02 »
В вики есть статья про добавление нескольких изображений товаров, там такой шаблон (добавляется в кастом commerceML2.xsl):
	<xsl:template match="Товар/Картинка">
<xsl:if test="string-length(.)">
<property name="photo{position()}" title="Картинка{position()}" type="img_file" visible="visible" allow-runtime-add="1">
<type data-type="img_file"/>
<title>Картинка</title>
<value>./images/cms/data/<xsl:value-of select="."/></value>
</property>
</xsl:if>
</xsl:template>

он создает новые поля (если их не было): photo2, photo3 и т.д.:
.....
<property id="450" name="photo2" type="img_file">
<property id="450" name="photo3" type="img_file">
.....

Почему когда я вставляю свой шаблон:
	<xsl:template match="Товар/Видео">
<xsl:if test="string-length(.)">
<property name="video" type="string" visible="visible" allow-runtime-add="1">
<title>Видео</title>
<value><xsl:value-of select="."/></value>
</property>
</xsl:if>
</xsl:template>
у меня новое поле (video) не создается (само)?
В xml файле это поле есть, шаблон точно срабатывает

11
Я так и сделал: изменил шаблон thumbnails.xsl - там ничего сложного нет
Вопрос все-таки открытый: возможно-ли после создания элемента добавить к нему атрибут или значение? мне кажется что средствами xslt никак..

12
я временно так и сделал, через @type='img_file'
 ^photo не работает (уже проверил), надо наверно substr использовать

проверил, работает такая конструкция:
	<xsl:template match="property[substring(@name,1,5)='photo']" mode="foto_list">
немного не кошерно, ^photo было-бы красивее

13
ну во первых, чтобы добавить id нужно тоже шаблон менять, т.к. он выдает уже готовый <img>, замкнутый круг
во вторых не хотелось бы приплетать jquery для такой простой задачи.
Наверно придется штатный шаблон менять. Он же при обновлении не перезатрется?
Только тогда не вижу смысла его (шаблон) разделять, просто добавлю обработку параметра alt, если есть (в параметрах) то добавляем, если нет, то нет.
Народ, кто как добавляет alt к превьюшкам, через вызов шаблона thumbnail?
Или по другому спрошу: кто как делает превьюшки?
Или как с помощью xslt добавить атрибут к созданному тегу?

14
там много property, не только фото, мне нужно отобрать только те у которых @name начинается на "photo", т.е. photo2, photo3 и т.д.

15
Примерно так я и представлял, просто в штатном thumbnails.xsl, шаблон name="catalog-thumbnail" вызывает просто name="thumbnail" а тот в свою очередь вызывает еще шаблон.
Когда и где его делить?  :-\

А нет возможности вставить атрибут в тег, которые уже создался?

Страницы: [1] 2 3 ... 5