Я тут понял, что, как я написал выше, категории не вставляются у товаров с модификациями, а по моему мнению, их не обязательно отправлять в Яндекс. Достаточно, что родительский товар выгружен в файл.
Таким образом, я сделал проверку на наличие категории у товара перед выводом предложений и теперь у меня работает динамический файл (за что глубочайший респект автору компонента, так как он избавил меня от редактирования цен и добавления товара в выгрузку после каждого корректирования менеджерами).
Заодно я добавил в описании, что это файл вида vendor.model
Вобщем, держите мой код шаблона:
<?php
class YandexSimpleTpl{
function makeHead($params){
$cfg = new JConfig();
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
$xml .= "<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\n";
$xml .= "<yml_catalog date=\"".date('Y-m-d H:i', time())."\">\n";
$xml .= "<shop>\n<name>{$params->get('shopname')}</name>\n";
$xml .= "<company>{$params->get('company_name')}</company>\n";
$xml .= "<url>".JURI::root()."</url>\n";
$xml .= "<platform>Joomla</platform>\n";
$xml .= "<agency>{$params->get('shop_name')}</agency>\n";
$xml .= "<email>{$cfg->mailfrom}</email>\n";
return $xml;
}
function makeCurrencies($currency){
$xml = "<currencies>\n";
$xml .= "<currency id=\"RUR\" rate=\"1\"/>\n";
$xml .= "</currencies>\n";
return $xml;
}
function makeCategories($categories){
$xml = "<categories>\n";
foreach ($categories as $category){
$xml .= "<category id=\"{$category->category_id}\" parentId=\"{$category->category_parent_id}\" >";
$xml .= "{$category->category_name}</category>\n";
}
$xml .= "</categories>\n";
return $xml;
}
var $offersopen = "<offers>\n";
function makeOffer($product, $params){
if ($product->avail == 1) $avail = 'available="true"';
else $avail = 'available="true"';
if ($product->category_id)
{
$xml = "<offer id=\"{$product->product_id}\" type=\"vendor.model\" {$avail}>\n";
$xml .= "<url>{$product->prod_url}</url>\n";
$xml .= "<price>{$product->product_price}</price>\n";
$xml .= "<currencyId>RUR</currencyId>\n";
$xml .= "<categoryId>{$product->category_id}</categoryId>\n";
if (is_array($product->images))
{
foreach ($product->images as $image){
$xml .= "<picture>{$image}</picture>\n";
}
}
if ($params->get('use_pickup') == 1)
{
$xml .= "<pickup>true</pickup>\n";
}
if ($params->get('use_shipping') == 1)
{
$xml .="<delivery>true</delivery>\n";
$xml .= "<local_delivery_cost>{$product->shipcost}</local_delivery_cost>\n";
}
if ($product->mf_name)
{
$xml .= "<vendor>{$product->mf_name}</vendor>\n";
}
$xml .= "<model>{$product->product_name}</model>\n";
if ($product->description)
{
$xml .= "<description>{$product->description}</description>\n";
}
if ($product->custom)
{
//$xml .= "<sales_notes>{$product->custom}</sales_notes>\n";
}
$xml .= "<sales_notes>Уточняйте стоимость. Действуют скидки от 3 до 10%</sales_notes>\n";
$xml .= "</offer>\n";
}
return $xml;
}
var $offersclose = "</offers>\n";
var $close = "</shop>\n</yml_catalog>";
}