Клон рекомендуемых товаров в Opencart 3

Тема в разделе "Общие вопросы", создана пользователем chester98, 8 дек 2020.

  1. chester98

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

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

    в модели товара в админке после
    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:
            if (isset($data['product_sparts'])) {
                foreach (
    $data['product_sparts'] as $sparts_id) {
                    
    $this->db->query("DELETE FROM " DB_PREFIX "product_sparts WHERE product_id = '" . (int) $product_id "' AND sparts_id = '" . (int) $sparts_id "'");
                    
    $this->db->query("INSERT INTO " DB_PREFIX "product_sparts SET product_id = '" . (int) $product_id "', sparts_id = '" . (int) $sparts_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_sparts WHERE product_id = '" . (int) $product_id "'");

            if (isset(
    $data['product_sparts'])) {
                foreach (
    $data['product_sparts'] as $sparts_id) {
                    
    $this->db->query("DELETE FROM " DB_PREFIX "product_sparts WHERE product_id = '" . (int) $product_id "' AND sparts_id = '" . (int) $sparts_id "'");
                    
    $this->db->query("INSERT INTO " DB_PREFIX "product_sparts SET product_id = '" . (int) $product_id "', sparts_id = '" . (int) $sparts_id "'");
                }
            }
    там же после
    PHP:
    $data['product_related'] = $this->getProductRelated($product_id);
    вставил
    PHP:
    $data['product_sparts'] = $this->getProductSparts($product_id);
    там же после
    PHP:
    $this->db->query("DELETE FROM " DB_PREFIX "product_related WHERE related_id = '" . (int) $product_id "'");
    вставил
    PHP:
    $this->db->query("DELETE FROM " DB_PREFIX "product_sparts WHERE product_id = '" . (int) $product_id "'");
    там же после
    PHP:
    public function getProductRelated($product_id) {
            
    $product_related_data = array();

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

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

            return 
    $product_related_data;
        }
    вставил
    PHP:
    public function getProductSparts($product_id) {
            
    $product_sparts_data = array();

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

            foreach (
    $query->rows as $result) {
                
    $product_sparts_data[] = $result['sparts_id'];
            }

            return 
    $product_related_data;
        }
    в контролере товара в админке
    после
    PHP:
    if (isset($this->request->post['product_related'])) {
            
    $products $this->request->post['product_related'];
        } elseif (isset(
    $this->request->get['product_id'])) {
            
    $products $this->model_catalog_product->getProductRelated($this->request->get['product_id']);
        } else {
            
    $products = array();
        }

        
    $data['product_relateds'] = array();

        foreach (
    $products as $product_id) {
            
    $related_info $this->model_catalog_product->getProduct($product_id);

            if (
    $related_info) {
            
    $data['product_relateds'][] = array(
                
    'product_id' => $related_info['product_id'],
                
    'name' => $related_info['name']
            );
            }
        }
    вставил
    PHP:
    if (isset($this->request->post['product_sparts'])) {
            
    $products2 $this->request->post['product_sparts'];
        } elseif (isset(
    $this->request->get['product_id'])) {
            
    $products2 $this->model_catalog_product->getProductSparts($this->request->get['product_id']);
        } else {
            
    $products2 = array();
        }

        
    $data['product_spartss'] = array();

        foreach (
    $products2 as $product_id) {
            
    $sparts_info $this->model_catalog_product->getProduct($product_id);

            if (
    $sparts_info) {
            
    $data['product_spartss'][] = array(
                
    'product_id' => $sparts_info['product_id'],
                
    'name' => $sparts_info['name']
            );
            }
        }
    и в шаблоне
    HTML:
    <div class="form-group">
    <label class="col-sm-2 control-label" for="input-sparts"><span data-toggle="tooltip" title="{{ help_sparts }}">{{ entry_sparts }}</span></label>
    <div class="col-sm-10">
    <input type="text" name="sparts" value="" placeholder="{{ entry_sparts }}" id="input-sparts" class="form-control" />
    <div id="product-sparts" class="well well-sm" style="height: 150px; overflow: auto;"> {% for product_sparts in product_spartss %}
    <div id="product-sparts{{ product_sparts.product_id }}"><i class="fa fa-minus-circle"></i> {{ product_sparts.name }}
    <input type="hidden" name="product_sparts[]" value="{{ product_sparts.product_id }}" />
    </div>
    {% endfor %}</div>
    </div>
    </div>
    Где же я обшибся?
     
    Последнее редактирование: 8 дек 2020
  2. chester98

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

    Сообщения:
    45
    Симпатии:
    1
    нашел обшибку, в файле модели вместо return $product_related_data; надо было return $product_sparts_data;