private:koding:hostcms:modules:shop:useful:change-sting-to-list

Преобразование строчных дополнительных свойств в списочные

<?
 
/**
* Преобразование строчных дополнительных свойств в списочные
* Создает копии доп. свойств типа "Список"
* Создает список с названием доп. свойств
* Создает значения для доп. свойств
*
* Требует Kad_Property
* 
* @author Kuts Artem, KAD::Systems (©) 2014	
* @date 23-05-2014
*/
 
// Массив с ID дополнительных свойств, которые будут преобразованы
$aProperties = array(69, 70, 71, 72, 73, 75);
// ID Интернет-магазина
$shop_id = 1; 
 
$oShop = Core_Entity::factory('shop', $shop_id);
 
foreach ($aProperties as $property_id)
{
	$oProperty = Core_Entity::factory('property', $property_id);
 
	$oList = Core_Entity::factory('list');
	$oList->queryBuilder()->where('site_id', '=', CURRENT_SITE)->where('name', '=',  $oProperty->name);
	$oList = $oList->find();
 
	if (!$oList->id)
	{
		$oList = Core_Entity::factory('list');
		$oList->name = $oProperty->name;
		$oList->site_id = CURRENT_SITE;
		$oList->save();
	}
	$list_id = $oList->id;
 
	// Ищем новое свойство или создаем
	$oNewProperty = Core_Entity::factory('property');
	$oNewProperty->queryBuilder()
		->where('name', '=',  $oProperty->name)
		->where('id', '!=', $property_id);
	$oNewProperty = $oNewProperty->find();
 
	if (!$oNewProperty->id)
	{
		$oNewProperty = Core_Entity::factory('property');
		$oNewProperty->name = $oProperty->name;
		$oNewProperty->type = 3;
		$oNewProperty->list_id = $list_id;
		$oNewProperty->tag_name = $oProperty->tag_name . "_list";
		$oNewProperty->sorting = $oProperty->sorting;
		$oNewProperty->property_dir_id = $oProperty->property_dir_id;
		$oNewProperty->save();
 
		$oNewProperty->add(clone $oProperty->Shop_Item_Property);		
	}
 
	$property_new_id = $oNewProperty->id;	
 
	// Получить все товары
	$oItems = Core_Entity::factory('shop_item');
	$aoItems = $oItems->findAll();
 
	// Пройтись по каждому
	foreach ($aoItems as $oItem)
	{
		// Получить значение доп. свойства
		$oValue = Kad_Property::getValue($oItem, $property_id);
 
		if ($oValue && $oValue->value != "")
		{
			$value = $oValue->value;
			$value = ucfirst($value);
 
			// Проверить наличие значения в списке
			$oValue = Core_Entity::factory('list_item');
			$oValue->queryBuilder()->where('list_id', '=', $list_id)->where('value', '=', $value);
			$oValue = $oValue->find();
 
			// Добавить, если нет
			if (!$oValue->id)
			{
				$oValue = Core_Entity::factory('list_item');
				$oValue->list_id = $list_id;
				$oValue->value = $value;
				$oValue->save();
			}
 
			// Установить значение для товара
			if ($oValue->id)
			{
				Kad_Property::setValue($oItem, $property_new_id, $oValue->id);
				echo $oItem->id . " " . $oItem->name . " OK<br/>";
			}
		}
	}
}
?>

Страницу создал Артем Куц 12.07.16 в 18:18

private/koding/hostcms/modules/shop/useful/change-sting-to-list.txt · Last modified: 27.06.17 в 15:54 by maximzasorin_gmail.com