Poszukałem w google i natrafiłem na ciekawy skrypt – Jquery scrollpagination autorstwa Andersona Ferminiano. Dzięki któremu nie jest wymagane ładowanie całej strony na raz. Umożliwia on automatyczne ładowanie zawartości strony podczas jej przewijania do dołu.
W trakcie integrowania go z moim serwisem natrafiłem na pewien problem. Mianowicie, autor niezbyt jasno wyjaśnił kwestię automatycznego ładowania kolejnych wyników. Tak więc w tym artykule napiszę jak to zrobić aby wszystko ładnie pracowało.
krok 1.
Wgraj pliki na swój serwer.
krok 2.
W plików w którym chcesz wykorzystać tą funkcjonalność wklej w sekcji [code]<head> </head>[/code] kod:
<link href="/katalog/css/scrollpagination.css" rel="stylesheet" media="screen" /> <script type="text/javascript" src="/katalog/js/scrollpagination.js"></script> <script type="text/javascript"> $(function(){ $('#content').scrollPagination({ 'contentPage': '/katalog/dane.php', // the url you are fetching the results 'contentData': {xyz:function() {return $('#content').children().size()}}, // these are the variables you can pass to the request, for example: children().size() to know which page you are 'scrollTarget': $(window), // who gonna scroll? in this example, the full window 'heightOffset': 20, // it gonna request when scroll is 10 pixels before the page ends 'beforeLoad': function(){ // before load function, you can display a preloader div $('#loading').fadeIn(); }, 'afterLoad': function(elementsLoaded){ // after loading content, you can use this function to animate your new elements $('#loading').fadeOut(); var i = 0; $(elementsLoaded).fadeInWithDelay(); if ($('#content').children().size() > 80){ // if more than 100 results already loaded, then stop pagination (only for testing) $('#nomoreresults').fadeIn(); $('#content').stopScrollPagination(); } } }); // code for fade in element by element $.fn.fadeInWithDelay = function(){ var delay = 0; return this.each(function(){ $(this).delay(delay).animate({opacity:1}, 400); delay += 100; }); }; }); </script>
Oczywiście pamiętaj tu o podaniu prawidłowych ścieżek do plików ( u mnie tu jest /katalog/). Zauważ, że tu już zostały wprowadzone odpowiednie zmiany, których nie zawiera demo skryptu.
a mianowicie, zmienione zostały trzy wiersze:
-
'contentPage': '/katalog/dane.php',
— tu podajemy własny plik który będzie odpowiedzialny za dostarczanie kolejnych danych dla skryptu
-
'contentData': {xyz:function() {return $('#content').children().size()}},
— tu w nawiasie klamrowym zadeklarowaliśmy zmienną xyz która będzie zwracać nam liczbę już wczytanych rekordów.
-
if ($('#content').children().size() > 80){
— zmieniłem wartość na 80 – bo chce aby tyle wyników maksymalnie wyświetliło mi na stronie podczas schodzenia w dół
Krok 3.
W sekcje
– tam gdzie chcesz wklejasz sobie kod z wynikami wklejam znaczniki oraz przykładowe dane:
<ul id="content"> <li><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc elementum elementum felis. Quisque porta turpis nec eros consectetur lacinia. Pellentesque sagittis adipiscing egestas. </p></li> <li><p>Aliquam dapibus tincidunt odio. Phasellus volutpat dui nec ante volutpat euismod. </p></li> <li><p>Phasellus vehicula turpis nec dui facilisis eget condimentum risus ullamcorper. Nunc imperdiet, tortor ultrices aliquam eleifend, nisl turpis venenatis dui, at vestibulum magna tellus in tortor. </p></li> <li><p>Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Mauris tincidunt nisi in tortor tincidunt ut ullamcorper lectus dapibus. </p></li> <li><p>Aenean interdum dui vitae purus molestie nec placerat nibh semper. Maecenas ultrices elementum dapibus. Aenean feugiat, metus in mattis mattis, justo nisi dignissim libero, ac volutpat dui nibh quis metus.</p></li> <li><p> Morbi eget tristique dui. Vivamus nec turpis eu nisi euismod accumsan sed in tortor. Maecenas laoreet leo ut tortor viverra facilisis.</p></li> </ul> <div class="loading" id="loading">Wait a moment... it's loading!</div> <div class="loading" id="nomoreresults">Sorry, no more results for your pagination demo.</div>
Krok 4.
Teraz przejdźmy do wykonania pliku dane.php
W nim należy pobrać zmienną od której zaczniemy szukać danych w naszej bazie, a następnie zwrócić wymagane wyniki.
$id = $_POST['xyz']; //pobieramy numer ostatniego rekoru $sql ="select * from tabela order by data_dodania DESC limit $od, 5"; // zapytanie aby pobrać z bazy 5 kolejnych rekordów począwszy od zmiennej $od --- łączymy sie z baza wysyłamy zapytanie ---- ?><li> <?php -- a tu wyświetlamy--- ?></li>
I w tym momęcie powinno wszystko ładnie działać… oczywiście pamiętajmy o odpowiednim wystylizowaniu naszych wyników.
Z pliku scrollpagination.css należy usunąć niepotrzebne selektory, a dodać te które są pożądane.