Делаем экспорт данных в формат яндекс маркет из 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&flypage=shop.flypage&option=com_virtuemart&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 файл).
Спонсор поста: Как создать сайт, как быстро создать свой сайт, как обычно создают сайты.
Прокомментировать
Рубрики
- javascript
- SEO
- Smarty
- UIPI
- Боремся со СПАМом
- Верстка
- Движки форумов
- Железо
- Забавно
- Интернет в лицах
- Интернет-магазины
- Новости
- Обзоры сайтов
- Обо всем
- Полезные скрипты
- Работа с CMS
- Создание сайтов
- Уроки рекламы
- Шаблоны
