Opencart - Добавляем Настройки В Панель Администратора

Тема в разделе "Модули и дополнения", создана пользователем admin, 6 ноя 2016.

  1. TopicStarter Overlay
    Online

    admin Команда форума Администратор

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

    16.jpg

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

    21.jpg

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

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

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

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



    31.jpg

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

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

    41.jpg

    Технически это выглядит как добавление новой строки <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="<?phpecho$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="<?phpecho$iconoffer;?>"
    alt=""id="thumb-logo2"/>
    <input type="hidden"name="config_iconoffer"
    value="<?phpecho$config_iconoffer;?>"id="logo2"/>
    <br/>
    <aonclick="image_upload('logo2', 'thumb-logo2');">
    <?phpecho$text_browse;?></a>&nbsp;&nbsp;|&nbsp;&nbsp;
    <aonclick="$('#thumb-logo2').attr('src','<?phpecho$no_image;?>');
    $('#logo2').attr('value','');"><?phpecho$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.jpg
    которое будет отображаться под колонкой Categories.

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

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

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

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

    <div>
    <img src="<?phpecho$iconoffer;?>"title="">
    </div>
    строку вывода текст

    Код:
    <?phpecho$dateoffer;?>
    Т.е. получиться должно:

    Код:
    <div>
      <img src="<?phpecho$iconoffer;?>"title="">
      <?phpecho$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="<?phpecho$config_dateoffer;?>"size="40"/>
    <?phpif($error_name){?>
      <span class="error"><?phpecho$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.jpg

    71.jpg

    И это все)
     
  2. Offline

    Serega PS

    Сообщения:
    28
    Симпатии:
    7
    Репутация:
    0
    уловил не всю суть да и читать было в лом! не проще тамер было сделать? да и что за пример блин мы живет на версии 2 1 а ты все на старой 1 5
    админ адаптируйся под нововедения))))
     
  3. TopicStarter Overlay
    Online

    admin Команда форума Администратор

    Сообщения:
    1.278
    Симпатии:
    6.793
    Репутация:
    69
    не все еще перешли на ветку 2.x, многим и это будет интересно. как пример самое оно.
     
  4. Offline

    Serega PS

    Сообщения:
    28
    Симпатии:
    7
    Репутация:
    0
    как сделать переход без траты любителям на новую версу?)
     
  5. TopicStarter Overlay
    Online

    admin Команда форума Администратор

    Сообщения:
    1.278
    Симпатии:
    6.793
    Репутация:
    69
    Скоро думаю будет мануальчик.
     
  6. Offline

    Serega PS

    Сообщения:
    28
    Симпатии:
    7
    Репутация:
    0
    ну мануал 1 там и накосячить могут не зная бд!
    ну если что пусть пишут мне, беру за переезд с любой версы на нужную по 2500р только переезд бд!
    а модули и тд уже отдельный разговор!