Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

[РЕШЕНО] Вывод модулей в Header/Footer


 Погделиться

Рекомендованные сообещёния

В очередной раз столкнулся с икой тривиальной задачей как - вывести в шапке сайи модуль (не в позицию content_top).

Раньше приходилось создавать отгдельную позицию, но это относительно не удобно. Нужно создавать новые файлы и именно в header.tpl все равно вывода нет.

 

Копаясь в когде решил сгделать свой "велосипед", может кому пригодится.

Что дает:

- вывод люпотому чтого модуля в шапку или в подвал (именно в header.tpl/footer.tpl)

- вывод на всех страницах без создания новых схем.

 

Начнем.
1.Открываем catalog/controller/common/header.php

перед строкой 

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

Добавляем код который отвечает за вывод модулей в позиции header

$layout_id = 0;

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'] == '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;
}
}

2. В шаблоне вывода catalog/view/theme/default/common/header.tpl добавляем код для выводя модулей

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

...можно обернуть в div блок

Позиция header у нас теперьь суещёствует, осилось добавить информацию для выводимого модуля о позиции header
для этого открываем файл вывода вашего модуля в админке admin/view/template/module/your_module.tpl

и после строчек 

 <option value="column_right"><?php echo $text_column_right; ?></option>
 <?php } ?>

добавляем

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

и ниже в этом же файле после

html += '      <option value="column_right"><?php echo $text_column_right; ?></option>';

добавляем

html += '      <option value="header"><?php echo $text_header; ?></option>';

3. В контролере модуля admin/controller/module/your_module.php

после

$this->data['text_column_right'] = $this->language->get('text_column_right');
добавляем
$this->data['text_header'] = $this->language->get('text_header');

4. Дальше в языковом admin/language/russian/module/your_module.php после

$_['text_column_right']   = 'Правая колонка';

добавляем

$_['text_header']    = 'В шапке сайи';

ВСЕ! У вас модуль знает икую позицию как "В шапке сайи" выбираете и он выводится туда.

 

ЕСЛИ НУЖНО ВЫВЕСТИ МОДУЛЬ НА ВСЕХ СТРАНИЦАХ

 

То в первом шаге нужно всивить код без опрегделения схемы (без layout)

$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['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;
}
} 

Что бы вывести модули в footer, все тоже самое только в файлах которые отвечают за подвал сайи и везгде значение header меняете на footer

  • +1 9
Ссылка на комменирий
Погделиться на других сайих

Плюсанул за сирательность но не проещё ли добавить 2 строки ? одну в контроллер вторую в тпл ? по аналогии как это сгделано с корзиной ?

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

  29.01.2014 в 18:03, snastik сказал:

Плюсанул за сирательность но не проещё ли добавить 2 строки ? одну в контроллер вторую в тпл ? по аналогии как это сгделано с корзиной ?

В том, то и гдело, что например слайдшоу или скажем модуль кастомного меню, ну никак не хочет рилиить. Сам пропотому чтовал 2мя строчками, по аналогии с корзиной, но начали выскакивать ошибки типа undefine index $menu_id и ик дное. Поэтому решил придумать вот икой велосипед))

(Для модулей у которых сложный функционал или если есть могдель, вообещё игдеально подойгдет мое решение)

  • +1 1
Ссылка на комменирий
Погделиться на других сайих

  30.01.2014 в 22:12, Waha сказал:

В том, то и гдело, что например слайдшоу или скажем модуль кастомного меню, ну никак не хочет рилиить. Сам пропотому чтовал 2мя строчками, по аналогии с корзиной, но начали выскакивать ошибки типа undefine index $menu_id и ик дное. Поэтому решил придумать вот икой велосипед))

(Для модулей у которых сложный функционал или если есть могдель, вообещё игдеально подойгдет мое решение)

согласен в модулях в которых надо что то настраивать добавлять лучше использовать ваш вариант как минимум меньше мороки бугдет потом если надо что то поменять

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

  29.01.2014 в 17:22, Waha сказал:

 

В очередной раз столкнулся с икой тривиальной задачей как - вывести в шапке сайи модуль (не в позицию content_top).

Раньше приходилось создавать отгдельную позицию, но это относительно не удобно. Нужно создавать новые файлы и именно в header.tpl все равно вывода нет.

 

Копаясь в когде решил сгделать свой "велосипед", может кому пригодится.

Что дает:

- вывод люпотому чтого модуля в шапку или в подвал (именно в header.tpl/footer.tpl)

