-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathyandex.php
125 lines (103 loc) · 4.28 KB
/
yandex.php
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
<?php
require_once('api/Simpla.php');
$simpla = new Simpla();
header("Content-type: text/xml; charset=UTF-8");
print (pack('CCC', 0xef, 0xbb, 0xbf));
// Заголовок
print
"<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE yml_catalog SYSTEM 'shops.dtd'>
<yml_catalog date='".date('Y-m-d H:i')."'>
<shop>
<name>".$simpla->settings->site_name."</name>
<company>".$simpla->settings->company_name."</company>
<url>".$simpla->config->root_url."</url>
";
// Валюты
$currencies = $simpla->money->get_currencies(array('enabled'=>1));
$main_currency = reset($currencies);
print "<currencies>
";
foreach($currencies as $c)
if($c->enabled)
print "<currency id='".$c->code."' rate='".$c->rate_to/$c->rate_from*$main_currency->rate_from/$main_currency->rate_to."'/>
";
print "</currencies>
";
// Категории
$categories = $simpla->categories->get_categories();
print "<categories>
";
foreach($categories as $c)
{
print "<category id='$c->id'";
if($c->parent_id>0)
print " parentId='$c->parent_id'";
print ">".htmlspecialchars($c->name)."</category>
";
}
print "</categories>
";
// Товары
$simpla->db->query("SET SQL_BIG_SELECTS=1");
// Товары
$simpla->db->query("SELECT v.price, v.compare_price as compare_price, v.id as variant_id, p.name as product_name, v.name as variant_name, v.position as variant_position, p.id as product_id, p.url, p.annotation, pc.category_id, i.filename as image
,p.brand_id, b.name as brand_name
FROM __variants v LEFT JOIN __products p ON v.product_id=p.id
LEFT JOIN __brands b ON p.brand_id = b.id
LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1)
LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1)
WHERE p.visible AND p.ymarket > 0 AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");
print "<offers>
";
$products = $simpla->db->results();
$currency_code = reset($currencies)->code;
// В цикле мы используем не results(), a result(), то есть выбираем из базы товары по одному,
// так они нам одновременно не нужны - мы всё равно сразу же отправляем товар на вывод.
// Таким образом используется памяти только под один товар
$prev_product_id = null;
//while($p = $simpla->db->result())
foreach($products as $p)
{
$variant_url = '';
if ($prev_product_id === $p->product_id)
$variant_url = '?variant='.$p->variant_id;
$prev_product_id = $p->product_id;
$price = round($simpla->money->convert($p->price, $main_currency->id, false),2);
$compare_price = round($simpla->money->convert($p->compare_price, $main_currency->id, false),2);
print
"
<offer id='$p->variant_id' available='true'>
<url>".$simpla->config->root_url.'/products/'.$p->url.$variant_url."</url>";
print "<price>$price</price>";
if($p->compare_price && $p->compare_price > 0)
print "<oldprice>".$compare_price."</oldprice>";
print "
<currencyId>".$currency_code."</currencyId>
<categoryId>".$p->category_id."</categoryId>
";
if($p->image)
print "<picture>".$simpla->design->resize_modifier($p->image, 300, 300)."</picture>
";
print "<name>".htmlspecialchars($p->product_name).($p->variant_name?' '.htmlspecialchars($p->variant_name):'')."</name>
<description>".htmlspecialchars(strip_tags($p->annotation))."</description>";
// Загружаем бренд
if($p->brand_name)
print '<vendor>'. $p->brand_name .'</vendor>';
// Загружаем свойства товара
$query = $simpla->db->placehold("SELECT f.id as feature_id, f.name, po.value, po.product_id FROM __options po LEFT JOIN __features f ON f.id=po.feature_id WHERE po.product_id = ? AND f.in_yandex=1 ORDER BY f.position", $p->product_id);
$simpla->db->query($query);
$p->features = $simpla->db->results();
if($p->features) {
foreach ($p->features as $f) {
print '<param name="'.$f->name.'">'. $f->value .'</param>';
}
}
print "</offer>
";
}
print "</offers>
";
print "</shop>
</yml_catalog>
";