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

<a href="#" data-toggle="modal" data-target=".contact-form">

Проблема в том, что у меня на странице много модалов, что делает страницу слишком тяжелой. Я хочу обойти эту проблему, используя jquery, который откроет файл PHP, и этот файл PHP, за исключением соответствующего кода PHP, загрузит шаблон для модального (I'm using Smarty templates).

Любой пример того, как я могу это сделать?

Спасибо Крис

0
Christos Teriakis 27 Фев 2020 в 11:27

2 ответа

Лучший ответ

Index.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Page title</title>


    <script src="https://code.jquery.com/jquery-3.4.1.min.js"
        integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>

    <!-- Latest compiled and minified CSS -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css"
        integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">

    <!-- Optional theme -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css"
        integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous">

    <!-- Latest compiled and minified JavaScript -->
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"
        integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
        crossorigin="anonymous"></script>

</head>

<body>

    <a href="modal.html" data-toggle="ajaxModal">My link</a>

</body>

<script>
    $(document).on('click', '[data-toggle="ajaxModal"]',
        function (e) {
            $('#ajaxModal').remove();
            e.preventDefault();
            var $this = $(this)
                , $remote = $this.data('remote') || $this.attr('href')
                , $modal = $('<div class="modal fade" id="ajaxModal"><div class="modal-body"></div></div>');
            $('body').append($modal);
            $modal.modal();
            $modal.load($remote);
        }
    );
</script>

</html>

Для каждой новой ссылки вы можете повторить эту структуру кода.

<a href="modal2.html" data-toggle="ajaxModal">My link 2</a>

Modal.html

<div class="modal-dialog">
    <div class="modal-content">

        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal">&times;</button>
            <h4 class="modal-title">Modal title</h4>
        </div>
        <div class="modal-body">

            Modal

        </div>
    </div>

</div>

Для каждого нового содержимого страницы вам нужно создать новый файл, например, modal2.html, содержащий ту же структуру HTML-кода.

0
Miqueias Francisco 28 Фев 2020 в 16:04

Я смог заставить его работать, но все же у меня есть 6 строк модального окна на моей странице. Является ли это возможным:

  1. Чтобы добавить эти 6 строк HTML-кода где-нибудь в коде JS?
  2. Чтобы сделать JS-код немного более компактным?

https://geek.cmsviral.com/modaltest.html

PS: форма в модале безобразна, так как отсутствует файл css.

<html lang="en">
<head>
<meta charset="UTF-8">
<title>Page title</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script>
</head>

<body>
<a href=".modal-test-form" data-toggle="modal" class="modal-test-js">Login/Signup</a>

<div id="modal-test-html" class="modal fade modal-test-form" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content noradius">

</div>
</div>
</div>


<script type="text/javascript">
$(document).ready(function ($) {
$('.modal-test-js').click(function () {
load_modal_test(this);
return false;
});
});
function load_modal_test(element){
$.ajax({
url: 'modal_test.php',
beforeSend: function () {
$('#modal-test-html').modal({
keyboard: true
});
},
success: function (res) {
$('#modal-test-html').find('.modal-content').html(res);
init($('#modal-test-html').find('.modal-content').find("#modal-test-html"));
}
});
}
</script>
</body>
</html>
0
Christos Teriakis 28 Фев 2020 в 09:45