Как информировать пользователей? (требуется помощь в доработке нового модуля)

Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#1
Большинству пользователям (те кто разово зашли, посмотрели - ушли) положить на эти месседжи, но для закладчиков это было бы хорошо, если они сохранили ссыль то значит им ресурс понравился и они часто заходят, хочется что бы такие люди были вкурсе когда могут быть перебои в работе сайта и все такое.

На случай проведения тех. работ и т.п.
Было бы не плохо иметь возможность в админе создавать месседжи для пользователей и выводить их на странице фильма к примеру.

Образец:
Screenshot_20210504-192334_Chrome.jpg
Если кто то смог реализовать что то подобное, поделитесь кодами, плиз.
P.S. З - "забота о пользователях"
 
Енот
Новичо́к, через «о́»
Регистрация
9 Май 2020
Сообщения
691
#2
Большинству пользователям (те кто разово зашли, посмотрели - ушли) положить на эти месседжи, но для закладчиков это было бы хорошо, если они сохранили ссыль то значит им ресурс понравился и они часто заходят, хочется что бы такие люди были вкурсе когда могут быть перебои в работе сайта и все такое.

На случай проведения тех. работ и т.п.
Было бы не плохо иметь возможность в админе создавать месседжи для пользователей и выводить их на странице фильма к примеру.

Образец:
Посмотреть вложение 6096
Если кто то смог реализовать что то подобное, поделитесь кодами, плиз.
P.S. З - "забота о пользователях"
Во во сам хотел узнать блок какой нибудь с выводом текста и кнопка вкл выкл инфо сообщения о блокировках ссылка с переадресацией итд
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#3
Можно прикрутить вот такие месседжи (там используется JQuery и очень гибкая настройка), ранее успешно использовал их в нескольких своих проектах, я бы сам их добавил, но единственная сложность это интеграция нормального управления ими в админку, NodeJS не очень мне даётся :cautious:
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#4
Пробую сам запилить. Прошу сильно не пинать.
Сейчас модуль в админке выглядит вот так.
Screenshot_2.png
Добавил файлы:
  • CSSв /themes/default/public/admin/css и /themes/ТЕМА/public/css
  • JS в /themes/default/public/admin/js и /themes/ТЕМА/public/js
<link rel="stylesheet" href="/themes/default/public/admin/css/jquery.toast.css?v220320">
<script src="/themes/default/public/admin/js/jquery.toast.js?v220320"></script>

Создал:
message.ejs в /themes/default/views/admin/modules/
Файл во вложении, нужно сменить его тип на ejs

Дописал в файлы:
left.ejs
/themes/default/views/admin/includes/left.ejs
Код:
                        <li
                        <% if (type === 'message') { %> class="page-arrow active-page"
                                <% } %>
                        >
                            <a href="/<%- config.urls.admin %>/message">
                                <i class="<%- icons['related'] %>"></i> <%= __('Информирование') %>
                                <i class="fa fa-power-off pull-right <% if (modules.message.status) { %>text-success<% } else { %>text-danger<% } %>"></i>
                            </a>
                        </li>
modules.js
/config/default/
Код:
  "message": {
    "status": true,
    "data": {
      "heading": "Важно",
      "text": "Из-за проведения технических работ на стороне хостера, некоторое время видео в высоком качестве не будет доступно. Приносим свои извинения за неудобства.",
        "settings": {
        "icon": "warning",
        "showHideTransition": "fade",
        "allowToastClose": "true",
        "hideAfter": "5000",
        "stack": "1",
        "position": "mid-center",
        "textAlign": "left",
        "loader": "true",
        "loaderBg": "#316DDD",
        "bgColor": "#716ACA",
      },
    }
  },

modules.backup.js
modules.js
modules.prev.js
/config/production/
Код:
  "message": {
    "status": true,
    "data": {
      "heading": "Важно",
      "text": "Из-за проведения технических работ на стороне хостера, некоторое время видео в высоком качестве не будет доступно. Приносим свои извинения за неудобства.",
      "transition": "0",
      "allow_toast_close": "0",
      "auto_hide": "0",
      "hide_transition": "3000",
      "stack_toasts": "0",
      "stack_length": "5",
      "toast_position": "0",
      "icon": "4",
      "text_alignment": "0",
      "toast_events": "0",
      "show_loader": "0",
      "loader_color": "#FFFFFF",
    }
  },

