sitte Posted December 17, 2014 Share Posted December 17, 2014 Hello. My client has large category tree in prestashop 1.5 website. Products are attached to child categories but not to parent ones. Is there any easy way to add parent categories to all products?For example product is attached to cat1_1_2 but I want to attache it to Cat1_1 and Cat1 categories also. Root Category - Cat1 - Cat1_1 - Cat1_1_1 - Cat1_1_2 - Cat2 - Cat3 My only idea is to write php script to get parent categories for every product and then insert attachement records one by one. Is there any simpler way? Or maybe somebody has such script? Link to comment Share on other sites More sharing options...
sitte Posted December 19, 2014 Author Share Posted December 19, 2014 Hello. This is script I made to attach products to parent categories if somebody needs it. It works for prestashop 1.5. You need to insert proper values of database and rootcat into code. You can run it by opening: ScriptName.php?od=1&do=1000 "od" parameter is "from this product id" "do" parameter is "to this product id" <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Untitled Document</title> </head> <body> <?php $db_host = "host"; $db_user = "user"; $db_pass = "password"; $db_name = "dbname"; $rootcat=3; $raport=''; function produktyzkategorii($idkat) { //połączenie GLOBAL $db_host; GLOBAL $db_user; GLOBAL $db_pass; GLOBAL $db_name; GLOBAL $rootcat; GLOBAL $raport; if (!($baza = @mysql_connect($db_host, $db_user, $db_pass))) die ('Wystąpił problem z połączeniem z bazą danych Mysql. Proszę odświerzyć stronę'); mysql_select_db ($db_name) or die ('Problem z wyborem bazy. Jeśli sytuacja się powtarza prosze poinformować osobę odpowiedzialną za stronę'); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); //sprawdzenie $idkat=intval($idkat); if ($idkat<1) return false; $zapytanie= 'SELECT * FROM `ps_category_product` WHERE `id_category`='.$idkat; $odpowiedz=mysql_query($zapytanie); $wynik=array(); while ($row = mysql_fetch_object($odpowiedz)) { $wynik[$row->id_product]=$row; } mysql_free_result($odpowiedz); return $wynik; } function ProduktyOId($od,$do) { //połączenie GLOBAL $db_host; GLOBAL $db_user; GLOBAL $db_pass; GLOBAL $db_name; GLOBAL $rootcat; GLOBAL $raport; if (!($baza = @mysql_connect($db_host, $db_user, $db_pass))) die ('Wystąpił problem z połączeniem z bazą danych Mysql. Proszę odświerzyć stronę'); mysql_select_db ($db_name) or die ('Problem z wyborem bazy. Jeśli sytuacja się powtarza prosze poinformować osobę odpowiedzialną za stronę'); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); //sprawdzenie $od=intval($od); if ($od<1) return false; $do=intval($do); if ($do<=$od) return false; $zapytanie= 'SELECT * FROM `ps_category_product` WHERE `id_product`>='.$od.' AND `id_product`<'.$do; $odpowiedz=mysql_query($zapytanie); $wynik=array(); while ($row = mysql_fetch_object($odpowiedz)) { $wynik[$row->id_product]=$row; } mysql_free_result($odpowiedz); return $wynik; } function rodzicproduktu($idprod) { //połączenie GLOBAL $db_host; GLOBAL $db_user; GLOBAL $db_pass; GLOBAL $db_name; GLOBAL $rootcat; GLOBAL $raport; if (!($baza = @mysql_connect($db_host, $db_user, $db_pass))) die ('Wystąpił problem z połączeniem z bazą danych Mysql. Proszę odświerzyć stronę'); mysql_select_db ($db_name) or die ('Problem z wyborem bazy. Jeśli sytuacja się powtarza prosze poinformować osobę odpowiedzialną za stronę'); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); //sprawdzenie $idprod=intval($idprod); if ($idprod<1) return false; $zapytanie= 'SELECT cp.`id_category` as `id_category` FROM `ps_category_product` cp LEFT JOIN `ps_category` c ON c.`id_category`=cp.`id_category` WHERE cp.`id_product`='.$idprod.' ORDER BY `level_depth` DESC LIMIT 1'; $odpowiedz=mysql_query($zapytanie); $row = mysql_fetch_object($odpowiedz); $wynik=$row->id_category; mysql_free_result($odpowiedz); return $wynik; } function rodziceproduktu($idprod) { //połączenie GLOBAL $db_host; GLOBAL $db_user; GLOBAL $db_pass; GLOBAL $db_name; GLOBAL $rootcat; GLOBAL $raport; if (!($baza = @mysql_connect($db_host, $db_user, $db_pass))) die ('Wystąpił problem z połączeniem z bazą danych Mysql. Proszę odświerzyć stronę'); mysql_select_db ($db_name) or die ('Problem z wyborem bazy. Jeśli sytuacja się powtarza prosze poinformować osobę odpowiedzialną za stronę'); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); //sprawdzenie $idprod=intval($idprod); if ($idprod<1) return false; $zapytanie= 'SELECT cp.`id_category` as `id_category` FROM `ps_category_product` cp LEFT JOIN `ps_category` c ON c.`id_category`=cp.`id_category` WHERE cp.`id_product`='.$idprod.' ORDER BY `level_depth` DESC'; $odpowiedz=mysql_query($zapytanie); while ($row = mysql_fetch_object($odpowiedz)) {$wynik[]=$row->id_category; } mysql_free_result($odpowiedz); return $wynik; } function rodzickategorii($idkat) { //połączenie GLOBAL $db_host; GLOBAL $db_user; GLOBAL $db_pass; GLOBAL $db_name; GLOBAL $rootcat; GLOBAL $raport; if (!($baza = @mysql_connect($db_host, $db_user, $db_pass))) die ('Wystąpił problem z połączeniem z bazą danych Mysql. Proszę odświerzyć stronę'); mysql_select_db ($db_name) or die ('Problem z wyborem bazy. Jeśli sytuacja się powtarza prosze poinformować osobę odpowiedzialną za stronę'); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); //sprawdzenie $idkat=intval($idkat); if ($idkat<=$rootcat) return false; $zapytanie= 'SELECT `id_parent` FROM `ps_category` WHERE `id_category`='.$idkat; $odpowiedz=mysql_query($zapytanie); $row = mysql_fetch_object($odpowiedz); $wynik=$row->id_parent; mysql_free_result($odpowiedz); return $wynik; } function rodzicekategorii($idkat,&$wynik=null) { //połączenie GLOBAL $db_host; GLOBAL $db_user; GLOBAL $db_pass; GLOBAL $db_name; GLOBAL $rootcat; GLOBAL $raport; if (!($baza = @mysql_connect($db_host, $db_user, $db_pass))) die ('Wystąpił problem z połączeniem z bazą danych Mysql. Proszę odświerzyć stronę'); mysql_select_db ($db_name) or die ('Problem z wyborem bazy. Jeśli sytuacja się powtarza prosze poinformować osobę odpowiedzialną za stronę'); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); //sprawdzenie $idkat=intval($idkat); if ($idkat<=$rootcat) return false; if(!$wynik) $wynik=array(); $zapytanie= 'SELECT `id_parent` FROM `ps_category` WHERE `id_category`='.$idkat; $odpowiedz=mysql_query($zapytanie); if ($row = mysql_fetch_object($odpowiedz)){ $wynik[]=intval($row->id_parent); rodzicekategorii($row->id_parent,$wynik); } mysql_free_result($odpowiedz); return $wynik; } function PrzypiszProduktDoKategorii($idkat,$idprod) { //połączenie GLOBAL $db_host; GLOBAL $db_user; GLOBAL $db_pass; GLOBAL $db_name; GLOBAL $rootcat; GLOBAL $raport; if (!($baza = @mysql_connect($db_host, $db_user, $db_pass))) die ('Wystąpił problem z połączeniem z bazą danych Mysql. Proszę odświerzyć stronę'); mysql_select_db ($db_name) or die ('Problem z wyborem bazy. Jeśli sytuacja się powtarza prosze poinformować osobę odpowiedzialną za stronę'); mysql_query('SET CHARACTER SET utf8'); mysql_query('SET NAMES utf8'); //sprawdzenie $idkat=intval($idkat); if ($idkat<=$rootcat) return false; $idprod=intval($idprod); if ($idprod<1) return false; //sprawdzenie przypisania $zapytanie= "SELECT * FROM `ps_category_product` WHERE `id_category`='".$idkat."' AND `id_product`='".$idprod."'"; //echo $zapytanie; $odpowiedz=mysql_query($zapytanie); if (@mysql_num_rows($odpowiedz)>0) {$raport.= ' <small style="color:#f00;">Produkt '.$idprod.' już jest w kategorii'.$idkat.'</small><br/>' ; return false;} $zapytanie= "INSERT INTO `ps_category_product` (`id_category`, `id_product`) VALUES ('".$idkat."', '".$idprod."');"; //echo '<br/>'.$zapytanie; return $odpowiedz=mysql_query($zapytanie); } function RodziceNadrodziceProduktu($idprod) { $rodziceproduktu=rodziceproduktu($idprod); $rodzice=array(); //dla każdego rodzica sprawdzić nadkategorie i dołączyć do tabeli $rodzice foreach ($rodziceproduktu as $rodzicproduktu) {$rodzicekategorii=rodzicekategorii($rodzicproduktu); $rodzice=array_merge($rodzice,$rodzicekategorii); } $rodzice=array_unique($rodzice); return $rodzice; } $od=intval($_GET['od']); $do=intval($_GET['do']); if ($od<1) die ('Parametr od jest mniejszy niż 1'); if ($do<1) die ('Parametr do jest mniejszy niż 1'); if ($od>=$do) die ('Parametr od nie jest mniejszy niż do'); $produkty=ProduktyOId($od,$do); foreach ($produkty AS $produkt) {$rodzice=RodziceNadrodziceProduktu($produkt->id_product); $raport.= 'Przypisuje produkt:'.$produkt->id_product.' do kategorii:'.implode ( ',' , $rodzice ).'<br/>'; foreach ($rodzice AS $rodzic) if (PrzypiszProduktDoKategorii($rodzic,$produkt->id_product)) $raport.= ' <small style="color:#080;">Produkt '.$produkt->id_product.' przypisany do kategorii'.$rodzic.'</small><br/>'; file_put_contents("raport.html", $raport, FILE_APPEND); echo $raport; $raport=''; } ?> </body> </html> Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now