Артём Мáлков

Вызов стандартного модального окна в DLE

24 ноя30 комм

Если вы уже давно знакомы с DataLife Engine, то знаете, что часть информации (а именно информационные уведомления) представляется пользователю в модальном окне. Вполне себе хорошее решение, которое позволяет значительно сэкономить время.

Помимо того, что стандартные уведомления в DataLife Engine представляются в модальном окне, вы сами можете вызвать это окно с необходимой вам информацией.

Код для вызова:

<a href="javascript: void(0);" onclick="DLEalert('Текст', 'Заголовок');">Модальное окно</a>

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

Рекомендуем к просмотру
Простое адаптивное модальное окно для сайта на HTML+CSS+jQuery
Посты
«Clean Sign Up» 2.0 – быстрая регистрация в чистом модальном окне для DLE
Модули и скрипты
«Clean Sign Up» – быстрая регистрация в чистом модальном окне для DLE
Посты
30
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 1
    2
      •  Пользователь
    14 фев в 10:46

    Добрый день. Подскажите, а как подтвердить данные в этом окне? Допустим я хочу добавить возможность редактирования пользователя. Нажимая стандартную кнопку подтверждения submit ничего не происходит. Не подскажите, как из окошка сделать подтверждение сабмит для редактирования пользователя? Чтоб и страничка перезагружалась.

      • 1
      1067
        •  Команда Pandoge
      15 фев в 13:25

      Владислав Александрович, здравствуйте!

      Подскажите, где вы вызываете это окно и какие данные в нем показываются?

      • 1
      2
        •  Пользователь
      15 фев в 19:22

      Артём Мáлков, на странице юзера.

      Выглядит так:

      Копировать всё содержимое не буду, в общем внутри:

      <script>
          function edit_profile() {
              $("#edit_profile").dialog({
                  autoOpen: true,
                  show: "fade",
                  hide: "fade",
                  width: 600,
                  buttons: {
                      "Закрыть окно": function() {
                          $(this).dialog("close");
                      },
                  }
              });
          }
      </script>
      <div id="edit_profile" title="Изменение настроек профиля" style="display: none;">
              <ul class="ui-form">
                  <li class="form-group mb-1">
                      <label for="fullname">Ваше имя</label>
                      <input type="text" name="fullname" id="fullname" value="{fullname}" class="w-100">
                  </li>
        </ul>
              <div class="form-group">
                  <input name="submit" type="hidden" id="submit" value="submit">
                  <button class="btn btn-sm btn-green" value="submit" type="submit" title="Сохранить">Сохранить</button>
              </div>
          </div>

      При нажатии на submit не перезапускается и накого действия не происходит. Делал такую же для login, там все превосходно.

      • 1
      16
        •  Проверенный
      22 мар в 17:09

      Артём Мáлков, Попробовал запихать изменение настроек профиля в стандартное модальное окно DLE. Но почему-то не сохраняются настройки, то есть input submit никак не реагирует. Возможно ли вообще как-то заставить сохранять настройки?)

      • 1
      16
        •  Проверенный
      22 мар в 17:15

      Владислав Александрович, Вам удалось сделать сохранение настроек? У меня не выходит замучился уже)

      • 1
      1067
        •  Команда Pandoge
      23 мар в 01:57

      Сергей, по какой-то инструкции делали? Можете показать код?

      • 1
      16
        •  Проверенный
      23 мар в 12:56

      Артём Мáлков, Стандартный вызов модального окна, добавил userinfo.tpl. Само модальное окно отлично функционирует как положено. Вот основной отрезок кода из userinfo.tpl:

      [not-logged]
      <a href="#" onclick="show_modal_edit();return false;">Редактировать</a>
      
      <div id="div_modal_edit" title="Настройка профиля" style="display: none;">
      
      <div class="form-group">
      <label class="c-muted" for="fullname">Логин</label>
      <input class="form-control" type="text" maxlength="50" name="fullname" id="fullname" value="{fullname}">
      </div>
      <div class="form-group">
      <label class="c-muted" for="email">Ваш E-Mail</label>
      <input class="form-control" type="email" maxlength="50" name="email" id="email" value="{editmail}" required>
      </div>
      <hr class="my-4">
      <div class="form-group">
      <label class="c-muted" for="altpass">Старый пароль</label>
      <input class="form-control" type="password" name="altpass" id="altpass">
      </div>
      <div class="form-group">
      <label class="c-muted" for="password1">Новый пароль</label>
      <input class="form-control" type="password" name="password1" id="password1">
      </div>
      <div class="form-group">
      <label class="c-muted" for="password2">Повторите новый пароль</label>
      <input class="form-control" type="password" name="password2" id="password2">
      </div>
      <hr class="my-4">
      <div class="form-group">
      <label class="c-muted" for="image">Загрузите аватар</label>
      <input type="file" id="image" name="image" class="form-control">
      </div>
      <div class="form-group">
      <label class="c-muted" for="image">Использовать Gravatar</label>
      <input type="text" name="gravatar" id="gravatar" value="{gravatar}" class="form-control">
      </div>
      <div class="custom-control custom-checkbox">
      <input type="checkbox" name="del_foto" class="custom-control-input" value="yes" id="del_foto">
      <label class="custom-control-label" for="del_foto">Удалить аватар</label>
      </div>
      
      <div class="form_submit">
      <button class="bbcode" name="submit" type="submit">Сохранить</button>
      <input name="submit" type="hidden" id="submit" value="submit">
      </div>
      
      </div>
      <script>function show_modal_edit() {
      	$("#div_modal_edit").dialog({
      		autoOpen: true,
      		modal: true,
      		show: "fade",
      		hide: "fade",
      		width: 360,height: 460,
      		open: function(event, ui) {
      			$('.ui-widget-overlay').bind('click', function() {
      				$("#div_modal_edit").dialog('close');
      			});
      		}
      	});
      }</script>
      [/not-logged]
      • 1
      16
        •  Проверенный
      23 мар в 13:14

      Артём Мáлков, Видимо тут без дополнительных скриптов JS или Ajax никак не обойтись?) Потому что, если это все не в модальном окне, то все работает и сохраняется...

      • 2
      16
        •  Проверенный
      23 мар в 15:17

      Артём Мáлков, Нашел причину. Оказывается, модальное окно находится вне формы изменения профиля. То есть UI Dialog располагается в самом низу перед <//body> независимо ни от чего. А форма отправки данных post userinfo находится в середине и выводится из тега {content} В итоге кнопка submit не может отправить данные. По этой логики значит никак не получится сделать и получается я зря тратил время?

      • 1
      1067
        •  Команда Pandoge
      23 мар в 15:48

      Сергей, была мысль про это. Если нужно - я посмотрю сегодня-завтра и отпишусь

      • 1
      16
        •  Проверенный
      23 мар в 15:59

      Артём Мáлков, Было бы замечательно, и очень сильно помогли бы многим)

    • 1
    4
      •  Проверенный
    21 апр в 13:43

    Здравствуйте Артём! Задача: вывод модального окна один раз при открытии сайта. В main.tpl (пробовал и в блок head и body) добавил:

    <script>

    $(document).ready(function() {

    DLEalert('Текст', 'Заголовок');

    });

    </script>

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

      • 1
      1067
        •  Команда Pandoge
      21 апр в 14:29

      Заур Магомедов, здравствуйте!

      Один раз в день?

      • 1
      4
        •  Проверенный
      22 апр в 16:58

      Артём Мáлков, добрый день!

      Смотрите, надо чтобы при каждом новом открытии сайта посетителем выходило модальное окно. Затем после того, как он его закроет и начнет переходить на другие страницы сайта (например "контакты"), это окно снова не появлялось (у меня на сайте пока так происходит).

      • 2
      1067
        •  Команда Pandoge
      23 апр в 17:05

      Заур Магомедов, здравствуйте!

      Я предлагаю Вам использовать куки. Логика такая:

      1. При первом посещении сайта сохраняем некоторую куку и открываем окно, если кука не была ранее установлена.

      2. При посещении других страниц сайта проверяем есть ли кука, и если есть - окно не открываем.

      Реализация примерно такая (проверить нет возможности, так что проверьте сами и отпишитесь):

      <script>
      	
      	function get_cookie(name) {
      	
      		let matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"));
      		
      		if(matches) {
      			
      			return decodeURIComponent(matches[1]);
      			
      		} else {
      			
      			return "";
      			
      		}
      		
      	}
      
      	$(document).ready(function() {
      		
      		if(get_cookie("open_modal") == "") {
      			
      			document.cookie = "open_modal=true;path=/;";
      			
      			DLEalert('Текст', 'Заголовок');
      		
      		}
      		
      	});
      	
      </script>

      Кука будет удаляться автоматически при закрытии браузера.

      • 1
      4
        •  Проверенный
      24 апр в 08:35

      Артём Мáлков, доброе утро!

      Попробовал вставить этот код (пробовал в разные места: в body, в head) и теперь вообще ничего не происходит, то есть модальное окно перестало выходить.

      Но все равно спасибо, идея отличная.

      • 1
      1067
        •  Команда Pandoge
      24 апр в 13:12

      Заур Магомедов, здравствуйте!

      Код поправил. Окно будет показываться один раз при первом посещении сайта, следующий - когда человек закроет браузер и откроет вновь.

      • 1
      4
        •  Проверенный
      24 апр в 14:35

      Артём Мáлков, спасибо, теперь меня устраивает, Вы настоящий профессионал.

      Скажите куда, переведу на бутылочку Чешского пива в знак благодарности:)

      • 2
      1067
        •  Команда Pandoge
      24 апр в 17:17

      Заур Магомедов, на странице "О Pandoge" есть информация на этот счет wink

    • 2
    2
      •  Пользователь
    21 дек в 17:54

    Подскажите как вставить в данное модальное окно тег

      • 1
      2
        •  Пользователь
      21 дек в 17:55

      Пример идеи отправлю в личку. Не хочу что бы лишние ссылки были на конкурентов) А тег {calendar}

      • 2
      1067
        •  Команда Pandoge
      21 дек в 21:18

      Александр Орлов, из простого.

      Ссылка на вызов:

      <a href="javascript: void(0);" onclick="show_modal_dle();">Показать окно</a>

      Скрипт:

      <script>
      	
      	function show_modal_dle() {
      	
      		$("#div_modal_dle").dialog({
      			autoOpen: true,
      			show: "fade",
      			hide: "fade",
      			width: 600,
      			buttons: {
      				"Закрыть окно": function() {
      					$(this).dialog("close");
      				},
      			}
      		});
      		
      	}
      	
      </script>

      Контент:

      <div id="div_modal_dle" title="Название окна" style="display: none;">
      	
      	{calendar}
      	
      </div>
      • 0
      1
        •  Пользователь
      22 янв в 23:58

      Артём Мáлков, Столкнулся с такой проблемой - сделал на dle 15.3, но при клике ничего не происходило, пока не сменил в настройках использовать jQuery 2.xx Подскажите как заставить работать на jQuery 3.xx ?

    • 1
    7
      •  Проверенный
    4 дек в 20:53

    Подскажите, а возможно сделать вызов модального окна автоматически при входе на сайт?

      • 1
      1067
        •  Команда Pandoge
      5 дек в 00:16

      Сергей, так:

      <script>
      
      	$(document).ready(function() {
      
      		DLEalert('Текст', 'Заголовок');
      
      	}); 
      
      </script>
      • 1
      7
        •  Проверенный
      5 дек в 21:07

      Артём Мáлков, Поставил, но увы нечего не выводит(

      • 1
      1067
        •  Команда Pandoge
      6 дек в 00:33

      Сергей, скрипт нужно вставить перед </body>, а в HEAD:

      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
      • 2
      7
        •  Проверенный
      6 дек в 15:34

      Артём Мáлков, Спасибо большое помогло. :)

    • 3
    1
      •  Пользователь
    5 ноя в 09:30

    Подскажите, а как убрать кнопку "ok" в этом модальном окне ?

      • 3
      1067
        •  Команда Pandoge
      5 ноя в 15:41

      Антон, покажите пример, как выглядит окно на Вашем сайте.

Подняться наверх
«Pandoge» - помощник вебмастера