Долго думал как правильно составить заголовок, что бы всем было понятно о чем речь, не уверен, что получилось, но суть такая:
На одном из клиентских проектов столкнулся с тем, что у товаров нет описания, но есть характеристики, которые и являются описанием товара. Дело в том, что этот YML файл я хочу использовать для Турбо-страниц Яндекса, но там поле <description> должно быть обязательно заполнено. Скрипт, который выгружает товары в YML для Яндекс.Маркета естественно это не поддерживает, поэтому пришлось его немного дописать. Сделано это было на скорую руку (если много товаров, скорее всего будет сильная нагрузка на базу данных), но в моём случае это работает без проблем.
Откройте файл vm2_market.php, найдите и удалите блок, который отвечает за вывод описания, он выглядит примерно так:
if ($row->product_desc) {
$description = $row->product_desc;
$description_short = substr($description, 0, 170);
$xml .= '<description>'.htmlspecialchars(strip_tags($description)).'</description>'."\n";
}
Вместо этого, используйте этот код:
//Настраиваемые поля вместо описания
$custom_fields = 'SELECT `virtuemart_customfield_id`, `virtuemart_product_id`, `virtuemart_custom_id`, `customfield_value` FROM `#__virtuemart_product_customfields` WHERE `virtuemart_product_id` = '.$product_id.'';
$db->setQuery($custom_fields);
$fields = $db->loadObjectList();
$xml .= '<description><![CDATA[';
$xml .= '<ul>';
foreach ($fields as $field) {
$virtuemart_custom_id = $field->virtuemart_custom_id;
$custom_field_name = 'SELECT `custom_title` FROM #__virtuemart_customs WHERE `virtuemart_custom_id` = '.$virtuemart_custom_id.'';
$db->setQuery($custom_field_name);
$custom_field_name = $db->loadResult();
$customfield_value = $field->customfield_value;
$xml .= '<li>'.$custom_field_name.':'.$customfield_value.'</li>';
}
$xml .= '</ul>';
$xml .= ']]></description>';