admin.ejs
/routes/admin.js
Код:
    case 'message':
      render.title = res.__('Информирование');
      res.render('admin/modules/message', render);
      break;
Код:
message: 'far fa-list-alt',

Застрял на моменте считывания параметров из файла
modules.js
/config/default/modules.js
Код:
  "message": {
    "status": true,
    "data": {
      "heading": "Важно",
      "text": "Из-за проведения технических работ на стороне хостера, некоторое время видео в высоком качестве не будет доступно. Приносим свои извинения за неудобства.",
        "settings": {
        "icon": "warning",
        "showHideTransition": "fade",
        "allowToastClose": "true",
        "hideAfter": "5000",
        "stack": "1",
        "position": "mid-center",
        "textAlign": "left",
        "loader": "true",
        "loaderBg": "#316DDD",
        "bgColor": "#716ACA",
      },
    }
  },
Код:
<div class="col-sm-12">
    <div class="input-group">
        <span class="input-group-addon text-muted">Заголовок</span>
        <input class="form-control" name="modules.message.data.heading"value="<%- modules.message.data.heading %>" type="text">
    </div>
</div>
Везде где подгружаются данные параметров (они грузятся из других модулей CP и были прописаны для теста)
По итогу modules.message.data.heading не дает ничего кроме 404. В упор отказывается читать параметры, даже статус модуля. :censored::unsure:
Сообщение отредактировано. Были допущены синтаксические ошибки в JS.
 

Вложения

Последнее редактирование:
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#5
В данный момент модуль "Информирование" работает почти полностью, сообщения отображаются, но по параметрам default. Сохранение параметров модуля не производится, скрипт сохранения всех параметров админки лежит в файле /themes/default/views/admin/includes/footer.ejs не понимаю как нормально все сохранить.
Информирование v1.gif

Необходимо что бы кто-нибудь доделал сохранение параметров из админки в modules.js, у меня не получается разобраться как происходит сохранение.
Для работы модуля необходимо:
  • CSSв /themes/default/public/admin/css и /themes/ТЕМА/public/css
  • JS в /themes/default/public/admin/js и /themes/ТЕМА/public/js
<link rel="stylesheet" href="/themes/default/public/admin/css/jquery.toast.css?v220320">
<script src="/themes/default/public/admin/js/jquery.toast.js?v220320"></script>

Создал:
message.ejs в /themes/default/views/admin/modules/
Файл во вложении, нужно сменить его тип на ejs

Дописал в файлы:
left.ejs
/themes/default/views/admin/includes/left.ejs
Код:
                        <li
                        <% if (type === 'message') { %> class="page-arrow active-page"
                                <% } %>
                        >
                            <a href="/<%- config.urls.admin %>/message">
                                <i class="<%- icons['related'] %>"></i> <%= __('Информирование') %>
                                <i class="fa fa-power-off pull-right <% if (modules.message.status) { %>text-success<% } else { %>text-danger<% } %>"></i>
                            </a>
                        </li>
modules.js
/config/default/
Код:
  "message": {
    "status": true,
    "data": {
      "heading": "Важно",
      "text": "Из-за проведения технических работ на стороне хостера, некоторое время видео в высоком качестве не будет доступно. Приносим свои извинения за неудобства."
      },
    "settings": {
      "icon": "warning",
      "showHideTransition": "fade",
      "allowToastClose": "true",
      "hideAfter": "5000",
      "stack": "1",
      "position": "mid-center",
      "textAlign": "left",
      "loader": "true",
      "loaderBg": "#316DDD",
      "bgColor": "#716ACA",
    }
  },

