Я использую Fancybox и Zend. Надеюсь, что следующее ясно.
На www.example.com/template/edit/id/3 у меня есть вкладки пользовательского интерфейса jQuery. Они доступны непосредственно через якоря. Например. www.example.com/template/edit/id/3#tabs-2
На # tabs-2 У меня есть несколько элементов, неважно, что именно. Вы можете создавать или редактировать их. Эти элементы имеют собственный контроллер, поэтому для их редактирования вы вызываете / elements / edit / id / 44. В настоящее время я делаю это в слое с Fancybox. Для этого я использую функциональность Iframe в Fancybox.
Итак, если вы находитесь в / template / edit и нажимаете кнопку редактирования элемента, открывается слой, который содержит iframe, который загружает /elements/edit.
Итак, если вы измените элемент сейчас и нажмете кнопку «Сохранить», я хочу, чтобы слой автоматически закрылся и перезагрузился.
Fancybox предоставляет возможность указать, что он должен делать, когда его закрывают. На данный момент я получил это так:
'onClosed' : function() {window.location.reload();}
Это фактически перезагружает верхнее окно, а не iframe. Также есть возможность закрыть Fancybox через JS. Я делаю это, устанавливая переменную просмотра, которая вызывает это, например:
<?php if($this->close): ?>
<script type="text/javascript">
parent.$.fancybox.close();
</script>
<?php endif ?>
Итак, если сохранение прошло успешно, я установил $ this-> view-> close = true, и слой перестал работать, что вызвало мой JS.
Это отлично работает. Моя проблема сейчас заключается в том, чтобы выполнить перезагрузку с наличием # tabs-2 в моем URL.
Конечно, я мог бы получить URL-адреса, очистить их от других якорей, которые пользователь ввел, и т. Д., И создать свой URL-адрес, который я установил в соответствии с расположением окна, но почему-то я думаю, что должно быть более простое решение.
например. установка URL браузера на # tabs-2 без перезагрузки, но это также звучит не очень хорошо. Перегрузка проста, но якорь там довольно сложный.