Основной задачей любой CMS (в том числе и OpenCart) заключается в том, что с  помощью нее, мы управляем содержимым сайта, не погружаясь в его html код. И это правильно. Но, мной было замечено, что я сам (и я думаю многие) нарушают этот принцип и все таки оставляют статичное содержимое в своих шаблонах. Например есть сайт:

16

Посмотрим под левый столбец “Категории“, там мы увидим логотип “Get Special offer Upto 20% off“. Иметь тег img с статичной src я считаю не правильно. Использовать модуль “Баннер” для вывода одной картинки тоже не логично, ведь в футере могут быть рекламные баннеры и модуль нужен будет там. Или еще пример, допустим нам надо вывести дату окончания акции под данным логотипом:

21

Вставлять в шаблон просто статичный текст, это не правильно. Выход я вижу один, добавить новые опции в раздел настройки в панели администратора и от туда править. Итак к делу:

 

 

Добавляем дополнительные настройки в панель администратора

1. Добавляем возможность управлять изображением через панель администратора

 

Добавлять новые опции будем в Система->Настройки

 

Файл представления отвечающий за вывод настроек располагается в следующем месте admin\view\template\setting\setting.tpl.31

Добавим новую опцию в нужную нам закладку

41

Технически это выглядит как добавление новой строки <tr>..</tr> в таблицу файла setting.tpl, каждая таблица распологается в определенном div

      • закладка «Общие» это div с class=”tab-general”.
      • закладка «Витрина» это div с class=”tab-store
      • закладка «Локализация» это div с class=”tab-local
      • закладка «Опции» это div с class=”tab-option
      • закладка «Изображения» это div с class=”tab-image
      • закладка «Почта» это div с class=”tab-mail
      • закладка «Fraund» это div с class=”tab-fraud
      • закладка «СМС это div с class=”tab-sms
      •  закладка «Сервер» это т div с class=”tab-server

Как пример добавим возможность изменять изображения логотипа “Get Special offer Upto 20% off” как на примере выше.

Итак, колонка Categories это у нас стилиизмененный модуль «Категории» шаблона default, его положение можно изменять (переносить на правую или левую сторону сайта). Разместим наше изображение в самом низу модуля «Категории», это позволит картинки перемещаться со всем столбцом при изменение настроек его положения.

Откроем файл представления модуля по следующему пути catalog\view\theme\MyTemplate\template\module\category.tpl

В самом низу добавим вывод картинки

<div>
   <img src="/<?php echo $iconoffer; ?>" title="">
</div>

Но системе пока ничего не известно о файле $iconoffer, откроем контроллер модуля «Категории», т.е. файл по адресу catalog\controller\module\category.php.

