This is the response controller code :
<?php
if (! defined ( 'DIR_CORE' )) {
header ( 'Location: static_pages/' );
}
class ControllerResponsesExtensionRetail extends AController {
public $data = array();
public function main() {
}
public function getProducts()
{
$this->extensions->hk_InitData($this, __FUNCTION__);
$id=$this->request->get['category_id'];
$dispatch = $this->dispatch('responses/extension/retail/get_products',array('id'=>$id));
$this->data['retail']=$dispatch->dispatchGetOutput();
$this->extensions->hk_UpdateData($this, __FUNCTION__);
$this->load->library('json');
$this->response->addJSONHeader();
$this->response->setOutput(AJson::encode($this->data));
}
public function get_products($id)
{
$this->extensions->hk_InitData($this,__FUNCTION__);
$this->loadModel('catalog/model');
$category_info = $this->model_catalog_category->getCategory($id);
if ($category_info) {
$this->loadModel('catalog/product');
}
$category_total = $this->model_catalog_category->getTotalCategoriesByCategoryId($id);
$product_total = '';
if ($category_total || $product_total) {
$categories = array();
$results = $this->model_catalog_category->getCategories($id);
$resource = new AResource('image');
$products = array();
$counts=array();
foreach ($results as $result) {
$ids=$this->model_catalog_product->getTotalProductsByCategoryId($result['id']);
//$ids = (int)$result['id'];
$subcategories=$this->model_catalog_product->getProductsByCategoryId($result['category_id']);
$counts[] = $ids;
foreach ($subcategories as $subs) {
$product_ids[] = (int)$subs['product_id'];
}
$products_info = $this->model_catalog_product->getProductsAllInfo($product_ids);
foreach ($subcategories as $subs) {
$thumbnail = $resource->getMainThumb('products',
$subs['product_id'],
(int)$this->config->get('config_image_product_width'),
(int)$this->config->get('config_image_product_height'), true);
$rating = $products_info[$subs['product_id']]['rating'];
$special = FALSE;
$discount = $products_info[$subs['product_id']]['discount'];
if ($discount) {
if ($this->currency->getCode()=="IDR")
{
$price = $this->currency->format($this->tax->calculate($discount, $subs['tax_class_id'], $this->config->get('config_tax')));
$val=(int)preg_replace('/([^0-9\.,])/i','',$price);
}
else
{
$price = $this->currency->format($this->tax->calculate($discount, $subs['tax_class_id'], $this->config->get('config_tax')));
$val=(int)preg_replace('/([^0-9\.,])/i','',$price);
}
} else {
$price = $this->currency->format($this->tax->calculate($subs['price'], $subs['tax_class_id'], $this->config->get('config_tax')));
if ($this->currency->getCode()=="IDR")
{
$val=(int)$this->tax->calculate($subs['price'], $subs['tax_class_id'], $this->config->get('config_tax'));
}
else
{
$val=(int)preg_replace('/([^0-9\.,])/i', '',$this->currency->format($this->tax->calculate($subs['price'], $subs['tax_class_id'], $this->config->get('config_tax'))));
}
$special = $products_info[$subs['product_id']]['special'];
if ($special) {
if ($this->currency->getCode()=="IDR")
{
$special = $this->currency->format($this->tax->calculate($special, $subs['tax_class_id'], $this->config->get('config_tax')));
$val=(int)preg_replace('/([^0-9\.])/i','',$special);
}
else
{
$special = $this->currency->format($this->tax->calculate($special, $subs['tax_class_id'], $this->config->get('config_tax')));
$val=(int)preg_replace('/([^0-9\.,])/i','',$special);
}
}
}
$options = $products_info[$subs['product_id']]['options'];
if ($options) {
$add = $this->html->getSEOURL('product/product', '&product_id=' . $subs['product_id'], '&encode');
} else {
if ($this->config->get('config_cart_ajax')) {
$add = '#';
} else {
$add = $this->html->getSecureURL('checkout/cart', '&product_id=' . $subs['product_id'], '&encode');
}
}
$products[] = array(
'product_id' => $subs['product_id'],
'name' => $subs['name'],
'model' => $subs['model'],
'rating' => $rating,
'stars' => sprintf($this->language->get('text_stars'), $rating),
'thumb' => $thumbnail,
'price' => $price,
'call_to_order' => $subs['call_to_order'],
'options' => $options,
'special' => $special,
'href' => $this->html->getSEOURL('product/product', '&path=' . $this->request->get['path'] . '&product_id=' . $subs['product_id'], '&encode'),
'add' => $add,
'description' => html_entity_decode($subs['description'], ENT_QUOTES, 'UTF-8'),
'category_name'=>$result['name'],
'val'=>$val,
'date'=>$subs['date_available']
);
}
$this->data['products'] = $products;
}
$this->view->assign('categories', $categories);
$this->loadModel('catalog/review');
$this->view->assign('button_add_to_cart', $this->language->get('button_add_to_cart'));
if ($this->config->get('config_customer_price')) {
$display_price = TRUE;
} elseif ($this->customer->isLogged()) {
$display_price = TRUE;
} else {
$display_price = FALSE;
}
$this->view->assign('display_price', $display_price);
$this->view->assign( 'url', $this->html->getSEOURL('product/category','&path=' . $this->request->get['path']));
$this->view->batchAssign($this->data);
}
if(!$this->view->isTemplateExists('responses/extension/retail.tpl')){
return '';
}
//update controller data
$this->extensions->hk_UpdateData($this, __FUNCTION__);
$this->processTemplate('responses/extension/retail.tpl');
}
}
main.php
<?php
if (! defined ( 'DIR_CORE' )) {
header ( 'Location: static_pages/' );
}
if(!class_exists('ExtensionRetail')){
include_once('core/Retail_hooks.php');
}
$controllers = array(
'storefront' => array('responses/extension/retail.php'),
'admin' => array());
$models = array(
'storefront' => array('catalog/category',
'catalog/product'),
'admin' => array());
$templates = array(
'storefront' => array(
'blocks/account.tpl',
'blocks/bestseller.tpl',
'blocks/bestseller_home.tpl',
'blocks/breadcrumbs.tpl',
'blocks/cart.tpl',
'blocks/cart_top.tpl',
'blocks/category.tpl',
'blocks/category_bottom.tpl',
'blocks/category_top.tpl',
'blocks/content.tpl',
'blocks/content_footer.tpl',
'blocks/content_header.tpl',
'blocks/coupon_form.tpl',
'blocks/credit_cards.tpl',
'blocks/currency.tpl',
'blocks/donate.tpl',
'blocks/featured.tpl',
'blocks/featured_home.tpl',
'blocks/google_talk.tpl',
'blocks/html_block.tpl',
'blocks/html_block_content.tpl',
'blocks/html_block_footer.tpl',
'blocks/html_block_header.tpl',
'blocks/language.tpl',
'blocks/latest.tpl',
'blocks/latest_home.tpl',
'blocks/listing_block/popular_brands_content_bottom.tpl',
'blocks/listing_block_column_left.tpl',
'blocks/listing_block_column_right.tpl',
'blocks/listing_block_content_bottom.tpl',
'blocks/listing_block_content_top.tpl',
'blocks/listing_block_footer.tpl',
'blocks/listing_block_footer_top.tpl',
'blocks/listing_block_header.tpl',
'blocks/listing_block_header_bottom.tpl',
'blocks/manufacturer.tpl',
'blocks/menu.tpl',
'blocks/menu_bottom.tpl',
'blocks/menu_top.tpl',
'blocks/newsletter_signup_column_left.tpl',
'blocks/newsletter_signup_column_right.tpl',
'blocks/newsletter_signup_content_bottom.tpl',
'blocks/newsletter_signup_content_top.tpl',
'blocks/newsletter_signup_footer.tpl',
'blocks/newsletter_signup_footer_top.tpl',
'blocks/newsletter_signup_header.tpl',
'blocks/newsletter_signup_header_bottom.tpl',
'blocks/order_summary.tpl',
'blocks/product_list.tpl',
'blocks/search.tpl',
'blocks/search_bottom.tpl',
'blocks/search_top.tpl',
'blocks/special.tpl',
'blocks/special_home.tpl',
'common/column_left.tpl',
'common/column_right.tpl',
'common/content_bottom.tpl',
'common/content_top.tpl',
'common/footer.tpl',
'common/footer_top.tpl',
'common/head.tpl',
'common/header.tpl',
'common/header_bottom.tpl',
'common/menu.tpl',
'common/page.tpl',
'common/resource_image.tpl',
'common/success.tpl',
'common/template_debug.tpl',
'common/unsubscribe.tpl',
'form/button.tpl',
'form/captcha.tpl',
'form/checkbox.tpl',
'form/checkboxgroup.tpl',
'form/countries_zones.tpl',
'form/date.tpl',
'form/file.tpl',
'form/form.tpl',
'form/form_close.tpl',
'form/form_field.tpl',
'form/form_group.tpl',
'form/form_no_group.tpl',
'form/form_open.tpl',
'form/hidden.tpl',
'form/input.tpl',
'form/pagination.tpl',
'form/radio.tpl',
'form/rating.tpl',
'form/selectbox.tpl',
'form/submit.tpl',
'form/textarea.tpl',
'mail/order_confirm.tpl',
'pages/account/account.tpl',
'pages/account/address.tpl',
'pages/account/addresses.tpl',
'pages/account/create.tpl',
'pages/account/download.tpl',
'pages/account/edit.tpl',
'pages/account/forgotten.tpl',
'pages/account/history.tpl',
'pages/account/invoice.tpl',
'pages/account/login.tpl',
'pages/account/newsletter.tpl',
'pages/account/password.tpl',
'pages/account/subscriber.tpl',
'pages/account/transactions.tpl',
'pages/checkout/address.tpl',
'pages/checkout/cart.tpl',
'pages/checkout/confirm.buttons.tpl',
'pages/checkout/confirm.tpl',
'pages/checkout/guest_step_1.tpl',
'pages/checkout/guest_step_2.tpl',
'pages/checkout/payment.buttons.tpl',
'pages/checkout/payment.tpl',
'pages/checkout/shipping.buttons.tpl',
'pages/checkout/shipping.tpl',
'pages/content/contact.tpl',
'pages/content/content.tpl',
'pages/content/payment_confirmation.tpl',
'pages/content/sitemap.tpl',
'pages/error/not_found.tpl',
'pages/index/home.tpl',
'pages/index/maintenance.tpl',
'pages/product/category.tpl',
'pages/product/manufacturer.tpl',
'pages/product/product.tpl',
'pages/product/product_listing.tpl',
'pages/product/search.tpl',
'pages/product/special.tpl',
'responses/checkout/cart_details.tpl',
'responses/checkout/no_payment.tpl',
'responses/content/content.tpl',
'responses/extension/retail.tpl',
'responses/product/review.tpl'),
'admin' => array());
$languages = array(
'storefront' => array(),
'admin' => array());