1
votes

I have just developed my first Opencart (1.5.6) plugin using the hostjars starter files.

The Admin section is working beautifully, and all the Frontend code has been placed. However, for some reason the module is not showing the on the webpage, even though the position has been defined in the Admin.

Below is the Frontend Controller code for reference (FYI, No errors are thrown which makes me think that perhaps the Controller is not being called or something):

<?php class ControllerModulebevyspecials extends Controller {
protected function index($setting) {
    //Load the language file  
    $this->language->load('module/bevy_specials');

    //Load the models  
    $this->load->model('module/bevy_specials'); 

    //Get the title from the language file
    $this->data['heading_title'] = $this->language->get('heading_title');

    //Retrieve Checkout Special Products
    $products = $this->model_module_bevy_specials->getBevySpecials();
    if(Count($products)>0){         
        foreach ($products as $product) {
            $product_info = $this->model_catalog_product->getProduct($product['product_id']);
            $this->data['title'] = $product['title'];
            if (isset($product_info)) {
                $this->data['products'][] = array(
                    'product_id'    => $product_info['product_id'],
                    'name'          => $product_info['name'],
                    'discount'      => $product['discount']
                );
            }
        }   
    }
    else{
        $this->data['noRecord'] = true;
    }

    //Choose which template to display this module with
    if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/bevy_specials.tpl')) {
        $this->template = $this->config->get('config_template') . '/template/module/bevy_specials.tpl';
    } else {
        $this->template = 'default/template/module/bevy_specials.tpl';
    }

    //Render the page with the chosen template
    $this->render();
}  } ?>

Am I missing any specific code that displays the module on the webpage?

Opencart documentation is quite minimal when it comes to module development, and I've tried searching on web for a solution but couldn't find a definitive answer.

Any inputs will be greatly appreciated. Thanks in advance!

MORE INFO: One issue found though.....in admin panel when i add 2 or more Layouts for the module (e.g added to "Column-Left" for Contact page and "Content-Top" for Account page), the Frontend then shows the following error:

Warning: Invalid argument supplied for foreach() in D:\xampp171\htdocs\opencart\catalog\controller\common\column_left.php on line 49
1
Have you installed your module through admin panel ?Hassan
@Hassan.... Yes absolutely, its installed, configured, and enabled too. You can see the snap of the admin panel here bevysolutions.com/stackoverflow/snap-26jan2014.jpgUmair Quraeshi
Where did you define you install / Uninstall methods. When install module you suppose to insert its entry in opencart setting. How did you do that ? Source : docs.opencart.com/pages/viewpage.action?pageId=754759Hassan
@Hassan...The install/uninstall methods were added in the Admin's Controller file...following is part of my Install method: $this->load->model('setting/setting'); $this->model_setting_setting->editSetting('bevy_specials', array('bevy_specials_status'=>1));Umair Quraeshi
Have you found error undert System > Error Logs ?Hassan

1 Answers

0
votes

Issue Resolved Since i used the hostjars start files, i had to amend the code abit and the issue got fixed.

1) In the Admin Controller of the module, i removed the section under the comment:

"//This code handles the situation where you have multiple instances of this module, for different layouts."

2) In the Admin View .tpl file, for the layout position , i had to properly format the few html tag's. For example: the <select name="my_module_<?php echo $module_row; ?>_layout_id"> was replaced with the proper format <select name="banner_module[<?php echo $module_row; ?>][layout_id]">...... This ensures that multiple Layouts can be saved in Admin control panel. (there will be 8 places in the .tpl file where this needs to be done)

3) Last but not the least, if you do Step 2 correctly, then the Layouts will be properly serialized and saved in the database's oc_settings Table (previously my layout was not being stored in serialized form).

Hope the above helps others too.

Thank you!