Вот и у меня не получается выгрузить данные в Яндекс Маркет.
<?php header ("Content-Type:text/xml");
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
?>
<!DOCTYPE yml_catalog SYSTEM "shops.dtd">
<yml_catalog date="<?php echo date('Y-m-d H:i'); ?>">
<?php
if (!defined('_JEXEC')) {
define( '_JEXEC', 1 );
define('JPATH_BASE', dirname(__FILE__) );
define( 'DS', DIRECTORY_SEPARATOR );
/* Required Files */
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
/* To use Joomla's Database Class */
require_once ( JPATH_BASE.DS.'libraries'.DS.'joomla'.DS.'factory.php' );
require_once ( JPATH_LIBRARIES.DS.'import.php'); // Joomla library imports.
/* Create the Application */
$app = JFactory::getApplication('site')->initialise();
}
$cfg = new JConfig();
//NAME - Короткое название магазина (название, которое выводится в списке найденных на Яндекс.Маркете товаров.
//Не должно содержать более 20 символов). Нельзя использовать слова, не имеющие отношения к
//наименованию магазина ("лучший", "дешевый"), указывать номер телефона и т.п. Название магазина,
//должно совпадать с фактическим названием магазина, которое публикуется на сайте. При несоблюдении
//данного требования наименование может быть изменено Яндексом самостоятельно без уведомления Клиента.
$cfg_name = $cfg->fromname;
$cfg_company = $cfg->sitename; //Полное наименование компании, владеющей магазином. Не публикуется, используется для внутренней идентификации.
$cfg_url = 'адрес-сайта.com'; //URL-адрес главной страницы магазина без http://
$bid = '10'; // Ставка за клик (в центах)
$currency = 'RUR';
$hostname = $cfg->host;
$username = $cfg->user;
$password = $cfg->password;
$dbName = $cfg->db;
$category = $cfg->dbprefix."jshopping_categories";
$tb_product = $cfg->dbprefix."jshopping_products";
$tb_manufacturer = $cfg->dbprefix."jshopping_manufacturers";
$tb_product_category_xref = $cfg->dbprefix."jshopping_products_to_categories";
try {
$pdo = new PDO("mysql:host={$hostname};dbname={$dbName}", $username, $password);
// Исправьте, если у вас другая кодировка в БД
$pdo->exec('SET NAMES utf8');
echo "<shop>\n";
echo "<name>$cfg_name</name>\n";
echo "<company>$cfg_company</company>\n";
echo "<url>$cfg_url</url>\n";
// курсы валют, приравнены к курсу ЦБРФ
echo "<currencies>\n";
echo "<currency id=\"RUR\" rate=\"1\"/>\n";
echo "<currency id=\"USD\" rate=\"CBRF\"/>\n";
echo "<currency id=\"EUR\" rate=\"CBRF\"/>\n";
echo "</currencies>\n";
// Секция категорий
echo "<categories>\n";
$res = $pdo->query("SELECT * FROM $category");
while ($row_cat= $res->fetch(PDO::FETCH_ASSOC)) {
$cat_parent_id=$row_cat['category_parent_id'];
$parent = ($cat_parent_id != 0)? " parentId=\"{$cat_parent_id}\"" : "";
echo "<category id=\"{$row_cat['category_id']}\"{$parent}>{$row_cat['name_ru-RU']}</category>\n";
}
unset($res);
echo"</categories>\n";
// Секция описания товаров
echo"<offers>\n";
$res = $pdo->query("SELECT id, `name_ru-RU` as name FROM {$cfg->dbprefix}jshopping_products_extra_fields");
$extra_info = $res->fetchAll(PDO::FETCH_ASSOC);
$extra_info = nomalizeArray($extra_info, 'name');
$extra_select = '';
$extra_cnt = count($extra_info);
if($extra_cnt != 0) {
for($i = 1; $i <= $extra_cnt; $i++) {
$extra_select .= "{$tb_product}.extra_field_{$i},";
}
}
$query = "CREATE TEMPORARY TABLE tmp (category_id int,product_id int) ENGINE MyISAM;";
$pdo->query($query);
$query = "INSERT INTO tmp (category_id, product_id) SELECT category_id, product_id FROM {$tb_product_category_xref} GROUP BY product_id";
$pdo->query($query);
$query = "
SELECT
{$extra_select}
{$tb_product}.product_id,
{$tb_product}.`name_ru-RU` as product_name,
{$tb_manufacturer}.`name_ru-RU` as mf_name,
{$tb_manufacturer}.`manufacturer_id`,
tmp.`category_id`,
{$tb_product}.`product_price`,
{$tb_product}.`product_id` as product_sku,
{$tb_product}.`product_quantity`,
{$tb_product}.`product_full_image` as product_full_image,
{$tb_product}.`short_description_ru-RU` as product_s_desc
FROM
{$tb_product}
LEFT JOIN tmp ON {$tb_product}.product_id = tmp.product_id
LEFT JOIN {$tb_manufacturer}
ON {$tb_product}.product_manufacturer_id = {$tb_manufacturer}.manufacturer_id
WHERE {$tb_product}.product_publish='1'
GROUP BY {$tb_product}.product_id
";
$res = $pdo->query($query);
while ($row= $res->fetch(PDO::FETCH_ASSOC)) {
if (!in_array($row['product_id'],$product_log) && ($row['product_price']) && $row['product_price'] > 0) {
$product_log[] = $row['product_id'];
$product_price = substr($row['product_price'], 0, -3);
echo "\n<offer id=\"".$row['product_id']."\" available=\"true\" bid=\"$bid\">\n";
$sef = "http://$cfg_url".JRoute::_("index.php?option=com_jshopping&controller=product&task=view&category_id=".$row['category_id']."&product_id=".$row['product_id']);
echo "<url>".$sef."</url>\n";
echo "<price>$product_price</price>\n";
// Валюта в которой указаны Ваши цены
echo "<currencyId>".$currency."</currencyId>\n";
echo "<categoryId>".$row['category_id']."</categoryId>\n";
if(!empty($row['product_full_image'])) {
echo "<picture>http://$cfg_url/components/com_jshopping/files/img_products/{$row['product_full_image']}</picture>\n";
}
// Возможность доставки
echo "<delivery>true</delivery> \n";
echo "<name>".$row['product_name']."</name>\n";
echo"<vendor>".$row['mf_name']."</vendor>";
$row['product_s_desc'] = trim(str_replace(" ","",$row['product_s_desc']));
echo "<description>".htmlspecialchars(strip_tags($row['product_s_desc']))."</description>\n";
for($i = 1; $i <= $extra_cnt; $i++) {
if(!empty($row['extra_field_'.$i])) {
//var_dump($row['extra_field_'.$i]);
echo "<param name=\"{$extra_info[$i]}\">".htmlspecialchars($row['extra_field_'.$i])."</param>\n";
}
}
echo "</offer>\n";
}
}
$pdo->query("DROP TEMPORARY TABLE tmp");
} catch (Exception $e) {
echo $e->getMessage();
}
function nomalizeArray($arr, $val, $key = 'id') {
$newArr = Array();
foreach($arr as $k => $v) {
$newArr[$v[$key]] = $v[$val];
}
return $newArr;
}
?>
</offers>
</shop>
</yml_catalog>
Фатальная ошибка: Ошибка парсинга XML: Error parsing XML feed: Unknown element 'br' (строка 4, столбец 4)