Я настраиваю OpenCart 3.
При нажатии кнопки в нижнем колонтитуле на первой странице открывается модальная панель, которая включает iframe
, как это:
<footer>
<div class="container">
<div class="content">
<i class="fa fa-plus-circle" aria-hidden="true" data-toggle="modal" data-target="#myModal"></i>
<div class="modal fade bd-example-modal-lg" id="myModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-body">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><i class="fa fa-times-circle" aria-hidden="true"></i></button>
<iframe width="100%" height="{{ img_h }}" src="{{ addnewpro }}"></iframe>
</div>
</div>
</div>
</div>
</div>
iframe
содержит страницу php для ввода нового продукта, который находится в панели администратора.
Пока все ок! Проблема в том, что я не могу найти способ закрыть открытое modal
(#myModal) после ввода нового продукта и его сохранения. Я пробовал много разных подходов, включая сессию и т. Д.
Я создал сессию после добавления продукта на странице php:
$this->session->data['newprosaved'] = 'saved';
Я проверил сессию на странице php нижнего колонтитула:
if (isset($this->session->data['newprosaved'])) {
$data['saved'] = $this->session->data['newprosaved'];
unset($this->session->data['newprosaved']);
}
Затем попытался получить доступ к нему в footer.twig:
<script type="text/javascript"><!--
$(document).ready(function() {
if ('{{ saved }}' == 'saved' && $('#myModal').hasClass('in')) {
$('#myModal').modal('hide');
$('#myModal').remove();
}
});
</script>
Но это не работает!
Есть ли другой способ сделать это?
К сожалению, ответ был легок, хотя и потратил несколько часов моего времени.
Я создал сессию после сохранения элемента:
$this->session->data['newprosaved'] = 'saved';
Затем отменил его при загрузке страницы php (внутри iframe):
if (isset($this->session->data['newprosaved'])) {
$data['newprosaved'] = $this->session->data['newprosaved'];
unset($this->session->data['newprosaved']);
}
Я добавил код JavaScript в iframe:
if ('{{ newprosaved }}' == 'saved') {
window.parent.closeModal();
}
Затем javascript closeModal для родительской страницы:
window.closeModal = function(){
$('#myModal').modal('hide');
};
Других решений пока нет …