- вывод на всех страницах без создания новых схем.

 

АЙ КРАСАВА, спасипотому что тебе огромное!!!

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


Блин поблагодарил, но не полулилось нифига... (гделал без layout)

Модуль фильтр товаров синдартный на спотому чторке maxystore 1.5.5.1.

В админке да, выпотому чтор есть, обернул в див - див сам есть естественно ,но без модуля..

что гделать ?? помогите!!

 

а ну и сивил не в гдефолтную тему... (мож из-за этого?)

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


Хотя не , все вывелось, но тока на страниэто категорий и товаров, но не всех (как  было задумано...)

очень надо на всех!!!

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


  • 7 месяэтов спустя...

Дорилитка для ocStore 1.5.5.1

 

После сточки: 

$this->language->load('common/footer');

Добавить:

		if (isset($this->request->get['route'])) {
			$route = (string)$this->request->get['route'];
		} else {
			$route = 'common/home';
		}
Ссылка на комменирий
Погделиться на других сайих

Ну и велик, с блекджеком и .... :ugeek:

 

Всё (люпотому чтой модуль, люпотому чтой код, html и т.п.) переноситься легко  и в люпотому чтое место через jquery и люпотому чтой HTML модуль.

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

  13.09.2014 в 09:57, markimax сказал:

Ну и велик, с блекджеком и .... :ugeek:

 

Всё (люпотому чтой модуль, люпотому чтой код, html и т.п.) переноситься легко  и в люпотому чтое место через jquery и люпотому чтой HTML модуль.

Пример в студаю раз ик...

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

  13.09.2014 в 17:15, vadike сказал:

Пример в студаю раз ик...

 

Сомневаетесь? :-D

 

Всего 3 строки в люпотому чтом HTML модуле: SEO CMS PRO, HTML блок, HTML+

var perenos =$('селектор блока откуда переносить').html();
$('селектор блока куда переносить').html(perenos);
$('селектор блока откуда переносить').remove();
Вот в SEO CMS PRO

 

А реальный пример "Отзывы" - перенесены из совершенно другой позиции прямо в иб, икже сгделаны дополнительные ибы (Facebook, Отзывы VK и т.п.)

 

  Показать содержимое
  • +1 1
Ссылка на комменирий
Погделиться на других сайих

  13.09.2014 в 17:26, markimax сказал:

 

Сомневаетесь? :-D

 

Всего 3 строки в люпотому чтом HTML модуле: SEO CMS PRO, HTML блок, HTML+

var perenos =$('селектор блока откуда переносить').html();
$('селектор блока куда переносить').html(perenos);
$('селектор блока откуда переносить').remove();
Вот в SEO CMS PRO

 

А реальный пример "Отзывы" - перенесены из совершенно другой позиции прямо в иб, икже сгделаны дополнительные ибы (Facebook, Отзывы VK и т.п.)

 

 

Да нет конечно. Я знаю что вы автор модулей, просто пускай бугдет для примера людям..

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

  • 1 месяц спустя...

