wdrożenia PrestaShop

Wzajemne powiązanie produktów

  • 8 Odpowiedzi
  • 3781 Wyświetleń

0 użytkowników i 4 Gości przegląda ten wątek.

*

Offline cel3ct

  • Użytkownik
  • **
  • 24
  • 0
Wzajemne powiązanie produktów
« dnia: Lipiec 06, 2012, 01:05:32 pm »
Oto tresc porady z innego forum:
"Na chwile obecna w prescie jest tak że jezeli produkt A powiążemy z produktem B to to powiązanie jest jedno stronne. Jeżeli chcemy aby automatycznie na stronie produktu B było pokazane ze jest on powiązany z A to w classes/Product.php w funkcji

foreach ($accessories_id as $id_product_2)

dodajemy linie
Kod: Zaznacz cały
Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($this->id)), 'INSERT'); 

W przypadku gdy chcemy za jednym razem powiązać produkty A, B, C, D .... każdy z każdym

należy dodać jeszcze do tego ten kod

    foreach ($accessories_id as $pomoc){
            if($id_product_2!=$pomoc)
            Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($pomoc)), 'INSERT');
            }


Jest to przydatne gdy produkty powiązane sa zamiennikami w przypadku gdy produkt A jest zamiennikiem produkty B a B jest zamiennikiem C to C musi też być zamiennikiem A wystarczy dodać produkty i w jednym z nich zrobić powiązania a reszta doda się z automatu."

Zrobilem tak jak w opisie i oto moj kod:
public function changeAccessories($accessories_id)
{
foreach ($accessories_id as $id_product_2)
Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($this->id), 'id_product_2' => (int)($id_product_2)), 'INSERT');
Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($this->id)), 'INSERT');
foreach ($accessories_id as $pomoc){
            if($id_product_2!=$pomoc)
            Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($pomoc)), 'INSERT');
            }
}

Problem w tym, ze gdy chce powiazac cztery produkty A, B, C, D, to wzajemne powiazanie mam wylacznie w dwoch skrajnych, tj.:
- produkt A jest powiazany z B, C, D,
- produkt B nie ma powiazania,
- produkt C nie ma powiazania,
- produkt D ma powiazanie z A, B, C

Co dziwne, wazna jest tu kolejnosc powiazywania produktow. Dla powyzszej sytuacji produkt A wiazalem po kolei z B, C, D. Natomiast gdy zmieniam kolejnosc; produkt A wiaze z D, C, B, to otrzymuje takie powiazanie:
- produkt A jest powiazany z B, C, D,
- produkt B jest powiazany z A, C, D
- produkt C nie ma powiazania,
- produkt D nie ma powiazania.

Jakies pomysly? :)

*

Offline mario

  • Mieszkaniec
  • *****
  • 640
  • 0
  • Płeć: Mężczyzna
Odp: Wzajemne powiązanie produktów
« Odpowiedź #1 dnia: Lipiec 06, 2012, 02:03:21 pm »
tak na pierwszy rzut oka to brakuje ci nawiasow klamrowych dla pierwszej petli foreach.
Integracja wf-mag presta
freelancer

*

Offline cel3ct

  • Użytkownik
  • **
  • 24
  • 0
Odp: Wzajemne powiązanie produktów
« Odpowiedź #2 dnia: Lipiec 06, 2012, 02:24:00 pm »
Nie wiem, czy chodzilo o to:
public function changeAccessories($accessories_id)
{
foreach ($accessories_id as $id_product_2){
Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($this->id), 'id_product_2' => (int)($id_product_2)), 'INSERT');
Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($this->id)), 'INSERT');
}
foreach ($accessories_id as $pomoc){
            if($id_product_2!=$pomoc)
            Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($pomoc)), 'INSERT');
            }
}

ale jest maly progres i teraz:
- produkt A jest powiazany z B, C, D,
- produkt B jest powiazany z A,
- produkt C jest powiazany z A,
- produkt D ma powiazanie z A, B, C

*

Offline mario

  • Mieszkaniec
  • *****
  • 640
  • 0
  • Płeć: Mężczyzna
Odp: Wzajemne powiązanie produktów
« Odpowiedź #3 dnia: Lipiec 06, 2012, 02:36:34 pm »
wniskuje, ze if i drugi foreach powinien wykonac sie w ciele pierwszej petli foreach,
wiec nawias zamykajacy powinien znalesc sie za nawiasem zamykajacym 2 petli
Integracja wf-mag presta
freelancer

*

Offline cel3ct

  • Użytkownik
  • **
  • 24
  • 0
Odp: Wzajemne powiązanie produktów
« Odpowiedź #4 dnia: Lipiec 06, 2012, 03:02:07 pm »
Probowalem zrozumiec, ale nie dalem rady. :) Te foreachy i petle to dla mnie czarna magia. Moglbys podac gotowy kod z odpowienio rozstawionymi nawiasami? :)

*

Offline mario

  • Mieszkaniec
  • *****
  • 640
  • 0
  • Płeć: Mężczyzna
Odp: Wzajemne powiązanie produktów
« Odpowiedź #5 dnia: Lipiec 06, 2012, 03:07:44 pm »
public function changeAccessories($accessories_id)
   {
      foreach ($accessories_id as $id_product_2)
                {
         Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($this->id), 'id_product_2' => (int)($id_product_2)), 'INSERT');
         Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($this->id)), 'INSERT');
      
              foreach ($accessories_id as $pomoc)
                        {
                               if($id_product_2!=$pomoc)
                                              Db::getInstance()->AutoExecute(_DB_PREFIX_.'accessory', array('id_product_1' => (int)($id_product_2), 'id_product_2' => (int)($pomoc)), 'INSERT');
                        }
          }
       }
Integracja wf-mag presta
freelancer

*

Offline mario

  • Mieszkaniec
  • *****
  • 640
  • 0
  • Płeć: Mężczyzna
Odp: Wzajemne powiązanie produktów
« Odpowiedź #6 dnia: Lipiec 06, 2012, 03:08:30 pm »
troche formatowanie sie rozjechalo, sorki
Integracja wf-mag presta
freelancer

*

Offline cel3ct

  • Użytkownik
  • **
  • 24
  • 0
Odp: Wzajemne powiązanie produktów
« Odpowiedź #7 dnia: Lipiec 06, 2012, 03:13:21 pm »
Wielkie dzieki! I to jest poprawny kod! :) Teraz wszystkie produkty sie ladnie wiaza.

*

Offline illuminator

  • Nowy
  • *
  • 3
  • 0
Odp: Wzajemne powiązanie produktów
« Odpowiedź #8 dnia: Lipiec 10, 2013, 01:12:40 pm »
Wielkie dzieki! I to jest poprawny kod! :) Teraz wszystkie produkty sie ladnie wiaza.

Chyba jednak to nie działa jak trzeba, niektóre produkty wystawiają się podwójnie, czy ktoś zna lepsze rozwiązanie ?