php - Adding product options to related product in OpenCart 2.3.0.2 -
the idea simple; want make easier customers add related products while they're visiting single product. related products have required options options need showed too.
i think close on showing part, no idea how add cart ajax calls etc. please note i'm not programmer, fiddle php code know bit.
i started editing in controller; catalog/controller/product/product.php
$data['products'] = array(); $results = $this->model_catalog_product->getproductrelated($this->request->get['product_id']); //adding array needs filled product options $data['daaf_options'] = array(); foreach ($results $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height')); } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height')); } if ($this->customer->islogged() || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); } else { $price = false; } if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = (int)$result['rating']; } else { $rating = false; } $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ent_quotes, 'utf-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']) ); //getting options $daaf_getoptions = $this->model_catalog_product->getproductoptions($result['product_id']); $related_product_option_value_data = array(); foreach ($daaf_getoptions $related_option) { foreach ($related_option['product_option_value'] $related_option_value) { $related_product_option_value_data[] = array( 'product_option_value_id' => $related_option_value['product_option_value_id'], 'option_value_id' => $related_option_value['option_value_id'], 'name' => $related_option_value['name'] ); } $data['daaf_options'][] = array( 'product_option_id' => $related_option['product_option_id'], 'product_option_value' => $related_product_option_value_data, 'option_id' => $related_option['option_id'], 'name' => $related_option['name'], 'type' => $related_option['type'], 'value' => $related_option['value'], 'required' => $related_option['required'] ); } }
then add options related products in /catalog/view/theme/default/template/product/product.tpl
$product_options_center = $modules_old_opencart->getmodules('product_options_center'); if( count($product_options_center) ) { foreach ($product_options_center $module) { echo $module; } } ?> <?php if ($daaf_options) { ?> <div class="options"> <?php foreach ($daaf_options $related_option) { ?> <?php if ($related_option['type'] == 'select') { ?> <div class="form-group<?php echo ($related_option['required'] ? ' required' : ''); ?>"> <label class="control-label" for="input-option<?php echo $related_option['product_option_id']; ?>"><?php echo $related_option['name']; ?></label> <select name="option[<?php echo $related_option['product_option_id']; ?>]" id="input-option<?php echo $related_option['product_option_id']; ?>" class="form-control"> <option value=""><?php echo $text_select; ?></option> <?php foreach ($related_option['product_option_value'] $related_option_value) { ?> <option value="<?php echo $related_option_value['product_option_value_id']; ?>"><?php echo $related_option_value['name']; ?> </option> <?php } ?> </select> </div> <?php } ?> <?php } ?> </div> <?php } ?>
this looks now; http://imgur.com/a/rds3v
the product in example has 7 related products , have 1 required option. it's going wrong because every related product getting options 7 related products.
what doing wrong?
sincerely hope can out! cheers, david
try move //getting options
codes above $data['products'][] = array
can put inside product array.
$data['products'] = array(); $results = $this->model_catalog_product->getproductrelated($this->request->get['product_id']); foreach ($results $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height')); } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_related_width'), $this->config->get($this->config->get('config_theme') . '_image_related_height')); } if ($this->customer->islogged() || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); } else { $price = false; } if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = (int)$result['rating']; } else { $rating = false; } //adding array needs filled product options $daaf_options = array(); //getting options $daaf_getoptions = $this->model_catalog_product->getproductoptions($result['product_id']); $related_product_option_value_data = array(); foreach ($daaf_getoptions $related_option) { foreach ($related_option['product_option_value'] $related_option_value) { $related_product_option_value_data[] = array( 'product_option_value_id' => $related_option_value['product_option_value_id'], 'option_value_id' => $related_option_value['option_value_id'], 'name' => $related_option_value['name'] ); } $daaf_options[] = array( 'product_option_id' => $related_option['product_option_id'], 'product_option_value' => $related_product_option_value_data, 'option_id' => $related_option['option_id'], 'name' => $related_option['name'], 'type' => $related_option['type'], 'value' => $related_option['value'], 'required' => $related_option['required'] ); } $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ent_quotes, 'utf-8')), 0, $this->config->get($this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id']), 'options' => $daaf_options //we put options here ); }
then, can call product.tpl if ($product['options'])
(inside foreach ($products $product)
of course).
Comments
Post a Comment