Добавим в тело метода protected function index($setting) {.. следующие строки

 

if (
		isset($this->request->server['HTTPS']) && 
		(
			($this->request->server['HTTPS'] == 'on') ||
			($this->request->server['HTTPS'] == '1')
		)
	) 
{
	$server = HTTPS_IMAGE;
} 
else 
{
	$server = HTTP_IMAGE;
}	
if (
		$this->config->get('config_iconoffer') && 
		file_exists(DIR_IMAGE . $this->config->get('config_iconoffer'))
	) 
{
	$this->data['iconoffer'] = $server . $this->config->get('config_iconoffer');
} 
else 
{
	$this->data['iconoffer'] = '';
}

 

 

(данный код сделан по образцу контролера header.php для переменной $logo, изменено только название переменной с $logo на $iconoffer и $config_logo на config_$iconoffer)

Теперь у нас есть вывод изображения в модуле категория, но нет возможности управлять им – добавлять/удалять картинку, добавим эту возможность в панель администратора, отредактируем файл admin\view\template\setting\setting.tpl отвечающий за вывод настроек в админпанели (Система->Настройки->Изменить).

Добавим следующий код

<tr>
   <td>Логотип спецпредложение (только для MyTempleate)</td>
   <td><div class="image"><img src="/<?php echo $iconoffer; ?>" 
    alt="" id="thumb-logo2" />
    <input type="hidden" name="config_iconoffer"
    value="<?php echo $config_iconoffer; ?>" id="logo2" />
    <br />
    <a onclick="image_upload('logo2', 'thumb-logo2');">
    <?php echo $text_browse; ?></a>&nbsp;&nbsp;|&nbsp;&nbsp;
    <a onclick="$('#thumb-logo2').attr('src', '<?php echo $no_image; ?>');
    $('#logo2').attr('value', '');"><?php echo $text_clear; ?></a></div></td>
</tr>

в нужную нам закладку, например в «Общие» (см. список div с названием классов выше), т.е. после следующийх строк

<div id="tab-general">
    <table class="form">
        …

(данный код <tr>..</tr> сделан по образцу как в закладке «Изобржения» (т.е. как в div с class=”tab-image”) для логотипа, изменено название переменных с $logo на $iconoffer, $config_logo на $config_iconoffer и thumb-logo, logo, #thumb-logo на thumb-logo2, logo2, #thumb-logo2)

Укажем в контроллере admin\controller\setting\setting.php откуда брать ссылку на изображение и куда посылать информацию в случае его загрузки.

Вставим в тело метода

public function index() {

 

if (isset($this->request->post['config_iconoffer'])) 
{
	$this->data['config_iconoffer'] = $this->request->post['config_iconoffer'];
} 
else 
{
	$this->data['config_iconoffer'] = $this->config->get('config_iconoffer');		
}	
if (
		$this->config->get('config_iconoffer') && 
		file_exists(DIR_IMAGE . $this->config->get('config_iconoffer')) && 
		is_file(DIR_IMAGE . $this->config->get('config_iconoffer'))
	) 
{
	$this->data['iconoffer'] = $this->model_tool_image->resize($this->config->get('config_iconoffer'), 100, 100);		
} 
else 
{
	$this->data['iconoffer'] = $this->model_tool_image->resize('no_image.jpg', 100, 100);
}

 

 

(данный код сделан по образцу как для логотипа в этом же файле, изменены только название переменных с logo на iconoffer и config_logo на config_iconoffer.)

Все, теперь в админпанели появиться возможность загружать и изменять изображения

51

которое будет отображаться под колонкой Categories.

Аналогично, если на сайте нужно вывести какой либо текст и это не название магазина, адрес, телефон и т.п., вообщем что-то что не подходит под уже готовые опции в настройках, значит создадим свою опцию.

 

2. Добавляем возможность редактировать текст через панель администратора

Допустим нам нужно вывести текст под картинкой «спецпредложения» указывающий дату окончания спецпредложения, т.е. нужно вывести текст в модуль «Категории».

Откроем шаблон catalog\view\theme\MyTemplate\template\module\category.tpl и добавим в

 

<div>
     <img src="/<?php echo $iconoffer; ?>" title="">
</div>

cтроку вывода текст

 

<?php echo $dateoffer; ?>

Т.е. получиться должно:

 

<div>
     <img src="/<?php echo $iconoffer; ?>" title="">
     <?php echo $dateoffer; ?>
</div>

Укажем в контроллере модуля catalog\controller\module\category.php откуда брать данные

 

$this->data['dateoffer'] = $this->config->get('config_dateoffer');

 Теперь добавим возможность в панели администратора редактировать текст, правим файл представления настроек admin\view\template\setting\setting.tpl

<tr>
    <td><span class="required">*</span>Дата окончания предложения</td>
    <td><input type="text" name="config_dateoffer" 
    value="<?php echo $config_dateoffer; ?>" size="40" />
    <?php if ($error_name) { ?>
         <span class="error"><?php echo $error_name; ?></span>
   <?php } ?></td>
</tr>

(данный код сделан по образцу как для телефона в этом же файле, изменены только название переменных с config_telephone на config_dateoffer, а $entry_telephone заменено «Дата окончания предложения»(в первой <td>..</td>))

Откроем контроллер настроек admin\controller\setting\setting.php и вставим в тело метода

public function index() { …

if (isset($this->request->post['config_dateoffer'])) {
      $this->data['config_dateoffer'] = $this->request->post['config_dateoffer'];
} else {
      $this->data['config_dateoffer'] = $this->config->get('config_dateoffer');
}

(данный код сделан по образцу как для телефона в этом же файле, изменены только название переменных с config_telephone на config_dateoffer)

Получилось следующие:

61

71

И это все)