Рекомендуемые товары - зависимость товаров

Тема в разделе "Общие вопросы", создана пользователем Эдди, 22 июн 2016.

  1. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    При добавлении любого товара он попадает в Рекомендуемые во все другие товары.
    Так должно быть? Ужас тихий.
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.984
    Симпатии:
    1.087
    Да, так должно быть. Есть у меня модификатор который добавляет поле Аксессуары, в котором как раз нет двойной зависимости.
    В магазин еще не выложил т.к дорабатываю. Пока стоимость 600р.

    Или можете найти тут тему, про то как убрать эту зависимость.
     
    Эдди нравится это.
  3. Sanek

    Sanek Пользователь

    Сообщения:
    79
    Симпатии:
    3
    Доброго вечера. Не смог найти как убрать зависимость. Ссылочку не дадите?
     
  4. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.570
    Симпатии:
    436
    Насколько я помню, достаточно закомментировать 2 последние строки в методах addProduct() и editProduct() в модели product.php для админки.
    PHP:
    if (isset($data['product_related'])) {
        foreach (
    $data['product_related'] as $related_id) {
            
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$product_id "' AND related_id = '" . (int)$related_id "'");
            
    $this->db->query("INSERT INTO " DB_PREFIX "product_related SET product_id = '" . (int)$product_id "', related_id = '" . (int)$related_id "'");
            
    //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
            //$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
        
    }
    }
    А для сайта, в модели продукта можно поменять запрос на вот этот
    PHP:
    public function getProductRelated($product_id) {
        
    $product_parent_data = array();

        
    $query $this->db->query("SELECT * FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$product_id "'");

        foreach (
    $query->rows as $result) {
            
    $product_data[$result['related_id']] = $this->getProduct($result['related_id']);
        }

        return 
    $product_parent_data;
    }
     
    Последнее редактирование: 31 июл 2016
  5. Sanek

    Sanek Пользователь

    Сообщения:
    79
    Симпатии:
    3
    Почему то не сработало: рекомендуемые просто пропали из обоих товаров(((
    ОС 2.1.0.1
     
  6. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.570
    Симпатии:
    436
    Значит где то еще надо что то добавить, я давно это делал и привел часть того кода, который у меня, кроме второго столбца.
     
  7. alirus

    alirus Новичок

    Сообщения:
    19
    Симпатии:
    5
    Надеюсь, не закидают меня помидорам.
    Решение искал долго, нашел. Попробовал на opencart 2.2.0.0, работает исправно.

    В файле /admin/model/catalog/product.php
    Находим следующий код:
    PHP:
    if (isset($data['product_related'])) {
      foreach (
    $data['product_related'] as $related_id) {
        
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" .     $this->db->query("INSERT INTO " DB_PREFIX "product_related SET product_id = '" . (int)$product_id "', related_id = '" . (int)$related_id "'");
        
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$related_id "' AND related_id = '" . (int)$product_id "'");
        
    $this->db->query("INSERT INTO " DB_PREFIX "product_related SET product_id = '" . (int)$related_id "', related_id = '" . (int)$product_id "'");
        }
      }

    Комментируем строки, как в примере ниже:
    PHP:
    if (isset($data['product_related'])) {
      foreach (
    $data['product_related'] as $related_id) {
        
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" .     $this->db->query("INSERT INTO " DB_PREFIX "product_related SET product_id = '" . (int)$product_id "', related_id = '" . (int)$related_id "'");
        
    //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
        //$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
        
    }
      }
    Далее, ищем код:
    PHP:
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$product_id "'");
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE related_id = '" . (int)$product_id "'");

    if (isset(
    $data['product_related'])) {
      foreach (
    $data['product_related'] as $related_id) {
        
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$product_id "' AND related_id = '" . (int)$related_id "'");
        
    $this->db->query("INSERT INTO " DB_PREFIX "product_related SET product_id = '" . (int)$product_id "', related_id = '" . (int)$related_id "'");
        
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$related_id "' AND related_id = '" . (int)$product_id "'");
        
    $this->db->query("INSERT INTO " DB_PREFIX "product_related SET product_id = '" . (int)$related_id "', related_id = '" . (int)$product_id "'");
        }
      }
    Комментируем строки, как в примере ниже:
    PHP:
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$product_id "'");
    //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$product_id . "'");

    if (isset($data['product_related'])) {
      foreach (
    $data['product_related'] as $related_id) {
        
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE product_id = '" . (int)$product_id "' AND related_id = '" . (int)$related_id "'");
        
    $this->db->query("INSERT INTO " DB_PREFIX "product_related SET product_id = '" . (int)$product_id "', related_id = '" . (int)$related_id "'");
        
    //$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
        //$this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
        
    }
      }
    Последнее, находим и комментируем вот эту строку:
    PHP:
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE related_id = '" . (int)$product_id "'");
    Все. Обратной связи между товарами теперь не будет.
    Есть минус, все добавленные связные товары ранее нужно будет добавить по новой.
     
    Последнее редактирование: 20 окт 2016
    asky123, Zhezkazganetcs, Vlad и ещё 1-му нравится это.
  8. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    дак что комментировать?
    Код:
    if (isset($data['product_related'])) {
                foreach ($data['product_related'] as $related_id) {
                    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
                    $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
                    $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
                    $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
                }
            }
    и такой код 2 раза в указанном файле
    Version 2.3.0.2 (rs.5)
     
  9. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.570
    Симпатии:
    436
    Так вверху написано 2 последние строки
     
  10. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    дак здесь пару постов выше код
    там 3 строчки
    а в релизе 4
     
  11. solunski.d

    solunski.d Эксперт

    Сообщения:
    1.570
    Симпатии:
    436
    2 последние
     
    Zhezkazganetcs нравится это.
  12. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    в общем закомментил
    и то что добавлено НЕ пропадает
    что збс
     
  13. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    прикол в том, что новые товары имеют обратную связь, т.е. если добавил новый товар, то связь осталась
    2,3
     
  14. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.524
    Симпатии:
    243
    Для этого выше и указано в двух местах. В методах edit и add
     
  15. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    дак я в двух местах и комментировал
     
  16. karpov

    karpov Продвинутый пользователь

    Сообщения:
    1.524
    Симпатии:
    243
    Вот такой есть модификатор.. попробуйте..
     

    Вложения:

    Zhezkazganetcs нравится это.
  17. Zhezkazganetcs

    Zhezkazganetcs Продвинутый пользователь

    Сообщения:
    819
    Симпатии:
    108
    нету связи
     
  18. NTKU

    NTKU Новичок

    Сообщения:
    15
    Симпатии:
    1
    не работает в опенкарт Version 3.0.3.1 (rs.1)
    Модификатор тоже пробовал применить.
    Как же вычислить эти злостные функции, которые связывают рекомендованые товары?
     
  19. Ravilr

    Ravilr Специалист

    Сообщения:
    3.984
    Симпатии:
    1.087
    А кто сказал что должен работать :) Посмотрите в логи, возможно не находит строчку нужную. Или вручную по инструкции.
     
  20. NTKU

    NTKU Новичок

    Сообщения:
    15
    Симпатии:
    1
    В общем, я подумал и решил, что связь между рекомендованными товарами нужна. Если учитывать этот факт при расставлении связей, гораздо проще сделать хорошо развлетвленную систему. Я был не прав, в этом отношении разработчики опенкарт рулят правильно.