Ваша проблема вызвана ViewAjaxController
добавлением ScrollTopCommand
к ответу ajax каждый раз, когда он загружает / перезагружает представление.Вы можете найти соответствующие строки в методе ajaxView
:
if (isset($pager_element)) {
$response->addCommand(new ScrollTopCommand(".js-view-dom-id-$dom_id"));
$view->displayHandlers->get($display_id)->setOption('pager_element', $pager_element);
}
Надеемся, что можно изменить данные команды, отправленные клиенту, с помощью hook_ajax_render_alter
,просто удалите команду viewsScrollTop
, чтобы она больше не запускалась:
function <MODULE>_ajax_render_alter(array &$data) {
$view_name = '<view_name>';
$view_dom_id = '<view_dom_id>';
$selector = '.js-view-dom-id-' . $view_dom_id;
foreach ($data as $key => $value) {
if ($value['command'] === 'viewsScrollTop' && $value['selector'] === $selector) {
unset ($data[$key]);
break;
}
}
}
Если вам нужно сопоставить view_dom_id
с view_name
, вы можете найти команду settings
в$ data array, например.$cmd['settings']['views']['ajaxViews']
имеет структуру, которая выглядит следующим образом, обратите внимание, что ключ массива точно создается из views_dom_id:
[ajaxViews] => Array
(
[views_dom_id:<views_dom_id>] => Array
(
[view_name] => <view_name>
[view_display_id] => <view_display_id>
[view_dom_id] => <views_dom_id>
)
)