Перейти к содержанию
Dizzy

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

Рекомендуемые сообщения

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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 - можно вывести любой модуль или слева, или справа.

Как то так :-)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у вас класс 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();
    }
}
?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.