Сегодня, на многих сайтах мы можем увидеть следующую картину: крупный контент не разбивается по страницам, а подгружается по ходу просмотра. Где-то нужно самим нажать на кнопку, где-то просто дойти до конца страницы. В обоих случаях контент начнёт подгружаться. В этом уроке мы посмотрим, как создать подобный функционал.
Пример приведен для модуля News SLAED 5*
1. в config/config_header.php добаляем следующий код
В модуле modules/news/index.php заменяем всю функцию news
Описание модификации и js взят с ruseller.com, немного переписав код.
Demo http://auth.pro-script.ru/index.php
Пример приведен для модуля News SLAED 5*
1. в config/config_header.php добаляем следующий код
if($conf['name']=='news'){
echo "<script type=\"text/javascript\">
$(document).ready(function() {
var inProcess = false;
$(window).scroll(function(){
if($(window).scrollTop() + $('.AjaxLoadNews:last').height()+100 >= $(window).scrollTop() && !inProcess){
var num = $('.AjaxLoadNews:last').attr('rel');
if(typeof($('#warning')).attr('id') != 'undefined' )return false;
$.ajax({
url:'index.php',
method:'GET',
data:{'name':'news','thisajax':'true','num':num},
beforeSend:function(){inProcess = true;}
}).done(function(data){
$('.AjaxLoadNews:last').after(data);
inProcess = false;
});}
});
});
</script>";
}
В модуле modules/news/index.php заменяем всю функцию news
function news() { global $prefix, $db, $admin_file, $user, $conf, $confu, $confn, $home; $dbtime = save_datetime(3, ""); $cwhere = catmids($conf['name'], "s.catid"); $newnum = user_news($user[3], $confn['num']); $sort = (isset($_GET['sort'])) ? intval($_GET['sort']) : 0; $ncat = (isset($_GET['cat'])) ? intval($_GET['cat']) : 0; if (!$ncat && $sort && $confn['rate']) { $caton = 0; $field = "sort=".$sort."&"; if ($sort == 1) { $orderby = "s.score DESC"; $news_logo = _BEST; } else { $orderby = "s.counter DESC"; $news_logo = _POP; } $order = "WHERE s.time <= '".$dbtime."' AND s.status!='0' ".$cwhere." ORDER BY ".$orderby; $ordernum = "time <= '".$dbtime."' AND status!='0'"; $pagetitle = $conf['defis']." "._NEWS." ".$conf['defis']." ".$news_logo; } elseif ($ncat) { $field = ($sort) ? "cat=".$ncat."&sort=".$sort."&" : "cat=".$ncat."&"; $orderby = ($sort) ? (($sort == 1) ? "s.score DESC" : "s.counter DESC") : "s.fix DESC, s.time DESC"; $news_logo = ($sort) ? (($sort == 1) ? " ".$conf['defis']." "._BEST : " ".$conf['defis']." "._POP) : ""; list($cat_title) = $db->sql_fetchrow($db->sql_query("SELECT title FROM ".$prefix."_categories WHERE id='".$ncat."'")); list($caid) = $db->sql_fetchrow($db->sql_query("SELECT Count(id) FROM ".$prefix."_categories WHERE parentid='".$ncat."'")); $caton = ($caid) ? 1 : 0; $order = "WHERE (s.catid='".$ncat."' OR s.associated REGEXP '[[:<:]]".$ncat."[[:>:]]') AND s.time <= '".$dbtime."' AND s.status!='0' ".$cwhere." ORDER BY ".$orderby; $ordernum = "(catid='".$ncat."' OR associated REGEXP '[[:<:]]".$ncat."[[:>:]]') AND time <= '".$dbtime."' AND status!='0'"; $pagetitle = $conf['defis']." "._NEWS." ".$conf['defis']." ".$cat_title.$news_logo; } else { $caton = 1; $field = ""; $hwhere = ($home) ? "AND s.ihome='1'" : ""; $hnwhere = ($home) ? "AND ihome='1'" : ""; $order = "WHERE s.time <= '".$dbtime."' AND s.status!='0' ".$hwhere." ".$cwhere." ORDER BY s.fix DESC, s.time DESC"; $ordernum = "time <= '".$dbtime."' AND status!='0' ".$hnwhere; $news_logo = _NEWS; $pagetitle = $conf['defis']." ".$news_logo; } //изменяем код if(!isset($_GET['thisajax'])){ head($pagetitle); }else{ get_theme_inc(); no_cache(); } //конец изменяем код //изменяем код if ((!$home || ($home && $confn['homcat'])) && !isset($_GET['thisajax'])) { $cont = ($ncat) ? navigate($cat_title, $caton) : navigate($news_logo, $caton); if ($ncat) $cont .= tpl_eval("cat-navi", catlink($conf['name'], $ncat, $confn['defis'], _NEWS)); if ($caton == 1) $cont .= categories($conf['name'], $confn['tabcol'], $confn['subcat'], $confn['catdesc'], $ncat, $confn['modcat']); } //конец изменяем код $num = isset($_GET['num']) ? intval($_GET['num']) : "1"; $offset = ($num-1) * $newnum; $offset = intval($offset); $result = $db->sql_query("SELECT s.sid, s.catid, s.name, s.title, UNIX_TIMESTAMP(s.time) as formatted, s.hometext, s.comments, s.counter, s.acomm, s.score, s.ratings, c.title, c.description, c.img, u.user_name FROM ".$prefix."_news AS s LEFT JOIN ".$prefix."_categories AS c ON (s.catid=c.id) LEFT JOIN ".$prefix."_users AS u ON (s.uid=u.user_id) ".$order." LIMIT ".$offset.", ".$newnum); if ($db->sql_numrows($result) > 0) { $width_tab = 100 / $confn['bascol']; $i = 1; $cont .= "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"; while (list($id, $catid, $uname, $stitle, $formatted, $hometext, $comment, $counter, $acomm, $score, $ratings, $ctitle, $cdescription, $cimg, $user_name) = $db->sql_fetchrow($result)) { $time = date(_DATESTRING, $formatted); $title = "<a href=\"index.php?name=".$conf['name']."&op=view&id=".$id."\" title=\"".$stitle."\">".$stitle."</a> ".new_graphic($formatted); $read = "<a href=\"index.php?name=".$conf['name']."&op=view&id=".$id."\" title=\"".$stitle."\">"._READMORE."</a>"; $post = ($confn['autor']) ? (($user_name) ? _POSTEDBY.": ".user_info($user_name, 1) : (($uname) ? _POSTEDBY.": ".$uname : _POSTEDBY.": ".$confu['anonym'])) : ""; $ndate = ($confn['date']) ? _DATE.": ".$time : ""; $reads = ($confn['read']) ? _READS.": ".$counter : ""; if ($acomm) { if ($comment == 0) { $comm = "<a href=\"index.php?name=".$conf['name']."&op=view&id=".$id."#".$id."\" title=\"".$stitle."\">"._COMMENTS."</a>"; } elseif ($comment == 1) { $comm = "<a href=\"index.php?name=".$conf['name']."&op=view&id=".$id."#".$id."\" title=\"".$stitle."\">"._COMMENT.": ".$comment."</a>"; } elseif ($comment > 1) { $comm = "<a href=\"index.php?name=".$conf['name']."&op=view&id=".$id."#".$id."\" title=\"".$stitle."\">"._COMMENTS.": ".$comment."</a>"; } } else { $comm = ""; } $arating = ajax_rating(0, $id, $conf['name'], $ratings, $score, ""); $admin = (is_moder($conf['name'])) ? add_menu($id, "<a href=\"".$admin_file.".php?op=news_add&id=".$id."\" title=\""._FULLEDIT."\">"._FULLEDIT."</a>||<a href=\"".$admin_file.".php?op=news_admin&typ=d&id=".$id."\" OnClick=\"return DelCheck(this, '"._DELETE." "".$stitle.""?');\" title=\""._ONDELETE."\">"._ONDELETE."</a>") : ""; $cdescription = ($cdescription) ? $cdescription : $ctitle; $cimg = ($cimg) ? "<a href=\"index.php?name=".$conf['name']."&cat=".$catid."\"><img src=\"".img_find("categories/".$cimg)."\" border=\"0\" alt=\"".$cdescription."\" title=\"".$cdescription."\" align=\"right\" hspace=\"10\" vspace=\"10\"></a>" : ""; if (($i - 1) % $confn['bascol'] == 0) $cont .= "<tr>"; $cont .= "<td width=\"".$width_tab."%\" valign=\"top\">"; $cont .= tpl_func("basic", $catid, $cimg, $ctitle, $id, $title, bb_decode($hometext, $conf['name']), $read, $post, $ndate, $reads, $comm, $arating, $admin); $cont .= "</td>"; if ($i % $confn['bascol'] == 0) $cont .= "</tr>"; $i++; } $cont .= "</table>"; //начало добавления html кода $cont .= '<div class="AjaxLoadNews" rel="'.($num+1).'"></div>'; //конец добавления html кода //изменяем код if(!isset($_GET['thisajax']))$cont .= num_article("articlenum", $conf['name'], $newnum, $field, "sid", "_news", "catid", $ordernum, $confn['nump']); //конец изменяем код } else { $cont .= tpl_warn("warn", _NO_INFO, "", "", "info"); } echo $cont; //изменяем код if(!isset($_GET['thisajax'])) перед foot(); if(!isset($_GET['thisajax']))foot(); //конец изменяем код }
Описание модификации и js взят с ruseller.com, немного переписав код.
Demo http://auth.pro-script.ru/index.php