Баннер для категории

Тема в разделе "Общие вопросы", создана пользователем DiMoss, 7 апр 2016.

  1. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    Доброго дня! Сделал отдельный загрузчик для баннера категорий. По дефолту выводится изображение категории, что весьма неудобно, если есть необходимость выводить большое изображение в качестве баннера.

    1) Для начала в БД в таблице category создаём столбец banner (Тип - varchar, Длина/Значение - 255, По умолчанию - Null)

    2) В контроллере catalog/controller/product/category.php меняем...
    PHP:
    if ($category_info['image']) {
      
    $data['thumb'] = $this->model_tool_image->resize($category_info['banner'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
    } else {
      
    $data['thumb'] = '';
    }
    на...
    PHP:
    if ($category_info['banner']) {
      
    $data['thumb'] = $this->model_tool_image->resize($category_info['banner'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
    } else {
      
    $data['thumb'] = '';
    }
    3) Добавляем загрузчик баннера в настройках категории в админке - admin/view/template/catalog/category_form.tpl
    После...
    Код:
    <div class="form-group">
      <label class="col-sm-2 control-label" for="input-image"><?php echo $entry_image; ?></label>
      <div class="col-sm-10"><a href="" id="thumb-image" data-toggle="image" class="img-thumbnail"><img src="<?php echo $thumb; ?>" alt="" title="" data-placeholder="<?php echo $placeholder; ?>" /></a>
        <input type="hidden" name="image" value="<?php echo $image; ?>" id="input-image" />
      </div>
    </div>
    
    Добавляем...
    Код:
    <div class="form-group">
      <label class="col-sm-2 control-label" for="input-banner"><?php echo $entry_banner; ?></label>
      <div class="col-sm-10"><a href="" id="thumb-banner" data-toggle="image" class="img-thumbnail"><img src="<?php echo $category_banner; ?>" alt="" title="" data-placeholder="<?php echo $placeholder; ?>" /></a>
        <input type="hidden" name="banner" value="<?php echo $banner; ?>" id="input-banner" />
      </div>
    </div>
    
    4) Добавим перевод в файле admin/language/russian/catalog/category.php
    После...
    PHP:
    $_['entry_image']              = 'Изображение категории';
    Добавляем...
    PHP:
    $_['entry_banner']             = 'Баннер категории';
    5) Заходим в контроллер admin/controller/catalog/category.php
    5.1 После...
    PHP:
    $data['entry_image'] = $this->language->get('entry_image');
    Добавляем...
    PHP:
    $data['entry_banner'] = $this->language->get('entry_banner');
    5.2 После...
    PHP:
    if (isset($this->request->post['image'])) {
      
    $data['image'] = $this->request->post['image'];
    } elseif (!empty(
    $category_info)) {
      
    $data['image'] = $category_info['image'];
    } else {
      
    $data['image'] = '';
    }
    Добавляем...
    PHP:
    if (isset($this->request->post['banner'])) {
      
    $data['banner'] = $this->request->post['banner'];
    } elseif (!empty(
    $category_info)) {
      
    $data['banner'] = $category_info['banner'];
    } else {
      
    $data['banner'] = '';
    }
    5.3 После...
    PHP:
    if (isset($this->request->post['image']) && is_file(DIR_IMAGE $this->request->post['image'])) {
      
    $data['thumb'] = $this->model_tool_image->resize($this->request->post['image'], 100100);
    } elseif (!empty(
    $category_info) && is_file(DIR_IMAGE $category_info['image'])) {
      
    $data['thumb'] = $this->model_tool_image->resize($category_info['image'], 100100);
    } else {
      
    $data['thumb'] = $this->model_tool_image->resize('no_image.png'100100);
    }
    Добавляем...
    PHP:
    if (isset($this->request->post['banner']) && is_file(DIR_IMAGE $this->request->post['banner'])) {
      
    $data['category_banner'] = $this->model_tool_image->resize($this->request->post['banner'], 100100);
    } elseif (!empty(
    $category_info) && is_file(DIR_IMAGE $category_info['banner'])) {
      
    $data['category_banner'] = $this->model_tool_image->resize($category_info['banner'], 100100);
    } else {
      
    $data['category_banner'] = $this->model_tool_image->resize('no_image.png'100100);
    }
    6) Заходим в модель admin/model/catalog/category.php
    В функции addCategory($data) после...
    PHP:
    if (isset($data['image'])) {
      
    $this->db->query("UPDATE " DB_PREFIX "category SET image = '" $this->db->escape($data['image']) . "' WHERE category_id = '" . (int)$category_id "'");
    }
    Добавляем...
    PHP:
    if (isset($data['banner'])) {
      
    $this->db->query("UPDATE " DB_PREFIX "category SET banner = '" $this->db->escape($data['banner']) . "' WHERE category_id = '" . (int)$category_id "'");
    }
    Тоже самое делаем чуть ниже в функции editCategory($category_id, $data).

    !!!!!!!Обновляем модификаторы!!!!!!

    В итоге имеем следующее:

    - настройка категорий в админке
    Снимок.JPG

    - витрина
    Снимок1.JPG

    Размер баннера прописываем в настройках изображений! При необходимости правим стили.
     
    Последнее редактирование: 7 апр 2016
    RoS и Romans нравится это.
  2. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    а раскройте сокровенный смысл того, почему все перечисленное не сделано модификатором???
     
  3. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    @ambalocha69 честно говоря ни разу не создавал модификаторы. Хотя я полагаю, что это практически тоже самое, что и написать подобный пост. Только синтаксис другой :)
    Ну и на тот момент, когда я за это взялся, понятия не имел, что и где нужно править. Поэтому делал изменения напрямую в коде!

    Завтра может и решусь сделать модификатор.
     
  4. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    я это делал через vqmod 2 года назад для 1.5.х.
    + ссылка к каждому банеру
    + тайтл к каждому банеру
    + выбор режима перехода по ссылке - обычный\в новом окне
    за 2 года никого это не заинтересовало - 0 продаж :)
     
  5. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    Я в общем то решил свою проблему под собственный сайт и решил поделится с людом. Писать модификаторы на продажу даже и в мыслях не было.
    Странно конечно что это никому не нужно! Баннеры в категориях вроде бы неплохое решение в плане дизайна.
    Но меня очень смутило решение по дефолту - вывели баннер, который есть ничто иное как изображение категории, но при этом дали возможность управлять размером.
    В теории оно может и норм, а вот на практике одно с другим не вяжется.
     
  6. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    Вот это кстати отличное решение если есть необходимость рекламировать конкретный товар в категориях. И неплохо было бы сделать слайдшоу. т.е. сделать возможность загружать несколько баннеров.
    Тут наверное стоит глянуть как сделан модуль slideshow.
     
  7. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    большинство покупает готовые шаблоны и не парится. шаг вправо\шаг влево для них - это подвиг! чтобы поменять цвет фона или какой нибудь отступ ищут фрилансера :)
     
  8. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    а кто мешает вставить в категорию обычный (штатный) модуль Слайдшоу???
     
  9. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    @ambalocha69 , так ведь шаблон для всех категорий один. А мне нужно, чтоб у каждой категории были свои собственные баннеры.
    Разве что можно доделать сам модуль - в настройках сделать возможность выбора в какой категории отображать. Либо в настройках категории выбирать из уже созданных слайдшоу. Правда я слабо представляю как это реализовать.
     
  10. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    в схемах создаешь новую типа "РАЗНОЕ" как клон схемы категории и модуль слайдшоу привязываешь к ней. не очень удобно - потребуется создать свои схемы для каждой категории. но зато никакого кодинга.
    либо влезать в настройки слайдшоу (делать клон) и добавлять поле выбора категории - но здесь другая Ж: в схему категории придется добавить хренову тучу слайдшоу
     
  11. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    Мне кажется, что самым верным решением будет создание дополнительной вкладки в настройках категории - Слайдшоу.
    Клонировать туда модуль штатный Слайдшоу, только дополнить в БД столбец category_id, по которому собственно и будет происходить выборка необходимых изображений.
     
  12. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    а не проще будет сделать просто выбор готового банера из списка существующих?
     
  13. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    Ну вроде как хочется не только как проще, но и чтоб всё было логично и на своих местах. Но это видимо тараканы в моей голове)))).
     
  14. ambalocha69

    ambalocha69 Пользователь

    Сообщения:
    61
    Симпатии:
    12
    удачи :)
     
  15. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    240
    Всё же тараканов "потравил" :)

    Начал с того, что вывел существующие Баннеры в настройки категории
    Безымянный.png
    Создал в БД в таблице category столбец slideshow_id.

    Я так понимаю, что теперь при сохранении категории, если выбрано то или иное слайдшоу (т.е. баннер), необходимо передать в БД id этого слайдшоу, и уже в контроллере каталога извлекать его из базы.
     
  16. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.472
    Симпатии:
    822
    Все верно. Но смысл в инструкциях есть.
    1. Заставляет читателя немного думать и разбираться в коде, переменных итд.
    2. Дает толчок тем людям, которые желают разобраться в коде.
    3. Дают приблизительную оценку стоимости работ (каждый пункт нужно придумать, проверить, протестировать)
    В случаи с модификатором, это решение для "чайников" и как мне кажется хорошо подталкивает к платным услугам )
     
  17. Juzosif

    Juzosif Активный пользователь

    Сообщения:
    263
    Симпатии:
    20
    Хотел создать модификатор, но в данном файле нет, кода:
    PHP:
    if ($category_info['image']) {
      
    $data['thumb'] = $this->model_tool_image->resize($category_info['banner'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
    } else {
      
    $data['thumb'] = '';
    }
    Есть такой код:
    PHP:
    if ($category_info['image']) {
                    
    $data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get($this->config->get('config_theme') . '_image_category_width'), $this->config->get($this->config->get('config_theme') . '_image_category_height'));
                } else {
                    
    $data['thumb'] = '';
                }
    Может опечатка?
     
  18. Juzosif

    Juzosif Активный пользователь

    Сообщения:
    263
    Симпатии:
    20
    Аналогично, только вот в Вашем случае Вы заменяете главную категорию на баннер.
    Я добавил dopimages

    В админке вижу в БД вижу что добавлял а вот на странице категории нет.
    Вот кусок код со страницы category.tpl
    HTML:
          <?php if ($thumb || $description) { ?>
          <div class="category-info">
            <?php if ($thumb) { ?>
            <div class="image"><img width="<?php echo $this->journal2->settings->get('config_image_width'); ?>" height="<?php echo $this->journal2->settings->get('config_image_height'); ?>" src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" /> <img src="<?php echo $category_dopimages; ?>" alt="" title="" data-placeholder="<?php echo $placeholder; ?>" /></div>
            <?php } ?>
            <?php if ($description) { ?>
            <?php echo $description; ?>
            <?php } ?>
          </div>
          <?php } ?>
    Может знаете как правильно ввести рядом с главной картинки, доп картинку.