Тема: Как сделать Ajax запрос блок контроллеру в Readyscript?
Вопрос:
Как сделать Ajax запрос блок контроллеру в Readyscript?
Ответ:
Дело в том, что каждый блок контроллер в системе обладает своим уникальным идентификатором. Заботится о нём не надо, т.к. как только вы его вставляете на страницу, то тут же у него генерируется уникальный номер. Это нужно для того, чтобы можно было вставить несколько таких же блок контроллеров или же разных, но чтобы именно тот который Вам нужно отработал.
Соответственно когда вы посылаете запрос, то надо передавать уникальный идентификатор блока в параметре с именем "_block_id".
Т.е. например
?_block_id=-345345431
Как его получить?
В шаблоне доступна переменная $this_controller у которой есть метод getBlockId, его то и можно использовать, например так
/путь к блок контроллеру/?_block_id={$this_controller->getBlockId()}
Если вы реализуете форму, то есть метод, который вернёт скрытый input с прописанным id блока, который будет учитываться при отправке формы.
<form>
{$this_controller->myBlockIdInput()}
....
</form>
Т.е. в общем виде, если мы в блок контроллере реализуем пагинацию, то урл в шаблоне можно получить так:
{$router->getUrl('catalog-block-sidefilters', ['_block_id'=>$this_controller->getBlockId(), 'p'=>2])}
Т.е. используя объект $router. В данном примере это страница со списком товаров, и где-то там наш блок контроллер.
И тогда получится адрес примерно такой:
/catalog-block-sidefilters/?_block_id=-342342345&p=2
Ну хорошо, вот мы отправили запрос.
Как понять на стороне контроллера, какому контроллеру пришёл запрос и сделать обработку этого запроса?
Всё просто. В нашем блок контроллере пишем...
Для POST запроса:
if ($this->isMyPost()){
//Мой POST запрос
}
Для GET запроса:
if ($this->myGet()){
//Мой GET запрос
}
Если есть вопросы, задавайте.