Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

Оба модуля сильно растягиваются по горизонтали и пригодны только для боковых колонок. Поэтому решил сделать их подвале рядом друг с другом.
Но шаблоны то опенкартовские не дат такого сделать...ну по крайней мере дефолтный и тот что у меня купленный на 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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.