modules.backup.js
modules.js
modules.prev.js
/config/production/
Код:
  "message": {
    "status": true,
    "data": {
      "heading": "Важно",
      "text": "Из-за проведения технических работ на стороне хостера, некоторое время видео в высоком качестве не будет доступно. Приносим свои извинения за неудобства."
      },
    "settings": {
      "icon": "warning",
      "showHideTransition": "fade",
      "allowToastClose": "true",
      "hideAfter": "5000",
      "stack": "1",
      "position": "mid-center",
      "textAlign": "left",
      "loader": "true",
      "loaderBg": "#316DDD",
      "bgColor": "#716ACA",
    }
  },

admin.ejs
/routes/admin.js
Код:
    case 'message':
      render.title = res.__('Информирование');
      res.render('admin/modules/message', render);
      break;
Код:
message: 'far fa-list-alt',

footer.ejs
/themes/default/views/admin/includes/footer.ejs
Код:
  function Messages() {
    $.toast({
        heading: '<%- modules.message.data.heading %>',
        text: '<%- modules.message.data.text %>',
        icon: '<%- modules.message.settings.icon %>',
        showHideTransition: '<%- modules.message.settings.showHideTransition %>',
        allowToastClose: '<%- modules.message.settings.allowToastClose %>',
        hideAfter: '<%- modules.message.settings.hideAfter %>',
        stack: '<%- modules.message.settings.stack %>',
        position: '<%- modules.message.settings.position %>',
        textAlign: '<%- modules.message.settings.textAlign %>',
        loader: '<%- modules.message.settings.loader %>',
        loaderBg: '<%- modules.message.settings.loaderBg %>',
        bgColor: '<%- modules.message.settings.bgColor %>',
    });
  };
Вывод сообщений предполагается для всех пользователей пока ВКЛ модуль, как только пользователь закроет сообщение или оно само закроется должна будет сохранена cookie и при повторном открытии сайта месседж не будет выпадать, а при ВЫКЛ модуля нужно будет очищать cookie.

P.S. (пишу тут т.к. GitHub для моего ПК тяжеловат по этом не могу там предложить исправление репозитория).
Надеюсь Alisa допилит модуль в ближайшее время. Если появится свободное время допишу сам.
 

Вложения

Последнее редактирование:
Регистрация
15 Дек 2017
Сообщения
5,067
#6
Ничего себе, Вы разобрались.

Это сообщение лучше просто в шаблон вставить и на кнопку закрытия повесить событие отправки cookie, будут проверяться чтобы второй раз пользователю его не показывать.

Что-то такое: https://codeorum.com/tutorials/simple-toast-element-with-vanilla-js-and-animation-effects
+
JavaScript:
function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i <ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}
 
Енот
Новичо́к, через «о́»
Регистрация
26 Авг 2018
Сообщения
495
#7
Ничего себе, Вы разобрались.

Это сообщение лучше просто в шаблон вставить и на кнопку закрытия повесить событие отправки cookie, будут проверяться чтобы второй раз пользователю его не показывать.

Что-то такое: https://codeorum.com/tutorials/simple-toast-element-with-vanilla-js-and-animation-effects
+
JavaScript:
function setCookie(cname, cvalue, exdays) {
  var d = new Date();
  d.setTime(d.getTime() + (exdays*24*60*60*1000));
  var expires = "expires="+ d.toUTCString();
  document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}

function getCookie(cname) {
  var name = cname + "=";
  var decodedCookie = decodeURIComponent(document.cookie);
  var ca = decodedCookie.split(';');
  for(var i = 0; i <ca.length; i++) {
    var c = ca[i];
    while (c.charAt(0) == ' ') {
      c = c.substring(1);
    }
    if (c.indexOf(name) == 0) {
      return c.substring(name.length, c.length);
    }
  }
  return "";
}
Согласен, просто не всегда есть возможность лезть в код, что бы сменить текст сообщения (всякое бывает) а из админки было бы норм, даже с мобилки:) сугубо моё личное мнение
 
Регистрация
15 Дек 2017
Сообщения
5,067
#8
Чтобы было сохранение, нужно добавить конфигурацию в /config/production/modules.js и чтобы она применилась, либо перезагрузить контейнер docker restart example_com либо сервер reboot