2016-12-17 7 views
0

Opencartの製品ページでは、同じブランドの製品をカテゴリ別に表示したいと思います。 以下のコードでは、特定のブランド製品が利用可能なカテゴリが表示されています。しかし、製品はカテゴリーの下に表示されていません。製品は1つのカテゴリの下にのみ表示されます。結果ページのスクリーンショットを追加する。最後のレコードだけを表示しているPHPのネストされたforeach ..!

enter image description here

このため専門家から少し助けを必要としています。

マイコード:

モデル/カタログ/ product.php

public function getManufacturerCategories($manufacturer_id) { 
    $query = $this->db->query(" 
    SELECT 
    DISTINCT c.category_id,cd.name 
    FROM 
    ". DB_PREFIX . "manufacturer m 
    LEFT JOIN ". DB_PREFIX. "product p ON (m.manufacturer_id = p.manufacturer_id) 
    LEFT JOIN ". DB_PREFIX. "product_to_category p2c ON (p2c.product_id = p.product_id) 
    LEFT JOIN ". DB_PREFIX. "category c ON (c.category_id = p2c.category_id) 
    LEFT JOIN ". DB_PREFIX. "category_description cd ON (cd.category_id = p2c.category_id) 
    WHERE 
    p.status = 1 
    AND m.manufacturer_id = '".(int)$manufacturer_id."' 
    AND c.status= 1 
    "); 

    return $query->rows; 

    } 

    public function getProductSameBrand($manufacturer_id,$product_id,$cat_id,$cat_name) { 

     $product_data = array(); 

     $query = $this->db->query(" 
     SELECT 
     DISTINCT p.manufacturer_id,p.product_id,p2c.category_id,cd.name 
     FROM 
     " . DB_PREFIX . "product p 
     LEFT JOIN ". DB_PREFIX. "product_to_category p2c ON (p2c.product_id = p.product_id) 
     LEFT JOIN ". DB_PREFIX. "category_description cd ON (cd.category_id = p2c.category_id) 
     WHERE   
     cd.name = '".$cat_name."' 
     AND p.manufacturer_id = '".(int)$manufacturer_id."' 
     " 
     ); 

      foreach ($query->rows as $result2) { 

      $product_data[$result2['product_id']] = $this->getProduct($result2['product_id']); 

      }  

      return $product_data; 

     } 

コントローラ/製品/ product.php

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

     if((int)$product_info['manufacturer_id'] > 0){ 
     $results = $this->model_catalog_product->getManufacturerCategories($product_info['manufacturer_id']); 
     } 

     foreach ($results as $result) { 
      $cat_name = $result['name']; 
      $cat_id = $result['category_id']; 

       $data['category_brand'][] = array(    
        'category_id' => $cat_id, 
        'name'   => $cat_name 
       ); 


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


      if((int)$product_info['manufacturer_id'] > 0){ 

     $results = $this->model_catalog_product->getProductSameBrand($product_info['manufacturer_id'],$this->request->get['product_id'],$cat_id,$cat_name); 

       } 

      foreach ($results as $result2) { 


       $data['products_brand'][] = array(

        'product_id' => $result2['product_id'], 
        'name'   => $result2['name'], 
        'catname'  => $cat_name, 
        'href'   => $this->url->link('product/product', 'product_id=' . $result2['product_id']) 

       ); 

      } 

      }  

ビュー/製品/ product.tpl

 <?php foreach ($category_brand as $cat) { ?> 
          <h4><?php echo $cat['name']; ?></h4> 
          <?php foreach ($products_brand as $product) { ?> 
          <?php if($cat['name']==$product['catname']){?> 
         <a href="<?php echo $product['href']; ?>"> <?php echo $product['name']; ?></a><br/> 
         <?php } ?> 
         <?php } ?> 
         <hr/> 
        <?php } ?> 

答えて

0

問題は解決です。 私は置く必要があった $ data ['products_brand'] = array();

上記の最初のforeach statment

関連する問題