Всё, до меня дошло) У меня в форме экшн не указан и по этому у меня в результате был html всей страницы

Спасибо!

JSON для блока:
https://dl.dropboxusercontent.com/s/tm06a9xjv2s9l5j/shot_161116_154605.png

Экшн контроллера:

public function actionIndex()
    {
        if ($this->isMyPost()) {
            $email = $this->request('email', TYPE_STRING);

            if ($this->api->subscribeUser($email, $this->getParam('list_id'))) {
                $this->view->assign('success', t('Вы успешно подписались на рассылку новостей'));
            } else {
                $this->view->assign('error', t('Произошла ошибка в процессе подписки на рассылку'));
            }

            if ($this->url->isAjax()) {
                $this->result->checkAjaxOutput(true); // Форсим AJAX
                $this->result->addSection('test', 'Foo'); // Пробуем всунуть секцию

                return $this->result->setTemplate($this->getParam('indexTemplate'));
            }
        }

        return $this->result
            ->setTemplate($this->getParam('indexTemplate'));
    }

Да возвращается JSON, но только в блок контроллере нет метода wrapOutput() - из-за этого возвращается HTML всей страницы и только в месте блока - JSON строка.

function getOutput()
    {
        $this->result['html'] = $this->getHtml();
        if ($this->controller->url->isAjax() && $this->checkAjaxOutput) {

            /*===== Смотрим на условие ниже =====*/

            if ($this->controller instanceof \RS\Controller\Front || $this->controller instanceof \RS\Controller\Admin\Front) {
                // Это работает толька для фронт и бек контроллеров, как видно из условия
                $this->controller->wrapOutput(false);
            }
            return json_encode($this->result);
        } else {            
            if ($this->noAjaxRedirect !== null) {
                $this->controller->redirect($this->noAjaxRedirect);
            }
            return isset($this->result['html']) ? $this->result['html'] : '';
        }
    }

Вот и получается, что блок не может вернуть чистый JSON.

Для чего это может быть нужно:
Например, у нас на сайте есть форма подписки на рассылку. Для этой формы я сделал блок, который выводит эту самую форму и обрабатывает её отправку. Я хочу сделать отправку через AJAX запрос и с фронт котроллером это очень удобно делать, потому что можно добавить любую доп. информацию в секции (статус, код ошибки и т.п.). А для блока приходится искать в html с результатом нужный блок и заменять старый html новым. Не говоря о том, что не доступна информация из секций.

Понятно, что можно сделать отдельный фронт контроллер, который будет обрабатывать форму и возвращать JSON, но, по моему, если бы блок отдавал JSON в ответ на AJAX - было бы очень круто!

Во фронт контроллере можно добавить секцию к ответу и если это аякс запрос, то в возвращаемом JSON будет эта секция. Но вот блок-контроллер всегда возвращает HTML - можно как-то получить JSON результат со спец секциями для блока?

Здравствуйте, столкнулся с тем, что нужно добавить дополнительное поле в  Orm объект catalog-product. Для этого у API есть событие orm.init.КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА. Однако в базе поле хранится в сериализованом виде, а для работы с объектом product его нужно обратно преобразовать в массив. Отсюда и необходимость в дополнительном событии по типу orm.afterobjectload.КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА. Тем более у RS::ORM::AbstractObject есть такой метод. Будет достаточно в этом классе сгенерировать новое событие. Например так:

public function afterObjectLoad()
    {
        /**
         * Event: orm.afterobjectload
         * paramtype \RS\Orm\AbstractObject
         */
        \RS\Event\Manager::fire('orm.afterobjectload.' . $this->getShortAlias(), $this);
    }

И во всех потомках этого класса в методе afterObjectLoad (если он там переопределен) вызывать:

parent::afterObjectLoad()

Возможно я упускаю какие-то трудности в реализации, но отсутствие такого событие показалось как минимум странным. Если можно изменить данные объекта перед самой записью в базу, то почему нельзя изменить его и сразу после получения из базы?