Модуль newsticker - как добавить вывод в header?

Тема в разделе "Модули и дополнения", создана пользователем SoVA23rus, 28 янв 2022.

  1. SoVA23rus

    SoVA23rus Новичок

    Сообщения:
    5
    Симпатии:
    0
    Есть доп.модуль newsticker, который выводит новостные строки, сами строки задаются в настройках модуля, а его положение на странице задается, как обычно, в макетах. Если задать его положение в шапке (Верх страницы в настройках макета) в самом верху, то на главной он отображается хорошо - сразу под header-ом во всю его ширину, потому что на главной в левой и правой колонке ничего не выводится.

    А вот на страницах каталога и некоторых инфостраницах с выводом чего-либо в левой колонке (например, каталога, фильтра, облака тэгов в левой колонке) получается, что модуль новостей отображается под header-ом, но уже не во всю его ширину, а за минусом ширины левой колонки - только на оставшуюся ширину основной части страницы ("Верха страницы"). Получается некрасиво и вообще фу такое.

    Делаю вывод, что для использования всей ширины страницы (чтобы модуль не выравнивался только по "средней" части за минусом боковых колонок), нужно вывод этого модуля перенести из основной части страницы непосредственно в header. А вот тут уже возникают сложности, т.к. я не шибко программист (немного html, чуть-чуть VBA, когда-то малость JS и даже слегонца 1С - а вот php вообще ни разу, только методом научного тыка и пристального взгляда).

    Сперва, по пути наименьшего сопротивления, добавил вывод из шаблона newsticker.tpl в header.tpl, но вскоре понял, что model-view-controller же, так что, по логике, в контроллере header.php должен быть код из newsticker.php, чтобы в этот шаблон tpl что-то подавалось непосредственно из контроллера хэдера, а иначе просто имеем пустоту [​IMG]

    Полез в соответствующие контроллеры, и тут прям вообще облом, т.к. в header код начинается с

    class ControllerCommonHeader extends Controller {
    public function index() {

    А в newsticker.php уже есть параметр $setting

    class ControllerExtensionModulenewsticker extends Controller {
    public function index($setting) {
    static $module = 0;
    $this->load->language('extension/module/newsticker');
    $this->load->model('design/newsticker');
    $this->load->model('tool/image');

    $this->document->addStyle('catalog/view/javascript/jquery/owl-carousel/owl.carousel.css');
    $this->document->addStyle('catalog/view/theme/default/stylesheet/newsticker.css');
    $this->document->addScript('catalog/view/javascript/newsticker.js');

    $data['newstickers'] = array();

    $data['color'] =$setting['color'];
    $data['limitedtime'] =$setting['limitedtime'];
    $results = $this->model_design_newsticker->getnewsticker($setting['newsticker_id']);
    $data['limited_time_offer']=$this->language->get('limited_time_offer');
    foreach ($results as $result) {
    $data['newstickers'][] = array(
    'message' => $result['message'],
    'name' => $result['name']
    );
    }

    $data['module'] = $module++;

    return $this->load->view('extension/module/newsticker', $data);
    }
    }

    И просто так, "в лоб", функцию index из newsticker в header не скопируешь.

    Опытные товарищи, подскажите, плз, возможно ли решить эту проблему как-то "малой кровью", не прибегая к сколько-нибудь серьезному изучению php? Покурить форумы и маны в умеренных количествах я, в принципе, готов - если в этом есть практический смысл для решения именно этой задачи здесь и сейчас, а не ради общего самообразования и повышения скилла (ну, не моё это)

    Может, там, на самом деле, копеечный вопрос и кому-то не в лом ткнуть меня носом в решение - что именно и как нужно подправить - буду премного благодарен

    Если нужны скрины с сайта - могу приложить в комментах. Сайт www.fisher-day23.ru
    Пилил тему в Песочнице на opencartforum, но там с сентября прошлого года вообще никто не ответил (да, мне не очень срочно :) - но сделать все же хочется).
     
    Последнее редактирование модератором: 8 апр 2022
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.877
    Симпатии:
    1.064
  3. SoVA23rus

    SoVA23rus Новичок

    Сообщения:
    5
    Симпатии:
    0
    Спасибо большое за наводку, пойду изучу
     
  4. SiteMix

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

    Сообщения:
    1.018
    Симпатии:
    174
    Собственно, в шапку не обязательно. Можно вверху нужных страниц (макетов) добавить новую позицию занимающую всю ширину.
    Хотя, наверное с шапкой проще...
     
  5. SoVA23rus

    SoVA23rus Новичок

    Сообщения:
    5
    Симпатии:
    0
    Если речь о том, чтобы просто в админке в макетах прописать вывод модуля в самом верху шапки - то у меня так и настроено, но на самой сгенерированной странице во фронте это все равно получается под шапкой сайта.
    news-admin.jpg
    Вот этот модуль Новости в самом верху - это и есть место вывода: вверху, на всю ширину.
    news-front.jpg
    И он отображается на всю ширину страницы сразу под шапкой, если нет боковых колонок (на хоумпейдже сайта у меня колонки отключены). А вот если, допустим, на какой-либо из страниц категорий каталога такое же сделать, при включенной левой боковой колонке (где меню разделов каталога, фильтр, облако тегов) - то этот же модуль отображается под шапкой, но не на всю ширину. А сделать его вывод именно в самом верху шапки средствами админки, настраивая макеты - либо я не понимаю, как, либо нет возможности у движка Опенкарта "из коробки".
    Или имеется в виду правка руками файлов шаблонов?
     
    Последнее редактирование: 2 фев 2022
  6. SiteMix

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

    Сообщения:
    1.018
    Симпатии:
    174
    Нет, не об этом. Именно добавить новую, такую как "Верх страницы", только над ней.
    Или, как вариант можно тупо перенести правую колонку вверх (подкорректировать вёрстку), всё равно обычно она не используется.
    Либо немного переделать чтобы "Верх страницы" был на всю ширину, а "Низ страницы", левая и правые колонки оказались ниже.

    Только во всех этих случаях придётся вносить изменения на все необходимые макеты (Главная, Категории и т.п.), в отличие от варианта с добавлением модуля в шапку... Впрочем, через модификатор это немногим сложнее чем на один макет.
    Но зато в отличие от вариантс с шапкой, можно будет выбрать где выводить модуль, а где нет.
     
  7. SoVA23rus

    SoVA23rus Новичок

    Сообщения:
    5
    Симпатии:
    0
    Тогда прошу простить за мою деревянность, но с правкой макетов я вообще впервые сталкиваюсь - поэтому прошу подсказки.
    В админке "из коробки" в 2.3 я подобного не видел - там только заранее жестко заданные 4 позиции верх, низ и две колонки. Как можно туда что-то еще добавить, передвинуть или изменить ширину? Есть в сети мануалы по доработке руками, которые можно нагуглить (попробую сам поискать, само собой) или же действительно есть какие-то готовые модификаторы для правки макетов?
     
  8. SiteMix

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

    Сообщения:
    1.018
    Симпатии:
    174
    Открыть файл необходимого макета и внести корректировки. Как я упоминал, лучше это делать модификатором.
    Готовых модификаторов не попадалось.

    Например, главная страница - catalog/view/theme/default/template/common/home.twig:
    {{ header }}
    <div id="common-home" class="container">
    <div class="row">{{ column_left }}
    {% if column_left and column_right %}
    {% set class = 'col-sm-6' %}
    {% elseif column_left or column_right %}
    {% set class = 'col-sm-9' %}
    {% else %}
    {% set class = 'col-sm-12' %}
    {% endif %}
    <div id="content" class="{{ class }}">{{ content_top }}{{ content_bottom }}</div>
    {{ column_right }}</div>
    </div>
    {{ footer }}
    Можно перенести {{ content_top }} в необходимое место, обернув его в div.
    Если надо на всю ширину, то поместить над <div id="common-home" class="container"> и задать новому div-у класс "container fluid".
    Если надо по ширине контейнера, то поместить под <div id="common-home" class="container">.
     
    Последнее редактирование: 4 фев 2022
  9. SoVA23rus

    SoVA23rus Новичок

    Сообщения:
    5
    Симпатии:
    0
    А, в этом смысле - понял, спасибо. У меня, правда, 2.3 и макеты пока еще на tpl, но суть ясна. Благодарю!