[pdoPage] Как загружать постоянно 1ую страницу?

Здравствуйте.

У pdoPage есть такая особенность: когда используешь загрузку по кнопке, то он при обновлении страницы загружает контент с той страницы, на которой остановились. Я понимаю, что это довольно удобно для пользователя, однако на одном проекте такую штуку хотелось бы отключить. Возможно ли это сделать не трогая непосредственно сниппет или JSник?

Решение проблемы

Спасибо Ярославу за плагин!
Павел Гвоздь
17 декабря 2015, 00:38
modx.pro
2 450
0
Поблагодарить автора Отправить деньги

Комментарии: 9

Максим Кузнецов
17 декабря 2015, 04:20
0
Вообще, правильнее бы для такой задачи все-таки редактировать js.

Но можно попробовать вклинить на событие загрузки/переключения страницы свой принудительный скролл до верха страницы:
$('html, body').animate({
	scrollTop: $('html').offset().top
}, 0 );
    Павел Гвоздь
    17 декабря 2015, 04:43
    0
    Спасибо. Ток я либо не пойму, как это поможет в моей ситуации, либо это в моей ситуации не поможет.

    Попробую пояснить чётче. Мне нужно, чтобы при вызове сниппета pdoPage всегда загружалась первая страница результатов (параметр &page). Сейчас же он (параметр &page) переопределяется значением из $_GET['page']. А значение $_GET['page'] в свою очередь сменяется при переключении страницы, даже кнопкой "Загрузить ещё". Следовательно если пару раз тыкнуть "Загрузить ещё", а потом рефрешнуть страницу, то сниппет pdoPage подгрузит результаты начиная со страницы, на которой мы остановились, не подгружая при этом более новые записи. А постраничной навигации нигде нет, только кнопка "Загрузить ещё". В итоге имеем пользователя в недоумении: «Какого хрена пропали сегодняшние новости на главной странице?!»
      Wassi Wassinen
      17 декабря 2015, 06:42
      0
      Используйте вариант с пагинацией + кнопка «Загрузить еще».

      joxi.ru/82QQdQPh1wqwV2
        Павел Гвоздь
        17 декабря 2015, 11:30
        0
        Благодарю, но это не то. Меня устраивает вариант лишь с кнопкой. И то, по приближению достижения оной я сделал, чтобы на неё кликало автоматом, ибо из коробки по скроллу с горизонтальной прокруткой не работает (не знаю, работает ли с вертикальной). Похоже только подменять стандартный pdopage.js, без этого никак, да? Либо сниппет pdoPage, что ещё хуже.
    Ярослав
    17 декабря 2015, 11:38
    1
    +4
    Была у меня такая ситуация. Решил её маленьким плагином.
    <?php
    $page = $modx->sanitizeString($_GET['page']);
    if ($page != null) {
    $pageIdTo = (int)$modx->resource->get('id');
    $site = $modx->makeUrl($pageIdTo, "", "", "full");
    return $modx->sendRedirect($site);
    }
    При обновлении страницы он уберёт get параметры и загрузится первая страница. В событиях должна стоять галочка «OnWebPagePrerender»
      Павел Гвоздь
      17 декабря 2015, 11:50
      0
      Супер! Спасибо, друг! Решение подменой pdopage.js отменяется. Твой вариант куда приятнее! :)
        Павел Гвоздь
        17 декабря 2015, 11:54
        0
        Хотя в том случае была возможность назначить свой JSник определённым сниппетам pdoPage, а этот задевает все. :) Можно сделать проверку по id, но чёт не то. Более проще хотелось бы, чтоли. Тем не менее спасибо за вариант решения!
          Павел Гвоздь
          17 декабря 2015, 12:13
          +2
          До меня дошло, что можно ж назначить сниппету параметр &pageVarKey=`page_hor`, а плагин сделать вот таким:
          <?php
          $page = $modx->sanitizeString($_GET['page_hor']);
          if( $page != null )
          {
          	$pageIdTo = (int)$modx->resource->get('id');
          	$site = $modx->makeUrl($pageIdTo, "", "", "full");
          	
          	$modx->sendRedirect($site);
          }
      Павел Гвоздь
      17 декабря 2015, 11:49
      +1
      Решил путём подмены стандартного pdopage.js.

      Кому интересно, метод pdoPage.Hash надо заменить на вот такой:
      pdoPage.Hash = {
      	get: function() {
      		if( typeof window.pdoPage_params === 'undefined' )
      		{
      			window.pdoPage_params = {};
      		}
      		return window.pdoPage_params;
      	},
      
      	set: function(vars) {
      		window.pdoPage_params = vars;
      	},
      
      	add: function(key, val) {
      		var hash = this.get();
      		hash[key] = val;
      		this.set(hash);
      	},
      
      	remove: function(key) {
      		var hash = this.get();
      		delete hash[key];
      		this.set(hash);
      	},
      
      	clear: function() {
      		this.set({});
      	},
      };
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        9