John Magnolia
John Magnolia

Reputation: 16793

Opencart get parent categories for product

How could I make this into a recursive function. So that it would get a list of all categories for the selected parent_id?

public function getProductCategoryPath($product_id) {
    $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' LIMIT 1");

    if($query->row['category_id']){

        // Parent category
        $path = $query->row['category_id'];

        // Category parent 
        $query = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $query->row['category_id'] . "' AND parent_id != 0");           
        if($query->num_rows){
            $path = $query->row['parent_id'] . "_" . $path;

            // Sub-category parent 
            $query = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $query->row['parent_id'] . "' AND parent_id != 0");         
            if($query->num_rows){
                $path = $query->row['parent_id'] . "_" . $path;
            } 
        } 

        return $path;
    }

    return false;
}

Upvotes: 0

Views: 3755

Answers (1)

orestisd
orestisd

Reputation: 832

I didn't understand exactly what you want to print, but for recursive you will use while

public function getProductCategoryPath($product_id) {
$query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "' LIMIT 1");

if($query->row['category_id']){

    // Parent category
    $path = $query->row['category_id'];

    // Category parent 
    $query = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $query->row['category_id'] . "' AND parent_id != 0");           
    while($query->num_rows){
        $path = $query->row['parent_id'] . "_" . $path;

        // Sub-category parent 
        $query = $this->db->query("SELECT parent_id FROM " . DB_PREFIX . "category WHERE category_id = '" . $query->row['parent_id'] . "' AND parent_id != 0");    
    } 

    return $path;
}

return false;
}

Upvotes: 3

Related Questions