Created
June 10, 2016 00:32
-
-
Save halfhope/da26a4c62d94ad176ffb0525d42ab0a9 to your computer and use it in GitHub Desktop.
Fast OpenCart catalog functions getProductAttributes and getProductOptions in catalog/model/catalog/product.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public function getProductAttributes($product_id) { | |
$product_attribute_group_data = array(); | |
$product_attribute_group_query = $this->db->query("SELECT a.attribute_id, ad.name as attribute_name, pa.text, ag.attribute_group_id, agd.name as attribute_group_name FROM " . DB_PREFIX . "product_attribute pa | |
LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) | |
LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) | |
LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) | |
LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) | |
WHERE pa.product_id = " . (int)$product_id . " | |
AND ad.language_id = agd.language_id | |
AND pa.language_id = agd.language_id | |
AND agd.language_id = " . (int)$this->config->get('config_language_id') . " | |
ORDER BY ag.sort_order, agd.name, a.sort_order, ad.name"); | |
$product_attribute_data = array(); | |
foreach ($product_attribute_group_query->rows as $product_attribute) { | |
$product_attribute_data[$product_attribute['attribute_id']][] = array( | |
'attribute_id' => $product_attribute['attribute_id'], | |
'name' => $product_attribute['attribute_name'], | |
'text' => $product_attribute['text'] | |
); | |
$product_attribute_group_data[$product_attribute['attribute_group_id']] = array( | |
'attribute_group_id' => $product_attribute['attribute_group_id'], | |
'name' => $product_attribute['attribute_group_name'], | |
); | |
$product_attribute_group_data[$product_attribute['attribute_group_id']]['attribute'] =& $product_attribute_data[$product_attribute['attribute_id']]; | |
} | |
return $product_attribute_group_data; | |
} | |
public function getProductOptions($product_id) { | |
$product_option_data = array(); | |
$product_option_query = $this->db->query("SELECT pov.product_option_value_id, pov.option_value_id, ovd.name as product_option_value_name, od.name as option_name, ov.image, pov.quantity, pov.subtract, pov.price, pov.price_prefix, pov.points, pov.points_prefix, pov.weight, pov.weight_prefix, pov.product_option_id, pov.option_id, o.type, po.required | |
FROM " . DB_PREFIX . "product_option_value pov | |
LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) | |
LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) | |
LEFT JOIN " . DB_PREFIX . "product_option po ON (pov.product_option_id = po.product_option_id) | |
LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) | |
LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) | |
WHERE po.product_id = " . (int)$product_id . " | |
AND od.language_id = " . (int)$this->config->get('config_language_id') . " | |
ORDER BY o.sort_order, ov.sort_order"); | |
$product_option_value_data = array(); | |
foreach ($product_option_query->rows as $product_option) { | |
if (in_array($product_option['type'], array('select','radio','checkbox','image'))) { | |
$product_option_value_data[$product_option['product_option_id']][] = array( | |
'product_option_value_id' => $product_option['product_option_value_id'], | |
'option_value_id' => $product_option['option_value_id'], | |
'name' => $product_option['product_option_value_name'], | |
'image' => $product_option['image'], | |
'quantity' => $product_option['quantity'], | |
'subtract' => $product_option['subtract'], | |
'price' => $product_option['price'], | |
'price_prefix' => $product_option['price_prefix'], | |
'points' => $product_option['points'], | |
'points_prefix' => $product_option['points_prefix'], | |
'weight' => $product_option['weight'], | |
'weight_prefix' => $product_option['weight_prefix'] | |
); | |
$product_option_data[$product_option['option_id']] = array( | |
'product_option_id' => $product_option['product_option_id'], | |
'option_id' => $product_option['option_id'], | |
'name' => $product_option['option_name'], | |
'type' => $product_option['type'], | |
'required' => $product_option['required'] | |
); | |
$product_option_data[$product_option['option_id']]['option_value'] =& $product_option_value_data[$product_option['product_option_id']]; | |
}else{ | |
$product_option_data[$product_option['option_id']] = array( | |
'product_option_id' => $product_option['product_option_id'], | |
'option_id' => $product_option['option_id'], | |
'name' => $product_option['option_name'], | |
'type' => $product_option['type'], | |
'option_value' => $product_option['option_value'], | |
'required' => $product_option['required'] | |
); | |
} | |
} | |
return $product_option_data; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment