Jump to content

Групповое изменение цен товаров с атрибутами PS 1.3.1


Recommended Posts

Помогите пожалуйста, доделать модуль для массового изменения цен в каталоге.

У меня стоит PS 1.3.1 - так уж получилось, магазин работает, пока не меняем.

 

Бьюсь уже который день с модулем massprice -кое что поменял, и в простом разделе каталога уже работает, но там где товары составные с комбинациями - не работает.

Вот основной код :

// категория в которой меняем цены $skipcategory

// nbr - число в процентах, насколько прибавить или убавить ( -nbr)

 

$skipcategory =Configuration::get('MASSPRICE_SKIP_CAT');

mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_) or die(mysql_error());

mysql_query("SET NAMES UTF8");//this is needed for UTF 8 characters - multilanguage

mysql_select_db(_DB_NAME_) or die(mysql_error());

//отбираем товары в заданной категории

$sorgudc = mysql_query("

SELECT p.*

FROM `ps_category_product` p

WHERE p.`id_category` IN (".$skipcategory .")

GROUP BY p.`id_product`");

@$veridc = mysql_fetch_assoc($sorgudc);

 

// в цикле меняем цену на $nbr % в ps_product.price , где id_product из отобранного

do

{

$sorgudc2 = mysql_query("

SELECT *

FROM `"._DB_PREFIX_."product`

WHERE `id_product` = ".@$veridc['id_product']."

");

@$veridc2 = mysql_fetch_assoc($sorgudc2);

{

$per=$veridc2['price']*$nbr/100;

$price =$veridc2['price']+$per;

Db::getInstance()->Execute("UPDATE `"._DB_PREFIX_."product` SET `price` = ".@$price." WHERE `"._DB_PREFIX_."product`.`id_product` = ".@$veridc['id_product'].";");

}

}

while ($veridc = mysql_fetch_assoc($sorgudc));

 

Ну и это все работает на версии 1.3.1, а теперь сама проблема -

как сделать коррекцию цен на товары с атрибутами из той же выбранной категории

 

Эти товары с атрибутами находятся в таблице `ps_product_attribute` там собственно нам нужны три колонки -

 

`id_product_attribute` `id_product` `price`

нужный нам конкретный товар для изменения цены сидит в `id_product` ,

вот пример как уменя это выглядит -

`id_product_attribute` `id_product` `price`

534 3654 150

535 3654 350

536 3654 600

 

Мне нужно сделать выборку по каждой id_product из `ps_product_attribute` и поменять price

но мозгов и опыта не хватает, подскажите как правильно !

пытался делать вот так -

 

do

{

$sorgudc5 = mysql_query("

SELECT *

FROM `ps_product_attribute`

WHERE `id_product` = ".@$veridc['id_product']."

");

@$veridc5 = mysql_fetch_assoc($sorgudc5);

 

 

$per=$veridc5['price']*$nbr/100;

$price =$veridc5['price']+$per;

Db::getInstance()->Execute("UPDATE `"._DB_PREFIX_."product_attribute` SET `price` = ".@$price." WHERE `"._DB_PREFIX_."product_attribute`.`id_product` = ".@$veridc['id_product'].";");

}

while ($veridc = mysql_fetch_assoc($sorgudc));

 

ничего хорошего не получается

Edited by docvol (see edit history)
Link to comment
Share on other sites

Ужас то какой. Достаточно всего двух запросов для обновления всех цен.

UPDATE `ps_product` p, `ps_category_product` cp SET p.price=p.price*'.$mult.' WHERE cp.`id_product`=p.`id_product` AND cp.`id_category`='.(int)$skipcategory
UPDATE  `ps_product_attribute` pa, `ps_category_product` cp SET pa.price=pa.price*'.$mult.' WHERE cp.`id_product`=pa.`id_product` AND cp.`id_category`='.(int)

где множитель вычисляется так

$mult=(float)$nbr/100+1;

  • Like 1
Link to comment
Share on other sites

Спасибо большое за помощь, действительнно, ужас. Немного поменял синтаксис, чтобы заработало, получилось вот так -

$skipcategory =Configuration::get('MASSPRICE_SKIP_CAT');

mysql_connect(_DB_SERVER_, _DB_USER_, _DB_PASSWD_) or die(mysql_error());

mysql_query("SET NAMES UTF8");//this is needed for UTF 8 characters - multilanguage

mysql_select_db(_DB_NAME_) or die(mysql_error());

 

 

$mult=(float)$nbr/100+1;

 

Db::getInstance()->Execute("UPDATE `ps_product` p, `ps_category_product` cp SET p.price=p.price*".$mult." WHERE cp.`id_product`=p.`id_product` AND cp.`id_category`=$skipcategory;");

 

Db::getInstance()->Execute("UPDATE `ps_product_attribute` pa, `ps_category_product` cp SET pa.price=pa.price*".$mult." WHERE cp.`id_product`=pa.`id_product` AND cp.`id_category`=$skipcategory;");

 

В таком виде меняет цены в выбранной категории правильно, правда, пока упражнялся и менял кавычки и запятые, снес цены во всем каталоге - обнулились везде. Восстановил из дампа базу - вроде бы все ок. Посмотрите, пожалуйста, на мои изменения - может я что то лишнее вписал.

Link to comment
Share on other sites

×
×
  • Create New...