galactic Posted May 22, 2013 Share Posted May 22, 2013 (edited) PS v1.5.4.1 Нужно реализовать экспорт продуктов в XML для сайтa сравнения. XML должен иметь такой формат: <? Xml version = "1.0" encoding = "utf-8"?> <root> <item> <name> Shure SE210 </ name> <link> http://www.myshop.com/ru/accessories-ipod/se210-blanc.html</link> <price> 150.55 </ price> <image> http://www.myshop.com/14-large_default/shure-se210.jpg </image> <category_full> Accessories </category_full> <category_link> http://www.myshop.com/ru/4-accessories-ipod</category_link> <manufacturer> Shure Incorporated</manufacturer> <model> SE210</model> <in_stock> 7 </in_stock> </ Item> <item> ... </ Item> </ Root> Есть следующий скрипт, корректно генерирующий часть тэгов, но не все: <?php include(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); // Get data $number = (intval(Tools::getValue('n')) ? intval(Tools::getValue('n')) : 10000); $orderByValues = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position'); $orderWayValues = array(0 => 'ASC', 1 => 'DESC'); $orderBy = Tools::strtolower(Tools::getValue('orderby', $orderByValues[intval(Configuration::get('PS_PRODUCTS_ORDER_BY'))])); $orderWay = Tools::strtoupper(Tools::getValue('orderway', $orderWayValues[intval(Configuration::get('PS_PRODUCTS_ORDER_WAY'))])); if (!in_array($orderBy, $orderByValues)) $orderBy = $orderByValues[0]; if (!in_array($orderWay, $orderWayValues)) $orderWay = $orderWayValues[0]; //$id_category = (intval(Tools::getValue('id_category')) ? intval(Tools::getValue('id_category')) : 1); $currency = new Currency(intval($cookie->id_currency)); $affiliate = (Tools::getValue('ac') ? '?ac='.Tools::getValue('ac') : ''); $categTree = Category::getRootCategory()->recurseLiteCategTree(0); function constructTreeNode($node){ $ret = ';'; $ret .= $node['id'].'|'.$node['name'].';'; if(!empty($node['children'])) { $ret .= ';'; foreach ($node['children'] AS $child) $ret .= constructTreeNode($child); $ret .= ';'; } return $ret; } foreach ($categTree['children'] AS $child) $ulTree .= constructTreeNode($child); $tab_cat=explode(';',$ulTree); foreach ($tab_cat as $id2cat){ $tab_id2cat=explode('|',$id2cat); if (!empty($tab_id2cat)) $tab_cat_final[$tab_id2cat[0]]=$tab_id2cat[1]; } header("Content-Type:text/xml; charset=utf-8"); echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; ?> <root> <?php foreach ($tab_cat_final as $id_category=>$name_category){ $products = Product::getProducts(intval($cookie->id_lang), 0, ($number > 10000 ? 10000 : $number), $orderBy, $orderWay, $id_category, true); foreach ($products AS $product) { $image = Image::getImages(intval($cookie->id_lang), $product['id_product']); $prix=Product::getPriceStatic($product['id_product']); if ($product['reduction_percent']>0) $prix_promo=$prix*(1-$product['reduction_percent']/100);else $prix_promo=($prix-$product['reduction_price']); echo "<item>\n"; echo "<name><![CDATA[".$product['name']."]]></name>\n"; echo "<link><![CDATA[".htmlspecialchars($link->getproductLink($product['id_product'], $product['link_rewrite'], Tools::getValue('id_category'))).$affiliate."]]></link>\n"; echo "<price>".$prix."</price>\n"; echo "<image>"._PS_BASE_URL_.__PS_BASE_URI__."img/p/".$image[0]['id_product']."-".$image[0]['id_image']."-large.jpg</image>\n"; echo "<category_full><![CDATA[".$name_category."]]></category_full>\n"; echo "<category_link><![CDATA[".htmlspecialchars($link->getcategoryLink($category['id_category'], $category['link_rewrite'], Tools::getValue('id_category'))).$affiliate."]]></category_link>\n"; echo "<manufacturer><![CDATA[".$product['manufacturer_name']."]]></manufacturer>\n"; echo "<reference><![CDATA[".$product['id_product']."]]></reference>\n"; echo "</item>\n"; } } ?> </root> есть следующие проблемы: 1. неправильный формат цены: показывает 191.26073 вместо 191.26, или 65 вместо 65.00. 2. неправильный путь к картинке: http://mysite.com/img/p/8-27-large.jpg, должен быть: http://mysite.com/14...ult/picture.jpg 3. неправильный category_link: 'http://mysite.com/ru/-', вместо http://www.mysite.com/7-cellphones/ 4. как получить модель <model> SE210 </model> и 5. количество в магазине <in_stock> 5 </in_stock> ? Edited May 22, 2013 by galactic (see edit history) Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 22, 2013 Share Posted May 22, 2013 1. см. функцию number_format 2. Картинку можно получить так: Context::getContext()->link->getImageLink($product['link_rewrite'], Image::getCover($product['id_product']), 'large_default'); 3. Ссылка категории: $cat = new Category($product['id_category_default']); $link = $cat->getLink(); 4. Модель - это скорее всего артикул ($product['reference']) 5. StockAvailable::getQuantityAvailableByProduct($product['id_product'], $product['id_product_attribute']) Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 22, 2013 Share Posted May 22, 2013 Еще очень рекомендую использовать SimpleXML, а не echo Link to comment Share on other sites More sharing options...
galactic Posted May 22, 2013 Author Share Posted May 22, 2013 Еще очень рекомендую использовать SimpleXML, а не echo A можешь показать, как должен выглядеть полный код с учётом указанных изменений? Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 23, 2013 Share Posted May 23, 2013 A можешь показать, как должен выглядеть полный код с учётом указанных изменений? Пути решения я написал, но если ты не программист, то тебе форум не поможет. Обращайся к профессиональным девелоперам, Реализация данной фичи может занять несколько часов. Никто бесплатно работать не хочет. Link to comment Share on other sites More sharing options...
galactic Posted May 23, 2013 Author Share Posted May 23, 2013 Пути решения я написал, но если ты не программист, то тебе форум не поможет. Обращайся к профессиональным девелоперам, Реализация данной фичи может занять несколько часов. Никто бесплатно работать не хочет. ты не понял: я не прошу твою реализацию данного (несложного) скрипта на Simple XML, а прошу показать конкретно твои изменения в существующем коде. Хотя бы для того, чтобы увидеть, работают твои предложения или нет. A oбщие замечания смысла не имеют вообще. Link to comment Share on other sites More sharing options...
Dzianis Yurevich Posted May 23, 2013 Share Posted May 23, 2013 ты не понял: я не прошу твою реализацию данного (несложного) скрипта на Simple XML, а прошу показать конкретно твои изменения в существующем коде. Хотя бы для того, чтобы увидеть, работают твои предложения или нет. A oбщие замечания смысла не имеют вообще. После такого поста тебе сразу же отправят 100500 готовых конкретных решений Link to comment Share on other sites More sharing options...
sors Posted May 23, 2013 Share Posted May 23, 2013 Еще очень рекомендую использовать SimpleXML, а не echo SimpleXML при большом количестве товаров всю память сожрет. Лучше echo и flush Link to comment Share on other sites More sharing options...
galactic Posted May 26, 2013 Author Share Posted May 26, 2013 (edited) 1. см. функцию number_format 2. Картинку можно получить так: Context::getContext()->link->getImageLink($product['link_rewrite'], Image::getCover($product['id_product']), 'large_default'); 3. Ссылка категории: $cat = new Category($product['id_category_default']); $link = $cat->getLink(); 4. Модель - это скорее всего артикул ($product['reference']) 5. StockAvailable::getQuantityAvailableByProduct($product['id_product'], $product['id_product_attribute']) пробовал твои предложения (кроме цены): <root> <?php $default_currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT')); foreach ($tab_cat_final as $id_category=>$name_category) { $products = Product::getProducts(intval($cookie->id_lang), 0, ($number > 10000 ? 10000 : $number), $orderBy, $orderWay, $id_category, true); foreach ($products AS $product) { $price = Product::getPriceStatic($product['id_product']); if ($product['reduction_percent'] > 0) $prix_promo = $price * (1 - $product['reduction_percent'] / 100); else $prix_promo = ($price-$product['reduction_price']); Context::getContext()->link->getImageLink($product['link_rewrite'], Image::getCover($product['id_product']), 'large_default'); StockAvailable::getQuantityAvailableByProduct($product['id_product'], $product['id_product_attribute']) $cat = new Category($product['id_category_default']); $link = $cat->getLink(); echo "<item>\n"; echo "<name><![CDATA[".$product['name']."]]></name>\n"; echo "<link><![CDATA[".htmlspecialchars($link->getproductLink($product['id_product'], $product['link_rewrite'], Tools::getValue('id_category'))).$affiliate."]]></link>\n"; echo "<price>".Tools::displayPrice($price, $default_currency)."</price>\n"; echo "<image>".$image_link."</image>\n"; echo "<category_full><![CDATA[".$name_category."]]></category_full>\n"; echo "<category_link><![CDATA[".$link."]]></category_link>\n"; echo "<manufacturer><![CDATA[".$product['manufacturer_name']."]]></manufacturer>\n"; echo "<reference><![CDATA[".$product['reference']."]]></reference>\n"; echo "<in_stock><![CDATA[".$product['id_product_attribute']."]]></in_stock>\n"; echo "</item>\n"; } } ?> </root> скрипт выдаёт ошибку: Parse error: syntax error, unexpected T_VARIABLE in /home/dsabcs/public_html/test.php on line 61 Edited May 26, 2013 by galactic (see edit history) Link to comment Share on other sites More sharing options...
absent Posted May 26, 2013 Share Posted May 26, 2013 и какая из строк 61))) напиши. я попробую щас поправить 1 вариант скрипта.отпишу что получилось Link to comment Share on other sites More sharing options...
absent Posted May 26, 2013 Share Posted May 26, 2013 (edited) Интерес одержал верх)) ты не понял: я не прошу твою реализацию данного (несложного) скрипта на Simple XML, а прошу показать конкретно твои изменения в существующем коде. Хотя бы для того, чтобы увидеть, работают твои предложения или нет. A oбщие замечания смысла не имеют вообще. ну вот и готово. Стоило 10 минут посидеть) http://dev-prestashop.ru/1541/demo.php Ни о каких часах нет речи! стоит только вопрос модель это свойство или артикул. и почему в <reference>$product['id_product']</reference>? Edited May 26, 2013 by psjob (see edit history) Link to comment Share on other sites More sharing options...
galactic Posted May 27, 2013 Author Share Posted May 27, 2013 (edited) Интерес одержал верх)) ну вот и готово. Стоило 10 минут посидеть) http://dev-prestashop.ru/1541/demo.php Ни о каких часах нет речи! стоит только вопрос модель это свойство или артикул. и почему в <reference>$product['id_product']</reference>? Mодель - это артикул товара (Reference), так точнее. <model>6120</model> В первом варианте <reference>$product['id_product']</reference> наверно напутано. Но твой линк недоступен: Not Found ( The requested URL /1541/demo.php was not found on this server. Additionally, a 404 Not Found error was encountered while trying to use an ErrorDocument to handle the request. Edited May 27, 2013 by galactic (see edit history) Link to comment Share on other sites More sharing options...
absent Posted May 27, 2013 Share Posted May 27, 2013 смотри Link to comment Share on other sites More sharing options...
galactic Posted May 27, 2013 Author Share Posted May 27, 2013 (edited) смотри Cамый первый и последний продукты дублируются? А также, откуда берётся количество, например iPod touch <in_stock>5</in_stock>? (на странице не выведено).Tы немного изменил скрипт под свой шаблон? Edited May 27, 2013 by galactic (see edit history) Link to comment Share on other sites More sharing options...
absent Posted May 27, 2013 Share Posted May 27, 2013 на файл.там всё видно)) 1 Link to comment Share on other sites More sharing options...
galactic Posted May 27, 2013 Author Share Posted May 27, 2013 (edited) на файл.там всё видно)) Cпасибо!)) Работает нормально. Одно маленькое замечание: у меня перед каждым продуктом он дублирует картинку, как заголовок: </item> http://site.com/15-large_default/ipod-nano.jpg <item> ... ... Edited May 27, 2013 by galactic (see edit history) Link to comment Share on other sites More sharing options...
absent Posted May 27, 2013 Share Posted May 27, 2013 Вот поправил,и щас всё гуд, пользуй. 1 Link to comment Share on other sites More sharing options...
galactic Posted May 27, 2013 Author Share Posted May 27, 2013 Вот поправил,и щас всё гуд, пользуй. Cпасибо, всё отлично. ) Link to comment Share on other sites More sharing options...
gluck Posted May 28, 2013 Share Posted May 28, 2013 Еще очень рекомендую использовать SimpleXML, а не echo А вот кстати когда мы писали выгрузку на яндыкс-маркет, чото не срослось с SimpleXML и в результате получился file_put_contents. Link to comment Share on other sites More sharing options...
absent Posted May 28, 2013 Share Posted May 28, 2013 echo мне кажется удобнее Link to comment Share on other sites More sharing options...
gluck Posted May 31, 2013 Share Posted May 31, 2013 Эхо универсальнее и пригодится при отладке. В боевом варианте удобнее напрямую в файл. Link to comment Share on other sites More sharing options...
absent Posted June 1, 2013 Share Posted June 1, 2013 мне кажется динамически удобнее) Link to comment Share on other sites More sharing options...
awfuljka Posted June 24, 2013 Share Posted June 24, 2013 у меня выдает ошибку : Ошибка разбора XML Ошибка разбора XML: синтаксическая ошибка (Строка: 3, Символ: 0) Обработать документ как HTML Ошибка: unexpected end-of-file Описание: http://www.w3.org/TR/REC-xml/ 1: <?xml version="1.0" encoding="UTF-8"?> 2: <root> Link to comment Share on other sites More sharing options...
absent Posted June 24, 2013 Share Posted June 24, 2013 что за ошибка там? этот файл для 1.4.5.1 Link to comment Share on other sites More sharing options...
awfuljka Posted June 24, 2013 Share Posted June 24, 2013 (edited) что за ошибка там? этот файл для 1.4.5.1 <?php include(dirname(__FILE__).'/config/config.inc.php'); require_once(dirname(__FILE__).'/init.php'); // Get data $number = (intval(Tools::getValue('n')) ? intval(Tools::getValue('n')) : 10000); $orderByValues = array(0 => 'name', 1 => 'price', 2 => 'date_add', 3 => 'date_upd', 4 => 'position'); $orderWayValues = array(0 => 'ASC', 1 => 'DESC'); $orderBy = Tools::strtolower(Tools::getValue('orderby', $orderByValues[intval(Configuration::get('PS_PRODUCTS_ORDER_BY'))])); $orderWay = Tools::strtoupper(Tools::getValue('orderway', $orderWayValues[intval(Configuration::get('PS_PRODUCTS_ORDER_WAY'))])); if (!in_array($orderBy, $orderByValues)) $orderBy = $orderByValues[0]; if (!in_array($orderWay, $orderWayValues)) $orderWay = $orderWayValues[0]; $id_category = (intval(Tools::getValue('id_category')) ? intval(Tools::getValue('id_category')) : 1); $currency = new Currency(intval($cookie->id_currency)); $affiliate = (Tools::getValue('ac') ? '?ac='.Tools::getValue('ac') : ''); $categTree = Category::getRootCategory()->recurseLiteCategTree(0); function constructTreeNode($node){ $ret = ';'; $ret .= $node['id'].'|'.$node['name'].';'; if(!empty($node['children'])) { $ret .= ';'; foreach ($node['children'] AS $child) $ret .= constructTreeNode($child); $ret .= ';'; } return $ret; } foreach ($categTree['children'] AS $child) $ulTree .= constructTreeNode($child); $tab_cat=explode(';',$ulTree); foreach ($tab_cat as $id2cat){ $tab_id2cat=explode('|',$id2cat); if (!empty($tab_id2cat)) $tab_cat_final[$tab_id2cat[0]]=$tab_id2cat[1]; } header("Content-Type:text/xml; charset=utf-8"); echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; ?> <root> <?php foreach ($tab_cat_final as $id_category=>$name_category){ $products = Product::getProducts(intval($cookie->id_lang), 0, ($number > 10000 ? 10000 : $number), $orderBy, $orderWay, $id_category, true); foreach ($products AS $product) { $image = Image::getImages(intval($cookie->id_lang), $product['id_product']); $lg = Context::getContext()->language->id; $idcarr = Image::getCover($product['id_product']); $idcover = $idcarr['id_image']; $img = Context::getContext()->link->getImageLink($product['link_rewrite'], $idcover, 'large_default'); $prix=Product::getPriceStatic($product['id_product']); $prs = number_format($prix, 2, '.', ''); $t = Category::getLinkRewrite((int)$product['id_category_default'], $lg); $qtty = StockAvailable::getQuantityAvailableByProduct($product['id_product'], $product['id_product_attribute']); if ($product['reduction_percent']>0) $prix_promo=$prix*(1-$product['reduction_percent']/100);else $prix_promo=($prix-$product['reduction_price']); echo "<item>\n"; echo "<name><![CDATA[".$product['name']."]]></name>\n"; echo "<link><![CDATA[".htmlspecialchars($link->getproductLink($product['id_product'], $product['link_rewrite'], Tools::getValue('id_category'))).$affiliate."]]></link>\n"; echo "<price>".$prs."</price>\n"; echo "<image>".$img."</image>\n"; echo "<category_full><![CDATA[".$name_category."]]></category_full>\n"; echo "<category_link><![CDATA["._PS_BASE_URL_.__PS_BASE_URI__.$product['id_category_default']."-".$t."]]></category_link>\n"; echo "<manufacturer><![CDATA[".$product['manufacturer_name']."]]></manufacturer>\n"; echo "<reference><![CDATA[".$product['id_product']."]]></reference>\n"; echo "<in_stock>".$qtty."</in_stock>\n"; echo "<model><![CDATA[".$product['reference']."]]></model>\n"; echo "</item>\n"; } } ?> </root> http://www.order24.lv/xml.php Я понимаю чтото кроется вот здесь : } header("Content-Type:text/xml; charset=utf-8"); echo '<?xml version="1.0" encoding="UTF-8"?>'."\n"; ?> <root> <?php Может в настройках где то проблемы? так замучался Магазин на версии 1.5.4 В IE показывает ошибку : Эта ошибка (HTTP 500 — внутренняя ошибка сервера) означает, что на веб-сайте произошел сбой сервера, который не позволяет отобразить веб-страницу. Дополнительные сведения об ошибках HTTP см. в справке. Edited June 24, 2013 by awfuljka (see edit history) Link to comment Share on other sites More sharing options...
absent Posted June 25, 2013 Share Posted June 25, 2013 точно не в этих строках Включи показ ошибок!!!! Link to comment Share on other sites More sharing options...
awfuljka Posted June 25, 2013 Share Posted June 25, 2013 В логах : Undefined offset :1 na 38 stro4ke Link to comment Share on other sites More sharing options...
absent Posted June 25, 2013 Share Posted June 25, 2013 зачем мне лог включи показ ошибок престы в defines.inc.php Link to comment Share on other sites More sharing options...
awfuljka Posted June 25, 2013 Share Posted June 25, 2013 Включил define('_PS_MODE_DEV_', true); В какой файл он ошибки пишет? Link to comment Share on other sites More sharing options...
absent Posted June 25, 2013 Share Posted June 25, 2013 какаято функция не выполняется, а ошибку он не показывает... Link to comment Share on other sites More sharing options...
savvato Posted June 25, 2013 Share Posted June 25, 2013 http://elcommerce.com.ua/moduli-dlya-prestashop/25-modul-eksport-kataloga-iz-cms-prestashop-v-1s-ut-.html експорт товаров с сайта в формате CommerceML2. Попробуйте, может устроит. Link to comment Share on other sites More sharing options...
absent Posted June 25, 2013 Share Posted June 25, 2013 http://elcommerce.co...p-v-1s-ut-.html експорт товаров с сайта в формате CommerceML2. Попробуйте, может устроит. Речь о агрегаторах Link to comment Share on other sites More sharing options...
savvato Posted June 25, 2013 Share Posted June 25, 2013 Речь о агрегаторах сорри Макс, не досмотрел... Link to comment Share on other sites More sharing options...
absent Posted June 25, 2013 Share Posted June 25, 2013 сорри Макс, не досмотрел... Это тебе идея для доработки) Link to comment Share on other sites More sharing options...
gluck Posted September 11, 2013 Share Posted September 11, 2013 У него полторашка, она может показывать еррор 500 безо всякой причины когда ей захочется. Обсуждаемый скрипт не при чем. Link to comment Share on other sites More sharing options...
Christin_a Posted June 3, 2014 Share Posted June 3, 2014 (edited) Спасибо за скрипт! Очень полезный. Настроила немного под себя. У меня 1.5.6, скрипт ошибку не выдает, но есть один косяк. Если товару присвоена категория и подкатегория, скрипт не заполняет category_full. Если товару присвоена просто категория (без подкатегории), то все нормально. Попробовала заставить скрипт выводить id категорий, а не название - выводит у всех товаров без ошибок. Как можно сделать так, чтобы у всех товаров отображались названия категорий? Edited June 4, 2014 by Christin_a (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts