Jump to content
Sign in to follow this  
Dizzy

[Решено] Сдвоеный модуль или два модуля рядом в подвале/шапке

Recommended Posts

Есть такая необходимость разместить два модуля на одном уровне в подвале. Новости и последние отзывы.

Оба модуля сильно растягиваются по горизонтали и пригодны только для боковых колонок. Поэтому решил сделать их подвале рядом друг с другом.
Но шаблоны то опенкартовские не дат такого сделать...ну по крайней мере дефолтный и тот что у меня купленный на themeforeste.
Вопрос: как можно их связать в один модуль ...может модуль такой есть или хак для оперката который сдваивает модули. Ему например назначается только порядок сортировки а в нем выбираются два модуля какой слева а какой справа....Или возможно вставить див новый в тплку и в него как то вставлять уже эти два модуля принудительно отключив их на вывод в стандартных местах для модулей..

post-25482-0-82301700-1379259928_thumb.jpg

Share this post


Link to post
Share on other sites

ищите модуль, что-то вроде этого http://www.opencart.com/index.php?route=extension/extension/info&extension_id=9703

который позволяет создавать свои позиция расположения модулей, например в футере

 

кстати, вот еще есть https://opencartforum.com/files/file/1159-jposition/

Share this post


Link to post
Share on other sites

Тоже интересует данная тема.

Проблемы то особо нет, добавить новое место в шаблоне, но мы же будем выводить модули:

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

и от сюда и сам вопрос, как заставить модули становится в ряд. У меня в голове вертится только css через float, но сам еще не пробовал, руки не доходят. Может быть кто экспериментировал?

Share this post


Link to post
Share on other sites

Нашел я и его...но не пашет...надо ковырять где там куда прописаны путя ....пока что наскоком не работает без рукоприкладства :)и не понятно где какие позиция выводятся...хоть бы таблицу какую сделали где какая позиция...как в шаблонах для джумлы обычно делают карту позиций..

Share this post


Link to post
Share on other sites

Если что-то не так делал, сильно не ругайте, сам не программист, но все же может быть, кому то пригодится. Как делал я (слайдер рядом с новостным блоком на главной)

catalog/view/theme/default/template/common/home.tpl - добаляем вывод будущих позиций в нужном месте, у меня над $content_top

<div id="new_class">
<?php echo $new_position_left; ?>
<?php echo $new_position_right; ?>
</div>

catalog/controller/common/ - создаем новые позиции new_position_left.php и new_position_right.php (по аналогии с другими позициями)

catalog/view/theme/default/template/common/ - создаем под них .tpl

<div id="new_class_left"><?php foreach ($modules as $module) { ?>
   <?php echo $module; ?>
<?php } ?></div>

правая тоже самое только класс right.

catalog/controller/common/home.php - добавляем наши новые позиции в массив $this->children = array(

'common/new_position_left',

'common/new_position_right',

Потом в css

#new_class_left { float:left;}

#new_class_right { float:right;}

Новые позиции нужно добавить в админке в нужные модули (в интернете много информации как добавить сие чудо)

И все, теперь у меня выше $content_top - можно вывести любой модуль или слева, или справа.

Как то так :-)

Share this post


Link to post
Share on other sites

Если что-то не так делал, сильно не ругайте, сам не программист, но все же может быть, кому то пригодится. Как делал я (слайдер рядом с новостным блоком на главной)

catalog/view/theme/default/template/common/home.tpl - добаляем вывод будущих позиций в нужном месте, у меня над $content_top

<div id="new_class"><?php echo $new_position_left; ?><?php echo $new_position_right; ?></div>
catalog/controller/common/ - создаем новые позиции new_position_left.php и new_position_right.php (по аналогии с другими позициями)

catalog/view/theme/default/template/common/ - создаем под них .tpl

<div id="new_class_left"><?php foreach ($modules as $module) { ?>   <?php echo $module; ?><?php } ?></div>
правая тоже самое только класс right.

catalog/controller/common/home.php - добавляем наши новые позиции в массив $this->children = array(

'common/new_position_left',

'common/new_position_right',

Потом в css

#new_class_left { float:left;}

#new_class_right { float:right;}

Новые позиции нужно добавить в админке в нужные модули (в интернете много информации как добавить сие чудо)

И все, теперь у меня выше $content_top - можно вывести любой модуль или слева, или справа.

Как то так :-)

Чето не хочет..

Fatal error: Cannot redeclare class ControllerCommonContentBottom in сайт/catalog/controller/common/new_position_left.php on line 87

Share this post


Link to post
Share on other sites

у вас класс ControllerCommonContentBottom, а должен быть новый класс ControllerCommonNewPositionLeft

на всякий пожарный мой фаил контроллера:

<?php
class ControllerCommonNewPositionLeft extends Controller {
    public function index() {
        $this->load->model('design/layout');
        $this->load->model('catalog/category');
        $this->load->model('catalog/product');
        $this->load->model('catalog/information');
 
        if (isset($this->request->get['route'])) {
            $route = (string)$this->request->get['route'];
        } else {
            $route = 'common/home';
        }
 
        $layout_id = 0;
 
        if ($route == 'product/category' && isset($this->request->get['path'])) {
            $path = explode('_', (string)$this->request->get['path']);
 
            $layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path));
        }
 
        if ($route == 'product/product' && isset($this->request->get['product_id'])) {
            $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
        }
 
        if ($route == 'information/information' && isset($this->request->get['information_id'])) {
            $layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
        }
 
        if (!$layout_id) {
            $layout_id = $this->model_design_layout->getLayout($route);
        }
 
        if (!$layout_id) {
            $layout_id = $this->config->get('config_layout_id');
        }
 
        $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'] == 'new_position_left' && $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/new_position_left.tpl')) {
            $this->template = $this->config->get('config_template') . '/template/common/new_position_left.tpl';
        } else {
            $this->template = 'default/template/common/new_position_left.tpl';
        }
 
        $this->render();
    }
}
?>

Share this post


Link to post
Share on other sites

Вроде разобрался..нашел как в админке добавить но...теперь оба модуля смешиваются с первым модулем который выводится в футере..какой бы приоритет ему не назначаешь то становиться как раз между ними. Выключаешь его и на его место становиться другой...карусель с брендами например...может помимо стилей new_position_left и new_position_right надо еще навоять css под new_position див в котором оба этих модуля прописаны?! Понять бы что там должно быть...

Share this post


Link to post
Share on other sites

Разобрался  с помощью как говориться..

 

Ниже полная и подкорректированная версия:

 

catalog/view/theme/default/template/common/home.tpl - добаляем вывод будущих позиций в нужном месте, у меня над $content_top

<div id="new_class">
<?php echo $new_position_left; ?>
<?php echo $new_position_right; ?>
</div>

catalog/controller/common/ - создаем новые позиции new_position_left.php и new_position_right.php (по аналогии с другими позициями)

<?php
class ControllerCommonNewPositionLeft extends Controller {
public function index() {
$this->load->model('design/layout');
$this->load->model('catalog/category');
$this->load->model('catalog/product');
$this->load->model('catalog/information');

if (isset($this->request->get['route'])) {
$route = (string)$this->request->get['route'];
} else {
$route = 'common/home';
}

$layout_id = 0;

if ($route == 'product/category' && isset($this->request->get['path'])) {
$path = explode('_', (string)$this->request->get['path']);

$layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path));
}

if ($route == 'product/product' && isset($this->request->get['product_id'])) {
$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
}

if ($route == 'information/information' && isset($this->request->get['information_id'])) {
$layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
}

if (!$layout_id) {
$layout_id = $this->model_design_layout->getLayout($route);
}

if (!$layout_id) {
$layout_id = $this->config->get('config_layout_id');
}

$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'] == 'new_position_left' && $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/new_position_left.tpl')) {
$this->template = $this->config->get('config_template') . '/template/common/new_position_left.tpl';
} else {
$this->template = 'default/template/common/new_position_left.tpl';
}

$this->render();
}
}
?>

catalog/view/theme/default/template/common/ - создаем под них .tpl

<div id="new_class_left"><?php foreach ($modules as $module) { ?>
<?php echo $module; ?>
<?php } ?></div>

правая тоже самое только id new_class_left.

 

catalog/controller/common/home.php - добавляем наши новые позиции в массив $this->children = array(

'common/new_position_left',
'common/new_position_right',

! Не забудьте, после предыдущей строки поставить в конце запятую, а то часто там в последней строке ее нет и когда вы добавляете свои строки то получается синтаксическая ошибка.

 

 


Потом в css (не дефолтный шаблон и ширина сайта 1000px)

#new_class_left, #new_class_right {
    float: left;
    width: 460px;
    padding: 20px;
}

Добавляем вывод в админке:

 

admin/view/template/module/latest.tpl   (latest.tpl как пример, прописывать необходимо в файле модуля для которого эти позиции)

 

Ищем:

<?php if ($module['position'] == 'content_top') { ?>
   <option value="content_top" selected="selected"><?php echo $text_content_top; ?></option>
<?php } else { ?>
   <option value="content_top"><?php echo $text_content_top; ?></option>
<?php } ?>  

И перед ним добавляем:

<?php if ($module['position'] == 'new_position_left') { ?>
   <option value="new_position_left" selected="selected">Новая позиция слева</option>
<?php } else { ?>
   <option value="new_position_left">Новая позиция слева</option>
<?php } ?>
<?php if ($module['position'] == 'new_position_right') { ?>
   <option value="new_position_right" selected="selected">Новая позиция справа</option>
<?php } else { ?>
   <option value="new_position_right">Новая позиция справа</option>
<?php } ?>

Ниже в файле ищем строку:

html += '      <option value="content_top"><?php echo $text_content_top; ?></option>';

Добавляем над ней:

html += '      <option value="new_position_left">Новая позиция слева</option>';
html += '      <option value="new_position_right">Новая позиция справа</option>';

Все, после этого смотрим как выводится и выбираем позиции для своих модулей.

 

 

Пы.Сы. Модераторам можно наверно почистить тему и прикрепить как "решено".

  • +1 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.