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

Позиция модулей


Recommended Posts

Что и куда добавить?

ну вот у нас есть позиции справа слева и на главной

а мне например нада на главной в столбец пустить хтмл модули

в 2 столбца

вижу выход тока через добавление доп позиций модуля.

а как?.........

Надіслати
Поділитися на інших сайтах


в 2 столбца

Стандартными средствами - никак. Можно поигратьс вложенными модулями в html либо назначить id другие и через css позиционировать.
Надіслати
Поділитися на інших сайтах


Стандартными средствами - никак. Можно поигратьс вложенными модулями в html либо назначить id другие и через css позиционировать.

не вложеннные не канают нада через админку

лана пущу в 1 столбец а css задам в самом модуле

спс

Надіслати
Поділитися на інших сайтах


  • 11 months later...

Чего тему так и не развили?

Очень даже интересно. И думаю многим будет полезно.

Стандартная структура шаблона opencart 1.5 такая

<?php echo $header; ?>
<?php echo $column_left; ?><?php echo $column_right; ?>
<div id="content"><?php echo $content_top; ?>
<?php echo $content_bottom; ?>
<?php echo $footer; ?>
Мне понадобился дополнительный <div>, в который хочу чтобы вошло это <?php echo $column_left; ?><?php echo $column_right; ?>

<div id="content"><?php echo $content_top; ?><?php echo $content_bottom; ?>

То есть структура шаблона должна стать такой

<?php echo $header; ?>
<?php echo $contentwrapper; ?>
<?php echo $column_left; ?><?php echo $column_right; ?>
<div id="content"><?php echo $content_top; ?>
<?php echo $content_bottom; ?>
<?php echo $footer; ?>
Создал для $contentwrapper контроллер, отдельно .tpl где указал нужную информацию, которая появилась ниже меню во всю длину шаблона, а уже ниже должна идти колонка слева и весь контент.

Пока что не знаю, где закрыть этот <div id="contentwrapper">

<div id="content"> оказался в <div id="column-left">

Буду рад за помощь. Если сам дойду, отпишусь.

В рисунках показано, как хочу сделать.

Изображение

Надіслати
Поділитися на інших сайтах


Дополняю свои исследования.

Вернул всё к стандартному шаблону OpenCart.

В файле home.tpl поменял структуру как мне нужно, а именно получилось так:

<?php echo $header; ?><div id="contentwrapper"><?php echo $column_left; ?><?php echo $column_right; ?>
<div id="content"><?php echo $content_top; ?>
<?php echo $content_bottom; ?></div></div>
<div id="divAdLeft" style="display:none;"></div>
<div id="divAdRight" style="display:none;"></div>
<div id="hdevider_full"></div>
<?php echo $footer; ?>
Прикол заключается в следующем.

Сейчас в позиции Левая колонка стоит баннер.

Всё размещается красиво.

Поставил себе модуль News/Blog.

Ставлю его тоже в позицию Левая колонка Порядок 2 под баннером.

Тут и начинаются танцы с бубнами.

Весь контент с середины съезжает в левую колонку под блок News/Blog.

<div id="content"> оказывается в <div id="column-left">

<div id="column-left">
		   <div id="content"></div>
</div>
Надіслати
Поділитися на інших сайтах


Спасибо. Тема интересная, но я вопрос уже решил по другому. К стилям шаблона добавил новый див, в который уже вошли все остальные: контент, left, right. Пришлось также поправить все файлы папки template, то есть в моем случае я добавил $contentwrapper во все файлы между $header и $content. Всё работает, получилось. Теперь у меня есть целый блок в длину шаблона между header и content. Если я добавляю колонку слева или справа, она появляется только под этим $contentwrapper

Надіслати
Поділитися на інших сайтах


  • 4 months later...

partizzzzzan привел полезную ссылку. Там все подробно расписано по полочкам. Единственное, там не написано как вставить позицию в header.tpl или другой шаблон. А сделать это просто:

