1

Тема: Альтернативные баннеры Opencart 2

Иногда бывает необходимость кроме стандартных баннеров, существующих в Опенкарт 2 по умолчанию, добавить баннеры в виде HTML кода, javascript или любого другого формата. Это может пригодиться, например, при установке рекламных блоков Google AdSense, партнерских баннеров и т.д.

Добавляем в таблицу banner_image дополнительное поле code с типом данных TEXT.

Открываем /admin/model/design/banner.php
Ищем:

                $this->db->query("INSERT INTO " . DB_PREFIX . "banner_image SET banner_id = '" . (int)$banner_id . "', link = '" .  $this->db->escape($banner_image['link']) . "', image = '" .  $this->db->escape($banner_image['image']) . "', sort_order = '" . (int)$banner_image['sort_order'] . "'");

Меняем на:

                $this->db->query("INSERT INTO " . DB_PREFIX . "banner_image SET banner_id = '" . (int)$banner_id . "', link = '" .  $this->db->escape($banner_image['link']) . "', image = '" .  $this->db->escape($banner_image['image']) . "', sort_order = '" . (int)$banner_image['sort_order'] . "', code = '" .  $this->db->escape($banner_image['code']) . "'");

Замену, указанную выше, необходимо проделать 2 раза (для функции addBanner() и для editBanner()).

Ищем:

            $banner_image_data[] = array(
                'banner_image_description' => $banner_image_description_data,
                'link'                     => $banner_image['link'],
                'image'                    => $banner_image['image'],
                'sort_order'               => $banner_image['sort_order']
            );

Меняем на :

            $banner_image_data[] = array(
                'banner_image_description' => $banner_image_description_data,
                'link'                     => $banner_image['link'],
                'image'                    => $banner_image['image'],
                'sort_order'               => $banner_image['sort_order'],
                'code'                     => $banner_image['code']
            );

Открываем /admin/language/russian/design/banner.php
Ищем:

$_['text_default']       = 'По умолчанию';

Ниже добавляем:

$_['text_empty']      = 'Очистить поле';

Ищем:

$_['entry_sort_order']   = 'Порядок сортировки';

Ниже добавить:

$_['entry_code']         = 'Код HTML:';

В самый конец файла добавляем:

// Button
$_['button_code']         = 'Код HTML';
$_['button_image']         = 'Изображение';

Открываем /admin/controller/design/banner.php
Ищем:

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

Ниже добавить:

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

Ищем:

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

Ниже добавить:

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

Ищем:

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

Ниже добавить:

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

Ищем:

            $data['banner_images'][] = array(
                'banner_image_description' => $banner_image['banner_image_description'],
                'link'                     => $banner_image['link'],
                'image'                    => $image,
                'thumb'                    => $this->model_tool_image->resize($thumb, 100, 100),
                'sort_order'               => $banner_image['sort_order']
            );

Меняем на:

            $data['banner_images'][] = array(
                'banner_image_description' => $banner_image['banner_image_description'],
                'link'                     => $banner_image['link'],
                'image'                    => $image,
                'thumb'                    => $this->model_tool_image->resize($thumb, 100, 100),
                'sort_order'               => $banner_image['sort_order'],
                'code'                     => $banner_image['code']
            );

Открываем /catalog/controller/module/banner.php
Ищем:

        foreach ($results as $result) {
            if (is_file(DIR_IMAGE . $result['image'])) {
                $data['banners'][] = array(
                    'title' => $result['title'],
                    'link'  => $result['link'],
                    'image' => $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height'])
                );
            }
        }

Меняем на:

        foreach ($results as $result) {
                if (!empty($result['code'])) {
                    $data['banners'][] = array(
                        'code' => $result['code']
                    );
                } elseif (is_file(DIR_IMAGE . $result['image'])) {
                    $data['banners'][] = array(
                        'title' => $result['title'],
                        'link'  => $result['link'],
                        'image' => $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height'])
                    );
                }
        }

Поделиться

2

Re: Альтернативные баннеры Opencart 2

Открываем /catalog/view/theme/default/template/module/banner.tpl
Ищем:

