Jump to content

Как вытянуть атрибуты? (методы класса Product)


Recommended Posts

День добрый,

задался целью доделать 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

День добрый,

задался целью доделать 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

открой 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 by mess@nger (see edit history)
Link to comment
Share on other sites

  • 3 weeks later...

Правильный код под 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 by mess@nger (see edit history)
  • Like 1
Link to comment
Share on other sites

не пашет на 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 by Kerm (see edit history)
Link to comment
Share on other sites

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

×
×
  • Create New...