У меня есть одностраничное приложение, где верхний и нижний колонтитулы являются статическими, а «страницы» открываются с помощью Ajax.Вызов метода JavaScript перед рендерингом
Пример:
элемент из главной навигации:
<a href="javascript:;" data-open-dynamic="/project/controllerName/actionName/">Something</a>
JavaScript:
$('body').on('click', '[data-open-dynamic]', function() {
var url = $(this).data('openDynamic');
openDynamic(url);
})
function openDynamic(url)
{
$.ajax({
url: url,
async: true,
success: function (data) {
//some other logic
$('.content').html(data).fadeIn();
}
})
}
Проблема заключается в том, что мне нужно, чтобы открыть эти страницы из прямых URL-адресов также. Теперь, если я пытаюсь открыть domain.com/controllerName/actionName
дизайн сломана, как макет установлен в ajax
в контроллере:
public function initialize()
{
parent::initialize();
$this->layout = 'ajax';
}
Я пытался сделать что-то с beforeFilter()
, beforeRender()
, shutdown()
но, кажется, файл JavaScript, содержащий метод openDynamic()
пока не загружен, и я не могу его назвать.
public function beforeRender(\Cake\Event\Event $event)
{
parent::beforeRender($event);
$url = $event->subject->request->here; // the URL is correct
echo 'openDynamic("' . $url . '");';
$this->response->stop();
}
Также я не уверен, что верхний и нижний колонтитулы и навигационная система будут загружены должным образом таким образом. Как я могу это достичь?
Или используйте [** компонент обработчика запроса **] (http://book.cakephp.org/3.0/en/controllers/components/request-handling.html), который автоматически выполняет эти действия. – ndm