mess@nger Posted March 28, 2014 Share Posted March 28, 2014 День добрый, задался целью доделать YML не могу найти как вытянуть атрибуты через обьекты престы продукты подтянул через $p=Product::getProducts($id_lang, 0, 0, 'id_product', 'desc', false); $products=Product::getProductsProperties($id_lang, $p); честно говоря, не помню где я тогда откопал нужные мне методы, т.к. данную часть я писал больше чем полгода назад. Теперь хочу сделать полноценный YML для одежды, больше всего интересуют размеры... Соответственно нужны методы для вывода атрибутов, но описания методов престы найти не могу, а хотелось бы иметь документацию по API. Подскажите, плз методы для вызова атрибутов и доступных значений для продукта в престе... ну или где есть толковое описание методов престы. Link to comment Share on other sites More sharing options...
absent Posted March 28, 2014 Share Posted March 28, 2014 День добрый, задался целью доделать YML не могу найти как вытянуть атрибуты через обьекты престы продукты подтянул через $p=Product::getProducts($id_lang, 0, 0, 'id_product', 'desc', false); $products=Product::getProductsProperties($id_lang, $p); честно говоря, не помню где я тогда откопал нужные мне методы, т.к. данную часть я писал больше чем полгода назад. Теперь хочу сделать полноценный YML для одежды, больше всего интересуют размеры... Соответственно нужны методы для вывода атрибутов, но описания методов престы найти не могу, а хотелось бы иметь документацию по API. Подскажите, плз методы для вызова атрибутов и доступных значений для продукта в престе... ну или где есть толковое описание методов престы. открой product.php там всё видно Link to comment Share on other sites More sharing options...
mess@nger Posted March 29, 2014 Author Share Posted March 29, 2014 (edited) открой product.php там всё видно было бы смешно, если бы не так грустно. открыть пришлось не только product.php если кому интересно, мое решение, сильно не пинать, я вебразработкой не занимаюсь на постоянной основе, но может кому пригодится: <?php include(dirname(__FILE__).'/config/config.inc.php'); include(dirname(__FILE__).'/init.php'); $cfgFile = dirname(__FILE__). '/config/settings.inc.php'; $id_lang=8; //Язык по умолчанию intval(Configuration::get('PS_LANG_DEFAULT')) $curr_def=new Currency(intval(Configuration::get('PS_CURRENCY_DEFAULT'))); //Валюта по умолчанию $shopUrl='http://www.jordia.com.ua'; header("Content-Type: text/xml;"); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; echo "<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\"><yml_catalog date=\"".date('Y-m-d H:i')."\">"; echo "<shop><name></name><company></company>"; echo "<url></url><platform>PrestaShop</platform><version>1.6</version><agency></agency>"; echo "<email>".htmlspecialchars('')."</email>"; echo "<currencies><currency id=\"UAH\" rate=\"1\" /></currencies><categories>"; //Категории $categories=Category::getCategories($id_lang,false,false); foreach($categories as $category){ if (!in_array($category['id_category'],array(1,2))){ if ($category['id_parent']!=0){ $pid='" parentId="'.$category['id_parent']; } else {$pid="";} echo '<category id="'.$category['id_category'].$pid.'">'.$category['name'].'</category>'; } } unset($categories); echo "</categories><local_delivery_cost>35</local_delivery_cost><offers>"; //Продукты $p=Product::getSimpleProducts($id_lang); foreach ($p as $pr){ $prod=new Product($pr['id_product'], true, $id_lang); if ($prod->active){ $manufacturer = new Manufacturer($prod->id_manufacturer, $id_lang); echo '<offer id="'.$pr['id_product'].'" type="vendor.model" available="true"> <url>'.$prod->getLink().'</url> <price>'.$prod->price.'</price> <currencyId>UAH</currencyId> <categoryId>'.$prod->id_category_default.'</categoryId> <store>false</store><pickup>false</pickup><delivery>true</delivery> <vendor>'.htmlspecialchars($manufacturer->name).'</vendor> <model>'.htmlspecialchars($prod->name).'</model> <description>'.htmlspecialchars(strip_tags($prod->description_sort)).'</description>'; $images = $prod->getImages($id_lang); foreach($images as $im) { echo '<picture>'.$shopUrl.'/'.$im['id_image'].'-large_default/'.$prod->link_rewrite.'.jpg</picture>'; } $attributes_groups = $prod->getAttributesGroups($id_lang); /*кусок кода с php.su для выделения уникальных значений атрибутов */ $unique_attr = array(); $exclude = array(""); for ($i = 0; $i<=count($attributes_groups)-1; $i++) { if (!in_array(trim($attributes_groups[$i]["id_attribute"]) ,$exclude)) { $unique_attr[] = $attributes_groups[$i]; $exclude[] = trim($attributes_groups[$i]["id_attribute"]); } } /* ------------------------------------ */ $colours=array(); $sizes=array(); foreach($unique_attr as $attr){ if (($attr['id_attribute_group']==2)or($attr['id_attribute_group']==1)) $sizes[]=$attr['attribute_name']; if ($attr['id_attribute_group']==3) $colours[]=$attr['attribute_name']; } echo '<param name="Цвет">'.$colours[0].'</param>'; foreach ($sizes as $item) echo '<param name="Размер" unit="INT">'.$item.'</param>'; echo '</offer>'; } } echo"</offers></shop></yml_catalog>"; ?> Edited March 29, 2014 by mess@nger (see edit history) Link to comment Share on other sites More sharing options...
mess@nger Posted April 16, 2014 Author Share Posted April 16, 2014 (edited) Правильный код под yml типа vendor с размерно-цветовыми комбинациями (принятые Яндексом и hotline.ua) =)) <?php include(dirname(__FILE__).'/config/config.inc.php'); include(dirname(__FILE__).'/init.php'); $cfgFile = dirname(__FILE__). '/config/settings.inc.php'; $id_lang=8; //Язык по умолчанию intval(Configuration::get('PS_LANG_DEFAULT')) $curr_def=new Currency(intval(Configuration::get('PS_CURRENCY_DEFAULT'))); //Валюта по умолчанию $shopUrl='http://www.jordia.com.ua'; header("Content-Type: text/xml;"); echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>"; echo "<!DOCTYPE yml_catalog SYSTEM \"shops.dtd\"><yml_catalog date=\"".date('Y-m-d H:i')."\">"; echo "<shop><name>Jordia - Esthetic Clothes</name><company>ЧП Ронская Н.М.</company>"; echo "<url>http://jordia.com.ua</url><platform>PrestaShop</platform><version>1.6</version><agency>ST studio</agency>"; echo "<email>".htmlspecialchars('...')."</email>"; //Вместо ... -мыл вставьте echo "<currencies><currency id=\"UAH\" rate=\"1\" /></currencies><categories>"; //Категории $categories=Category::getCategories($id_lang,false,false); foreach($categories as $category){ if (!in_array($category['id_category'],array(1,2))){ if ($category['id_parent']!=0){ $pid='" parentId="'.$category['id_parent']; } else {$pid="";} echo '<category id="'.$category['id_category'].$pid.'">'.$category['name'].'</category>'; } } unset($categories); echo "</categories><local_delivery_cost>45</local_delivery_cost><offers>"; //Продукты $p=Product::getSimpleProducts($id_lang); foreach ($p as $pr){ $prod=new Product($pr['id_product'], true, $id_lang); if ($prod->active){ $combinations=array(); $manufacturer = new Manufacturer($prod->id_manufacturer, $id_lang); $images = $prod->getImages($id_lang); $attributes_groups = $prod->getAttributesGroups($id_lang); foreach ($attributes_groups as $attr) { $combinations[$attr['id_product_attribute']]['attr'][$attr['id_attribute_group']] = $attr['attribute_name']; $combinations[$attr['id_product_attribute']]['quantity'] = $attr['quantity']; } foreach ($combinations as $k0=>$comb) { if ($comb['quantity']>0){ echo '<offer id="'.$k0.'" group_id="'.$pr['id_product'].'" type="vendor.model" available="true" >'; echo ' <url>'.$prod->getLink().'</url> <price>'.$prod->price.'</price> <currencyId>UAH</currencyId> <categoryId>'.$prod->id_category_default.'</categoryId>'; foreach($images as $im) { echo '<picture>'.$shopUrl.'/'.$im['id_image'].'-large_default/'.$prod->link_rewrite.'.jpg</picture>'; } echo ' <store>false</store><pickup>false</pickup><delivery>true</delivery> <vendor>'.htmlspecialchars($manufacturer->name).'</vendor> <model>'.htmlspecialchars($prod->name).'</model> <description>'.htmlspecialchars(strip_tags($prod->description_sort)).'</description>'; foreach ($comb['attr'] as $k=>$v) { if (($k==2)or($k==1)) {$name='Размер';$unit=' unit="INT"';} // $k - это ид атрибута, я свои точно знаю, себе поменяйте if ($k==3) {$name='Цвет';$unit='';} // аналогично echo '<param name="'.$name.'"'.$unit.'>'.$v.'</param>'; } echo '</offer>'; } } } } echo"</offers></shop></yml_catalog>"; ?> Edited April 16, 2014 by mess@nger (see edit history) 1 Link to comment Share on other sites More sharing options...
Kerm Posted April 17, 2014 Share Posted April 17, 2014 (edited) не пашет на 1.4) Выгрузить то все что нужно не проблема, проблема в том что я не могу понять как именно выгружать одежду в Яндекс.Маркет... У одежды много комбинаций, если каждую комбинацию выгружать по отдельности то каждая комбинация считается отдельным товарам..если у одного товара всем комбинациям проставить общую группу то все равно не склеивает в один товар, а пишут ошибку о дубликатах... Вот пример: <offer id='5388628728' type='vendor.model' available='true' group_id="5388"> <url>http://bikinimal.ru/fantaziynye-kolgotki/5388-ginger-jest.html?utm_campaign=kolgotki&utm_content=dlja-jenshhin&utm_term=r12+legginsy+jenskie+charmante+ginger+jest&utm_source=market.yandex.ru&utm_medium=cpc</url> <price>120</price> <currencyId>RUR</currencyId> <categoryId>80067006</categoryId> <market_category>Одежда</market_category> <picture>http://bikinimal.ru/5388-342881/ginger-jest.jpg</picture> <delivery>true</delivery> <vendor>Charmante</vendor> <model>GINGER JEST</model> <description>Стильные леггинсы с кружевным цветочным рисунком по всей длине ноги. Актуальное предложение осеннего сезона.</description> <param name="Размер">2</param> <param name="Цвет">вишнёвый</param> <param name="Материал">полиамид 82%, эластан 15%, хлопок 3%</param> <param name="Пол">Женский</param> <param name="Возраст">Взрослый</param> </offer> <offer id='5388628729' type='vendor.model' available='true' group_id="5388"> <url>http://bikinimal.ru/fantaziynye-kolgotki/5388-ginger-jest.html?utm_campaign=kolgotki&utm_content=dlja-jenshhin&utm_term=r12+legginsy+jenskie+charmante+ginger+jest&utm_source=market.yandex.ru&utm_medium=cpc</url> <price>120</price> <currencyId>RUR</currencyId> <categoryId>80067006</categoryId> <market_category>Одежда</market_category> <picture>http://bikinimal.ru/5388-342881/ginger-jest.jpg</picture> <delivery>true</delivery> <vendor>Charmante</vendor> <model>GINGER JEST</model> <description>Стильные леггинсы с кружевным цветочным рисунком по всей длине ноги. Актуальное предложение осеннего сезона.</description> <param name="Размер">3</param> <param name="Цвет">вишнёвый</param> <param name="Материал">полиамид 82%, эластан 15%, хлопок 3%</param> <param name="Пол">Женский</param> <param name="Возраст">Взрослый</param> </offer> <offer id='5388628730' type='vendor.model' available='true' group_id="5388"> <url>http://bikinimal.ru/fantaziynye-kolgotki/5388-ginger-jest.html?utm_campaign=kolgotki&utm_content=dlja-jenshhin&utm_term=r12+legginsy+jenskie+charmante+ginger+jest&utm_source=market.yandex.ru&utm_medium=cpc</url> <price>120</price> <currencyId>RUR</currencyId> <categoryId>80067006</categoryId> <market_category>Одежда</market_category> <picture>http://bikinimal.ru/5388-342881/ginger-jest.jpg</picture> <delivery>true</delivery> <vendor>Charmante</vendor> <model>GINGER JEST</model> <description>Стильные леггинсы с кружевным цветочным рисунком по всей длине ноги. Актуальное предложение осеннего сезона.</description> <param name="Размер">4</param> <param name="Цвет">вишнёвый</param> <param name="Материал">полиамид 82%, эластан 15%, хлопок 3%</param> <param name="Пол">Женский</param> <param name="Возраст">Взрослый</param> </offer> Прописал общую группу, у комбинаций разные ID, но при выгрузке маркет ругается на дубликат значений.. И у меня у каждой комбинации еще идет фотка товара по умолчанию, как маркету указать что фоток к каждой комбинации товара отдельных у меня нету, а есть только общие фотки? Edited April 17, 2014 by Kerm (see edit history) Link to comment Share on other sites More sharing options...
mess@nger Posted April 17, 2014 Author Share Posted April 17, 2014 C 1.4 я никогда не работал. Знакомство с прэстой у меня началось с 1.5 и сейчас изучаю 1.6. =) 1) "Сливать" в одну карточку YM должен по полю group_id. 2) Почитайте о комбнациях на YM, если я не ошибаюсь там идет разделение только на цвето-размерную характеристику, соответственно остальная атрибутика должна уйти\сгрупироваться. 3) В данном коде я с картинками и не заморачивался... Кстати хорошо, что напомнили: $images = $prod->getImages($id_lang); - даст все картинки (у меня просто на самом деле во всех товарах только один цвет) для вывода картинок под атрибуты есть другая функция. А в Вашем случае как раз и нужна одна картинка... ...На хотлайне у меня нормально отобразилось, а c YM еще проверки не было, сегодня-завтра будет тоже видно. Link to comment Share on other sites More sharing options...
Recommended Posts