Авторизация

UMI CMS Выгрузка из 1С нужно чтобы название товара (страницы каталога) не менялось

Задача: При выгрузке товаров из 1С нужно чтобы название товара (страницы каталога) не менялось.

Способ 1. Можно решить задачу переопределив шаблон \xsl\import\commerceML2.xsl. После первой выгрузки каталога удалить из него следующий узел: <name><xsl:value-of select="$name" /></name>

Есть недостаток: Если товар ещё не создан, то вместо имени вставится ID из UMI.

 

Способ 2. Для этого я воспользовался событиями. В файле custom_events.php ( classes/modules/exchange/custom_events.php ) назначил обработчик события (в мануале)

new umiEventListener("exchangeOnUpdateElement", "exchange", "updateElementName");

Затем описал обработчик события (в мануале) updateElementName в файле __custom_adm.php ( classes/modules/exchange/__custom_adm.php )

public function updateElementName(iUmiEventPoint $eList){
    // выполняется перед сохранением из выгрузки
    if ($eList->getMode() === "before") {
        $element = $eList->getRef('element');
        // element_info это xml из выгрузки
        $info = $eList->getParam('element_info');
        
        $nl = $info->getElementsByTagName('name');
        $info_name = $nl->length ? $nl->item(0)->nodeValue : '';
        
        $element->setValue('meta_descriptions', '');
        
        if($element->name != $info_name){
            $element->setValue('meta_descriptions', $element->name);
        }
        $element->commit();
        
    }
    // выполняется после
    if ($eList->getMode() === "after") {
        $element = $eList->getRef('element');
        if($element->getValue('meta_descriptions') != ''){
        	$element->setName($element->getValue('meta_descriptions'));
            $element->setValue('meta_descriptions', '');
        	$element->commit();
        }
    }
}

Суть заключается в том что, перед загрузкой новой информации на страницу товара ( before ) функция сохраняет название страницы в поле meta_descriptions (т.к. это поле было пустое и фактически не использовалось, конечно лучше под это дело создать отдельное поле и сделать его невидимым на странице в админке), а когда все изменения внесены ( after ) мы из поля meta_descriptions возвращаем название обратно.

Что почитать:
http://youtu.be/YK4dWUUJosc?t=1h17m34s

[ Saitadmin.ru || с 2006 по текущий год || Санкт-Петербург ]