Opencart, добавляем настройки в панель администратора
Основной задачей любой CMS (в том числе и OpenCart) заключается в том, что с помощью нее, мы управляем содержимым сайта, не погружаясь в его html код. И это правильно. Но, мной было замечено, что я сам (и я думаю многие) нарушают этот принцип и все таки оставляют статичное содержимое в своих шаблонах. Например есть сайт:
Посмотрим под левый столбец “Категории“, там мы увидим логотип “Get Special offer Upto 20% off“. Иметь тег img с статичной src я считаю не правильно. Использовать модуль “Баннер” для вывода одной картинки тоже не логично, ведь в футере могут быть рекламные баннеры и модуль нужен будет там. Или еще пример, допустим нам надо вывести дату окончания акции под данным логотипом:
Вставлять в шаблон просто статичный текст, это не правильно. Выход я вижу один, добавить новые опции в раздел настройки в панели администратора и от туда править. Итак к делу:
Добавляем дополнительные настройки в панель администратора
1. Добавляем возможность управлять изображением через панель администратора
Добавлять новые опции будем в Система->Настройки
Файл представления отвечающий за вывод настроек располагается в следующем месте admin\view\template\setting\setting.tpl.
Добавим новую опцию в нужную нам закладку
Технически это выглядит как добавление новой строки <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> | <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.)
Все, теперь в админпанели появиться возможность загружать и изменять изображения
которое будет отображаться под колонкой 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)
Получилось следующие:
И это все)