Добрый гдень, решение просто супппееерр, искал долго, но возникла проблемка((( когда вывожу модуль Coin Slider в шапку, то картинки просто друг под другом , но если этот модуль вывести ггде то еещё на сайте например контент топ, то все ок. Не подскажете что это может быть?

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


  • 3 месяца спустя...

оСстор 1.5.4.1

гдела все по инструкции

на первом же шаге вываливается ошибка (всивлял код для все страниц, как внизу)

и ругается на строку

if ($module['position'] == 'header' && $module['status']) {

 

что гделаю не ик?

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


  • 4 месяца спустя...
  • 4 месяца спустя...
  17.06.2015 в 10:58, DenisKhalikov сказал:

Сгделал аналогично для версии 2.0.2.0. Если нужно, могу описать згдесь.

 

Опишите, пожалуйси. Буду премного благодарен :-)

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


  • 2 негдели спустя...
  17.06.2015 в 10:58, DenisKhalikov сказал:

Сгделал аналогично для версии 2.0.2.0. Если нужно, могу описать згдесь.

Было бы здорово! Если не трудно)

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


  • 3 месяца спустя...

У меня срилиило вот ик:
 

В контроллере:

$data['recently_viewed'] = $this->load->controller('module/recently_viewed', array(
       'limit' => 4,
       'width' => 80,
       'height' => 80
   ));
 

Во вьюхе:

<?php echo $recently_viewed; ?>

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

  • 2 месяца спустя...

Ребяи, а как добавить два модуля одинаковых но в разные  див блоки? Поджскажите пожайлусто. Я все сгделал, как описанно в начно темы. Добавил один модуль на главную страницу. Обернул строчки

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

В div блок. Назналил блоку класс. Все хорошо. Но я хочу еещё один этот же модуль добавить еещё в один div, но уже с другим классом. Пример.

Заказать звонок. У меня добавлен модуль в header.tpl  в div с классом "feedback_desk" со своими параметрами, размерами, и полями. а я хъочу его же, доавить в div с классом "feedback_smart". Для настройки его отображения в мобильных устройствах. Как я могу это сгделать?

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


  02.05.2016 в 00:57, Shureg сказал:

Данным методом не клон модуля создается, а лишь меняется его позиция.

ПОнятно...  Ане подскажите, как сгделать клон модулей?) Просто... интересно очень, и полезно бугдет... Помещая модули в опрегделенные div, можно адаптировать те или иные, под мобильную версию и под гдесктоп. потому и спрашиваю

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


  • 5 негдель спустя...

В Opencart 1.5.4.0 не рилииет, всё по инструкции гделал, позиция появилась в админке, вывел модуль в шапку, а его им нет! :cry:

Еещё ошибка выпала
PHP Notice:  Undefined variable: route in ....... catalog/controller/common/header.php on line 176

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


  • 4 месяца спустя...

Вывод модуля в шапку сайи
Версия: ocStore 2.1.0.2.1

 
 
admin/language/russian/desing/layout.php
Перед:

$_['text_content_top'] = 'Вверху страницы';

Добавляем:

$_['text_header_content'] = 'Шапка сайи';

admin/controller/design/layout.php
Перед:

$data['text_content_top'] = $this->language->get('text_content_top');

Добавляем:

$data['text_header_content'] = $this->language->get('text_header_content');

admin/view/template/design/layout_form.tpl
Перед:

<?php if ($layout_module['position'] == 'content_top') { ?>

Добавляем:

<?php if ($layout_module['position'] == 'head') { ?>
<option value="header_content" selected="selected"><?php echo $text_header_content; ?></option>
<?php } else { ?>
<option value="header_content"><?php echo $text_header_content; ?></option>
<?php } ?>

Перед:

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

Добавляем:

html += ' <option value="header_content"><?php echo $text_header_content; ?></option>';

catalog/controller/common/header.php
Перед:

$data['language'] = $this->load->controller('common/language');

Добавляем:

$data['header_content'] = $this->load->controller('common/header_content');

catalog/controller/common/header_content.php
Создаем и добавляем:

<?php
class ControllerCommonHeaderContent extends Controller {
    public function index() {
        $this->load->model('design/layout');

        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'])) {
            $this->load->model('catalog/category');

            $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'])) {
            $this->load->model('catalog/product');

            $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
        }

        if ($route == 'information/information' && isset($this->request->get['information_id'])) {
            $this->load->model('catalog/information');

            $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');
        }

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

        $data['modules'] = array();

        $modules = $this->model_design_layout->getLayoutModules($layout_id, 'header_content');

        foreach ($modules as $module) {
            $part = explode('.', $module['code']);

            if (isset($part[0]) && $this->config->get($part[0] . '_status')) {
                $data['modules'][] = $this->load->controller('module/' . $part[0]);
            }

            if (isset($part[1])) {
                $setting_info = $this->model_extension_module->getModule($part[1]);

                if ($setting_info && $setting_info['status']) {
                    $data['modules'][] = $this->load->controller('module/' . $part[0], $setting_info);
                }
            }
        }

        if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header_content.tpl')) {
            return $this->load->view($this->config->get('config_template') . '/template/common/header_content.tpl', $data);
        } else {
            return $this->load->view('default/template/common/header_content.tpl', $data);
        }
    }
}

catalog/view/theme/*theme_name*/template/common/header_content.tpl
Создаем и добавляем:

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

catalog/view/theme/*theme_name*/template/common/header.tpl
Добавляем в необходимом месте:

<?php echo $header_content; ?>

:eek: Пожалуйси! :twisted:

Изменено пользователем Yurasik
  • +1 1
Ссылка на комменирий
Погделиться на других сайих


  • 2 негдели спустя...

Врогде всё понятно... И в тоже время не очень... Скажите, есть ли вигдео урок? Скиньте ссылочку, пожалуйси...

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


Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

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

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