Отключение экспорта виртуальных копий в YML

Материал из Umicms
Версия от 06:19, 29 сентября 2011; VITL' (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Если в ваших разделах каталога используются "Виртуальные копии" страниц, то при экспорте данных в YandexMarket, в итоговые данные попадет как исходная страница (объект каталога), так и все виртуальные копии. Чтобы избежать попадания в экспорт виртуальных копий, воспользуемся кастомным методом, который добавим в файл classes/modules/custom.php:

public function is_virtual($id) {
  $page_id = (int) $id;
  $h = umiHierarchy::getInstance();
  //экземпляр страницы
  $element = $h->getElement($page_id);
  if($element){
    // object_id - id источника данных
    $object_id = $element->getObjectId();
    // список всех страниц, которые используют данный объект
    $arr_id = $h->getObjectInstances($object_id);
    // первая страница, это страница с наименьшим page_id, т.е. исходная страница
    if($arr_id[0] != $page_id) return 1;
    return 0;
  }else  return 0;
}

Далее, необходимо из файла xsl/export/YML.xsl, скопировать блок:

<xsl:template match="page[basetype/@method = 'object']">
...
<xsl:template>

в файл xsl/export/custom/YML.xsl.

Строку:

<xsl:if test="$price &gt; 0">

необходимо заменить на:

<xsl:if test="$price &gt; 0 and $is_virtual != '1'">

и перед этой строкой определить параметр:

<xsl:param name="is_virtual" select="document(concat('udata://custom/is_virtual/', @id))/udata" />