Авг
15

Делаем экспорт данных в формат яндекс маркет из VirtueMart

Заказчики часто просят сделать выгрузку товаров из виртумарта в формат . Ну да, – штука удобная и для продвижения магазина очень нужная. Ну что, будем делать? Тогда поехали!

маркет понимает формат YML. Именно в него мы и будем экспортировать наши товары (например,меркурий чемодан).

Создаём в корневой папке джумлы market.yml следующего содержания (сохраняем файл в кодировке utf-8):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
<?php
//***********************************************************
//
// Версия коннектора к Yandex.Market от 18.04.2009
// автор доработок Саид Дашук (dashuk@ngs.ru)
//
// Доработки:
// 1. Подключение к настройкам Joomla (теперь не надо прописывать реквизиты доступа к БД,
//         а достаточно указать конфигурационный файл 'configuration.php')
// 2. Добавлены комментарии для новичков
// 3. ВЫБОРКА ВСЕХ ТОВАРОВ ПРОИСХОДИТ ОДНИМ ЗАПРОСОМ!
// 4. Добавлен шаблон для описания товара (тег <description>)
// 5. Курсы валют, приравнены к курсу ЦБРФ
// 6. Добавлены теги "доставка" и "производитель" (просто мне они нужны, а Вы решайте сами)
// а также: форматирование для удобства кода и вывода и еще что то по мелочам.
//
// Проверялось на Joomla! 1.5.9 Production/Stable / VirtueMart 1.1.2 stable
//
//***********************************************************
 
 
// Пропишите относительный путь к 'configuration.php' (он находится в корне Joomla)
// Например: include '../configuration.php';
include 'configuration.php';
$cfg = new JConfig();
 
//NAME - Короткое название магазина (название, которое выводится в списке найденных на Яндекс.Маркете товаров.
//Не должно содержать более 20 символов). Нельзя использовать слова, не имеющие отношения к
//наименованию магазина ("лучший", "дешевый"), указывать номер телефона и т.п. Название магазина,
//должно совпадать с фактическим названием магазина, которое публикуется на сайте. При несоблюдении
//данного требования наименование может быть изменено Яндексом самостоятельно без уведомления Клиента.
$cfg_name = $cfg->fromname;
 
//Полное наименование компании, владеющей магазином. Не публикуется, используется для внутренней идентификации.
$cfg_company = $cfg->sitename;
 
//URL-адрес главной страницы магазина без http://
$cfg_url = 'test.ru';
 
// Шаблон для описания товара
// Вместо {product_name} - будет вставлено наименование товара
// Вместо {product_desc} - будет вставлено краткое описание
// ПРИМЕР:
// $description_template = '{product_name} от производителя';
$description_template = '{product_desc}';
 
// Ставка за клик (в центах)
$bid = '11';
 
 
$hostname               = $cfg->host;
$username               = $cfg->user;
$password               = $cfg->password;
$dbName                 = $cfg->db;
$category               = $cfg->dbprefix."vm_category";
$category_xref          = $cfg->dbprefix."vm_category_xref";
$userstable             = $cfg->dbprefix."vm_product";
$pricetable             = $cfg->dbprefix."vm_product_price";
$product_category_xref  = $cfg->dbprefix."vm_product_category_xref";
 
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die(mysql_error());
 
// Исправьте, если у вас другая кодировка в БД
mysql_query('set names utf8');
 
echo"< ?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
echo"< !DOCTYPE yml_catalog SYSTEM \"shops.dtd\">\n";
echo"<yml_catalog date=\"";
echo date('Y-m-d H:i');
echo"\">\n";
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";
$query_cat = "SELECT * FROM $category_xref";
$res_cat = mysql_query($query_cat) or die(mysql_error());
$rw=1;
while ($row_cat=mysql_fetch_array($res_cat)) {
    $cat_parent_id=$row_cat['category_parent_id'];
    $cat_child_id=$row_cat['category_child_id'];
    $query2 = "SELECT category_name FROM $category WHERE category_id=".$row_cat['category_child_id'];
    $res_cat1 = mysql_query($query2) or die(mysql_error());
    $name_cat=mysql_fetch_array($res_cat1);
    $cat_name=$name_cat['category_name'];
    if ($cat_parent_id==0) {
        echo"<category id=\"".$cat_child_id."\">".$cat_name."</category>\n";
    }
    else {
        echo"<category id=\"".$cat_child_id."\" parentId=\"".$cat_parent_id."\">".$cat_name."</category>\n";
    }
    $rw++;
}
echo"</categories>\n";
 
// Секция описания товаров
echo"<offers>\n";
 
