Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

opencart 1.5 how to add module in a header

Tags:

opencart

Please some one tell me how can I position modules like slider or banner in header or how can we define additional regions for the modules.

like image 212
Fahad Ur Rehman Avatar asked Sep 14 '11 19:09

Fahad Ur Rehman


3 Answers

Well, I am working on it.

Firstly, you should add a new position in the admin page. Which means you should change three files and add some lines into each.

For example, if you want to add slideshow into header, you should add a new position in

$this->data['text_header'] = $this->language->get('text_header'); // in admin/controller/slideshow.php

////////////////////////////////////////////////

$_['text_header']         = 'Header'; // in admin/language/slideshow.php

////////////////////////////////////////////////

<?php if ($module['position'] == 'header') { ?> // in admin/view/slideshow.tpl
            <option value="header" selected="selected"><?php echo $text_header; ?></option>
            <?php } else { ?>
            <option value="header"><?php echo $text_header; ?></option>
            <?php } ?>

Then a new position for slideshow has been defined. and you can choose it in the admin page.

After that, you should add those codes in catalog/view/header.tpl

 <?php foreach ($modules as $module) { ?>
    <?php echo $module; ?>
    <?php } ?>

Then, in the catalog/controller/header.php, add some codes like content_top.php does: $layout_id = 1;

$module_data = array();

$this->load->model('setting/extension');

$extensions = $this->model_setting_extension->getExtensions('module');      

foreach ($extensions as $extension) {
    $modules = $this->config->get($extension['code'] . '_module');

    if ($modules) {
        foreach ($modules as $module) {
            if ($module['layout_id'] == $layout_id && $module['position'] == 'header' && $module['status']) {
                $module_data[] = array(
                    'code'       => $extension['code'],
                    'setting'    => $module,
                    'sort_order' => $module['sort_order']
                );              
            }
        }
    }
}

$sort_order = array(); 

foreach ($module_data as $key => $value) {
    $sort_order[$key] = $value['sort_order'];
}

array_multisort($sort_order, SORT_ASC, $module_data);

$this->data['modules'] = array();

foreach ($module_data as $module) {
    $module = $this->getChild('module/' . $module['code'], $module['setting']);

    if ($module) {
        $this->data['modules'][] = $module;
    }
}


if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header.tpl')) {
    $this->template = $this->config->get('config_template') . '/template/common/header.tpl';
} else {
    $this->template = 'default/template/common/header.tpl';
}

$this->render();

Then all done.

The only problem for this code is the slideshow cannot display as a slideshow but a static picture or pictures.

Wish you could solve it out and reply to me. My question post: Opencart developement: change slideshow's position

like image 72
huawei chen Avatar answered Jan 01 '23 17:01

huawei chen


do what Huawei Chen wrote and then add these to header:

<script type="text/javascript" src="catalog/view/javascript/jquery/nivo-slider/jquery.nivo.slider.pack.js"></script>
<link rel="stylesheet" type="text/css" href="catalog/view/theme/default/stylesheet/slideshow.css" media="screen" />

and slider will be working

like image 44
iLaPis Avatar answered Jan 01 '23 18:01

iLaPis


You can learn from controller/common/column_right.php

Check module position (line 50), you can adapt it to "header":

$module['position'] == 'column_right'

Set the output (line 69), you can adapt it to something like "header_mod" :

$this->data['modules']

You need to modificate module at admin to show additional module position.
There is no "header" module position options at admin page.

like image 22
qaharmdz Avatar answered Jan 01 '23 19:01

qaharmdz