Сегодня, на многих сайтах мы можем увидеть следующую картину: крупный контент не разбивается по страницам, а подгружается по ходу просмотра. Где-то нужно самим нажать на кнопку, где-то просто дойти до конца страницы. В обоих случаях контент начнёт подгружаться. В этом уроке мы посмотрим, как создать подобный функционал.
Пример приведен для модуля 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