$tb_product                 = $cfg->dbprefix."vm_product";
$tb_manufacturer            = $cfg->dbprefix."vm_manufacturer";
$tb_product_mf_xref         = $cfg->dbprefix."vm_product_mf_xref";
$tb_category                = $cfg->dbprefix."vm_category";
$tb_product_category_xref   = $cfg->dbprefix."vm_product_category_xref";
$tb_price                   = $cfg->dbprefix."vm_product_price";
 
$query = "
SELECT
    $tb_product.product_id,
    $tb_product.product_name,
    $tb_manufacturer.mf_name,
    $tb_manufacturer.manufacturer_id,
    $tb_category.category_name,
    $tb_category.category_id,
    $tb_product_category_xref.category_id,
    $tb_price.product_price,
    $tb_product.product_sku,
    $tb_product.product_in_stock,
    $tb_product.product_unit,
    $tb_product.product_full_image,
    $tb_product.product_s_desc,
    $tb_product.product_weight
FROM
    ($tb_product_category_xref
RIGHT JOIN ($tb_price
RIGHT JOIN (($tb_product_mf_xref
RIGHT JOIN $tb_product
ON $tb_product_mf_xref.product_id = $tb_product.product_id)
LEFT JOIN $tb_manufacturer
ON $tb_product_mf_xref.manufacturer_id = $tb_manufacturer.manufacturer_id)
ON $tb_price.product_id = $tb_product.product_id)
ON $tb_product_category_xref.product_id = $tb_product.product_id)
LEFT JOIN $tb_category
ON $tb_product_category_xref.category_id = $tb_category.category_id
WHERE $tb_product.product_publish='Y'
"
;
 
$row = d2a($query);
$product_log = Array();
for($i=0;$i<count ($row);$i++) {
    if (!in_array($row[$i]['product_id'],$product_log) AND ($row[$i]['product_price'])) {
        $product_log[] = $row[$i]['product_id'];
 
        $url="http://$cfg_url/index.php?page=shop.product_details&amp;flypage=shop.flypage&amp;option=com_virtuemart&amp;product_id=".$row[$i]['product_id'];
        //$url="http://$cfg_url/client?page=shop.product_details&flypage=flypage-ask.tpl&product_id=".$row[$i]['product_id']."&category_id=".$row[$i]['category_id']."&manufacturer_id=".$row[$i]['manufacturer_id'];
 
        $product_full_image = "http://$cfg_url/components/com_virtuemart/shop_image/product/".$row[$i]['product_full_image'];
        $tags = Array ('{product_name}','{product_desc}');
        $repl = Array ($row[$i]['product_name'],$row[$i]['product_s_desc']);
        $product_price = substr($row[$i]['product_price'], 0, -3);
        $product_cat_id=$row[$i]['category_id'];
        echo"\n<offer id=\"".$row[$i]['product_id']."\" available=\"true\" bid=\"$bid\">\n";
        echo"<url>".$url."</url>\n";
        echo"<price>$product_price</price>\n";
        // Валюта в которой указаны Ваши цены
        echo"<currencyid>RUR</currencyid>\n";
        echo"<categoryid>".$product_cat_id."</categoryid>\n";
        echo"<picture>".$product_full_image ."</picture>\n";
        // Возможность доставки
        echo"<delivery>true</delivery> \n";
        echo"<name>".strip_tags($row[$i]['product_name'])."\"</name>\n";
        echo"<description>".strip_tags(str_replace($tags,$repl,$description_template))."</description>\n";
        echo"\n";
    }
}
 
echo"</count></offers>\n";
echo"</shop>\n";
echo"</yml_catalog>\n";
 
function d2a($query){
    $result = mysql_query($query) or die("Query failed : " . mysql_error());
    while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {$res[] = $line;}
    mysql_free_result($result);
    return $res;
}
 
?>

Теперь у нас уже все работает, но чтобы увидеть результат, немного нужно подкорректировать файлик .htaccess:

1
2
3
# Чтобы в файлах .html и .htm работали включения PHP вида
RemoveHandler .html .htm
AddType application/x-httpd-php .php .html .phtml .htm .yml

Затем проверяем работу скрипта: открываем страницу http://yoursite.ru/market.yml в браузере и смотрим исходный код страницы. Убеждаемся, что идёт выгрузка.  Далее проверяем работу скрипта через интерфейс Яндекс Маркета или Яндекс-Вебмастера (там тоже есть возможность подключить YML файл).

Спонсор поста: Как создать , как быстро создать свой сайт, как обычно создают сайты.

Прокомментировать

Рубрики

Облако меток

В прямом эфире