<?php if ($banner['link']) { ?>

Меняем на:

      <?php if (!empty($banner['code'])) { ?>
        <?php echo htmlspecialchars_decode($banner['code']); ?>
        <?php } elseif ($banner['link']) { ?>

Открываем /admin/view/template/design/banner_form.tpl ... и меняем его содержимое, ориентируюсь на изменения, взятые из файла banner_form_new.tpl, скаченного по ссылке ниже. Или, проще, полностью меняем старый на новый, переименовав последний в banner_form.tpl


P.S. Все изменения делались на файлах опенкарт версии 2.0.1.1

Post's attachments

Attachment icon banner_form_new.tpl 10.63 kb, 81 downloads since 2016-01-24 

Поделиться

3

Re: Альтернативные баннеры Opencart 2

Порядок работы с новым модулем "Баннеры":

1. Добавляем имя нового баннера и его заголовок. Обязательно сохраняем форму с помощью кнопки "Сохранить".
2. Выбираем для редактирования  только что сохраненный баннер. Переключаемся на HTML-вариант баннера с помощью кнопки-переключателя в правой части шапки баннеров.
3. Заносим в поле "Код HTML:" соответствующий код баннера.
4. Сохраняем.

ВНИМАНИЕ! Сначала необходимо создать обычный тип баннера, введя его имя и заголовок и сохранить. А затем следует отредактировать его уже для HTML-варианта.

Поделиться

4

Re: Альтернативные баннеры Opencart 2

Когда сохраняю созданый баннер с Название и заголовком, то выбивает кучу ошибок. Версия 2.3.0.2 Не подскажите, что нужно поправить?

Сроки кода с 378 по 418 включительно, на которые указывают ошибки

if (is_file(DIR_IMAGE . $banner_image['image'])) {
                    $image = $banner_image['image'];
                    $thumb = $banner_image['image'];
                } else {
                    $image = '';
                    $thumb = 'no_image.png';
                }

                $data['banner_images'][$key][] = array(
                    'title'      => $banner_image['title'],
                    'link'       => $banner_image['link'],
                    'image'      => $image,
                    'thumb'      => $this->model_tool_image->resize($thumb, 100, 100),
                    'sort_order' => $banner_image['sort_order'],
                    'code'       => $banner_image['code']
                );
            }
        }

        $data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100);

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

        $this->response->setOutput($this->load->view('design/banner_form', $data));
    }

    protected function validateForm() {
        if (!$this->user->hasPermission('modify', 'design/banner')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 64)) {
            $this->error['name'] = $this->language->get('error_name');
        }

        if (isset($this->request->post['banner_image'])) {
            foreach ($this->request->post['banner_image'] as $language_id => $value) {
                foreach ($value as $banner_image_id => $banner_image) {
                    if ((utf8_strlen($banner_image['title']) < 2) || (utf8_strlen($banner_image['title']) > 64)) {

Поделиться

5

Re: Альтернативные баннеры Opencart 2

Попробуйте в измененном banner_form.tpl  заменить все вхождения

banner_image_description

на

banner_image

(их четыре)

вот это место:

<input type="text" name="banner_image[<?php echo $image_row; ?>][banner_image_description][<?php echo $language['language_id']; ?>][title]" value="<?php echo isset($banner_image['banner_image_description'][$language['language_id']]) ? $banner_image['banner_image_description'][$language['language_id']]['title'] : ''; ?>" placeholder="<?php echo $entry_title; ?>" class="form-control" />
                  

и здесь:

    html += '      <span class="input-group-addon"><img src="view/image/flags/<?php echo $language['image']; ?>" title="<?php echo $language['name']; ?>" /></span><input type="text" name="banner_image[' + image_row + '][banner_image_description][<?php echo $language['language_id']; ?>][title]" value="" placeholder="<?php echo $entry_title; ?>" class="form-control" />';

Поделиться

6

Re: Альтернативные баннеры Opencart 2

Все равно та же ошибка

Notice: Undefined index: title in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 418Warning: Illegal string offset 'title' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 418Warning: Illegal string offset 'title' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 418Warning: Illegal string offset 'title' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 418Notice: Undefined index: image in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 378Notice: Undefined index: title in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 387Notice: Undefined index: link in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 388Notice: Undefined index: sort_order in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 391Notice: Undefined index: code in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 392Warning: Illegal string offset 'image' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 378Warning: Illegal string offset 'title' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 387Warning: Illegal string offset 'link' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 388Warning: Illegal string offset 'sort_order' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 391Warning: Illegal string offset 'code' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 392Warning: Illegal string offset 'image' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 378Warning: Illegal string offset 'title' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 387Warning: Illegal string offset 'link' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 388Warning: Illegal string offset 'sort_order' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 391Warning: Illegal string offset 'code' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 392Warning: Illegal string offset 'image' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 378Warning: Illegal string offset 'title' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 387Warning: Illegal string offset 'link' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 388Warning: Illegal string offset 'sort_order' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 391Warning: Illegal string offset 'code' in C:\xampp\htdocs\demo.print-art.com\admin\controller\design\banner.php on line 392

Поделиться

7 (2017-11-13 23:57:33 отредактировано SV)

Re: Альтернативные баннеры Opencart 2

Хорошо. Я попробую у себя на локалке или на сервере установить 2.3.0.2 и отпишусь...

________________

UPD: Изменения в файлах, которые были описаны выше подходят и для 2.3.0.2 (если править разумно, а не просто копировать один к одному. Код версий отличается для участков кода некоторых файлов, но вы klasttuft, как я понял из разговора в личке, редактировали правильно ). Файл banner_form.tpl пришлось править родной. От версии 2.0.1.1 не подойдет(легче родной отредактировать). Новый файл для 2.3.0.2 ниже.

Post's attachments

Attachment icon banner_form_new.tpl 10.53 kb, 14 downloads since 2017-11-14 

Поделиться

8

Re: Альтернативные баннеры Opencart 2

klasttuft пишет:

    Большое спасибо, сделал, ошибки не выскакивают.
    Но теперь не могу понять, почему на банере не появляется текст. Я Сначала сделал новый баннер, написал заголовок, добавил картинку и сохранил. Потом открыл редактировать, переключил на HTML, ввел код, добавил стили в css, а на картинке так ничего и не появилось. И вижу, что клас не появляется в банере. Не подскажите в чем может быть дело?

Для альтернативного баннера не надо  в модуле добавлять картинку. Если для баннера в базе записан код, то все остальное игнорируется. Если вы при редактировании баннера занесли код, то он превращается в альтернативный. Убрали код - баннер превратился в обычный. Ссылки на картинки, стили css, код js - это все добавляется непосредственно в код альтернативного баннера.

Попробуйте поэкспериментировать с баннерами, которые поставляются с опенкарт по умолчанию

Поделиться