1. Открываем контроллер нужного шаблона (например catalogviewthemephototemplatecommonheader.php

2. Находим (или создаем подключение детенышей и добавляем свою позицию. Получается что-то вроде:

$this->children = array(
'module/cart',
'common/my_new_position'
);
Теперь в шаблоне будет доступна переменная $my_new_position
  • +1 1
Надіслати
Поділитися на інших сайтах

  • 5 months later...

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

Начнем.

Главное что нужно запомнить перед началом добавления, структуру папки по адресу
admin/view/template/module/название.tpl
, каждый шаблон отвечает за вывод модуля. Важно выбрать один необходимый модуль, можно несколько или хоть все. Например шаблон featured.tpl отвечает за вывод рекомендуемых товаров и т.д.

Сейчас по порядку. Пример: Допустим нам нужно вывести модуль слайдера в отдельный блок и назвать его <?php echo $content_slider; ?>

1. Создание контроллера

Нужно создать головной файл с настройками в catalog/controller/common/ с названием content_slider.php в него добавить код:

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

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

обязательно проверьте номера строк: 2 (ControllerCommonContentSlider), 50, 79, 80, 82 в них должны быть имена совпадающие с названием шаблона у меня это content_slider, в дальнейшем при создании новых блоков необязательно копировать весь текст, достаточно поправить строчки с необходимым названием, например content_sale и т.д.

2. Создание шаблона

Далее нам необходимо сделать файл шаблона для вывода модуля в catalog/view/theme/default/template/common/ здесь создаем шаблон с именем который у нас носит контроллер content_slider.tpl с внутренностями

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

3. Объявляем модуль в нужном месте

Теперь необходимо дать понять движку где выводить наш модуль, на главной в хедере или футере. Переходим в catalog/controller/common/название.php для вывода слайдера на главной мне нужен home.php открываю его и дописываю в код

$this->children = array(
		'common/column_left',
		'common/column_right',
		'common/content_top',
		'common/content_bottom',
		'common/footer',
		'common/header',
	);

строчку ’common/content_slider’, (Будьте внимательны, дописывайте код перед футером и хедером. Связано это из за возможных проблем с jQuery!) получится:


$this->children = array(
		'common/column_left',
		'common/column_right',
		'common/content_top',
		'common/content_bottom',
		'common/content_slider',
		'common/footer',
		'common/header'
	);

если Вы добавляете например в футер, то там Вы можете не обнаружить строчку $this->children = array, в этом случает перед $this->render(); добавьте $this->children = array(‘common/content_slider’);

4. Вывод хозяйства в шаблоне

Выводим наш модуль в шаблоне, для этого я в catalog/view/theme/default/template/common/home.tpl добавляю строчку в нужном мне месте

<?php echo $content_slider; ?>

5. Отображение в Админке

Что бы мы могли выбрать нашу новую позицию нам нужно что бы она отображалась в админке, это логично;) тут вспоминаем что было сказано в самом начале о самом важном, выбираем в admin/view/template/module/название.tpl нужный шаблон, у меня это slideshow.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'] == 'content_slider') { ?>
<option value="content_slider" selected="selected">Slider Box</option>
<?php } else { ?>
<option value="content_slider">Slider Box</option>
<?php } ?>

теперь в этом же файле (ниже), ищем строку



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

и добавляем перед ним строку



html += '	  <option value="content_slider">Slider Box</option>';

Все!

Проверено мной - работает!

  • +1 7
Надіслати
Поділитися на інших сайтах


  • 2 months later...
  • 8 months later...
  • 1 month later...

Ya2mama, за это - "(Будьте внимательны, дописывайте код перед футером и хедером. Связано это из за возможных проблем с jQuery!)" - отдельное спасибо! Долго не могла понять, почему слайдшоу не работает в новосозданной позиции. +1

Надіслати
Поділитися на інших сайтах


  • 2 months later...
  • 2 weeks later...

все сделал по инструкции работает отлично.
но пробовал для вывода слайдера на header.tpl добавляю в catalog/controller/common/header.php 

$this->children = array(
'common/content_slider',
'module/language',
'module/currency',
'module/menu',
'module/cart'
);

и в header.tpl

<?php echo $content_slider; ?>

не отображает модуль. пробовал даже все схемы. результат ноль. помогите пжл. 
заранее спасибо.

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...
  • 1 month later...
  • 1 year later...
5. Отображение в Админке

Что бы мы могли выбрать нашу новую позицию нам нужно что бы она отображалась в админке, это логичноwink.png тут вспоминаем что было сказано в самом начале о самом важном, выбираем в admin/view/template/module/название.tpl нужный шаблон, у меня это slideshow.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'] == 'content_slider') { ?>
<option value="content_slider" selected="selected">Slider Box</option>
<?php } else { ?>
<option value="content_slider">Slider Box</option>
<?php } ?>

теперь в этом же файле (ниже), ищем строку



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

и добавляем перед ним строку



html += '	  <option value="content_slider">Slider Box</option>';

 

Получилось до добавления в админку. Добавление в админку наверное требуется актуализировать.  Я использую Opencart 2.0.1.0 и у меня нет в admin/view/template/module/название.tpl кода

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

 

Если кто-то знает, как это делается в 2.0.1.0, напишите плз.

 

Если найду сам - напишу.

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

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

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

Important Information

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