Вторая проблема с модулем Яндекс Маркет, которую я тоже устранял локальной заплаткой, заключается в том, что если в модуле Яндекса Маркета использовать опции указания наличия розничных точек продаж и возможности самовывоза, то файл не проходит валидацию на стороне Яндекс Маркет.
Определена кодировка: utf-8 (строка 0, столбец 0) Дата из файла: 2014-03-22 17:27 (строка 3, столбец 38) Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Element 'store' is not valid for content model: '(url?,buyurl?,price,wprice?,currencyId,xCategory?,categoryId+,market_category?,picture*,store?,pickup?,delivery?,deliveryIncluded?,local_delivery_cost?,orderingTime?,((typePrefix?,vendor,vendorCode?,model,((provider,tarifplan?))?)|(author?,name,publisher?,series?,year?,ISBN?,volume?,part?,language?,binding?,page_extent?,table_of_contents?)|(author?,name,publisher?,series?,year?,ISBN?,volume?,part?,language?,table_of_contents?,performed_by?,performance_type?,storage?,format?,recording_length?)|(artist?,title,year?,media?,starring?,director?,originalName?,country?)|(worldRegion?,country?,region?,days,dataTour*,name,hotel_stars?,room?,meal?,included,transport,price_min?,price_max?,options?)|(name,place,hall?,hall_part?,date,is_premiere?,is_kids?)|(name,vendor?,vendorCode?)),aliases?,additional*,description?,sales_notes?,promo?,manufacturer_warranty?,seller_warranty?,country_of_origin?,downloadable?,adult?,age?,barcode*,cpa?,fee?,rec?,expiry?,weight?,dimensions?,param*,related_offer*)' (строка 3, столбец 16004)
Проблема в том, что модуль Яндекс Маркета в этом случае формирует неправильную последовательность полей в XML файле.
Фикс заключается в изменении порядка генерации полей в файле: \YandexMarket\Model\Processor\Offer.php
Поля store, pickup, delivery должны идти сразу за полем images.
if (!is_null($this->getImage())) { $result['picture'] = df_helper()->yandexMarket()->preprocessUrl( $this->getProduct()->getMediaConfig()->getMediaUrl( $this->getImage() ) ) ; } if ($this->getSettings()->general()->hasPointsOfSale()) { $result = array_merge( $result ,array( 'store' => df_output()->convertBooleanToString( $this->getProduct()->isSalable() ) ,'pickup' => df_output()->convertBooleanToString( $this->getSettings()->general()->isPickupAvailable() ) ,'delivery' => df_output()->convertBooleanToString( true ) ) ) ; }