Чтение RSS каналов

Форум

Открыть Ответить

Автоматическая подгрузка контента при прокручивании страницы

5

5
1
12.05.2013 11:00:5116.05.2013 22:48:57
Сегодня, на многих сайтах мы можем увидеть следующую картину: крупный контент не разбивается по страницам, а подгружается по ходу просмотра. Где-то нужно самим нажать на кнопку, где-то просто дойти до конца страницы. В обоих случаях контент начнёт подгружаться. В этом уроке мы посмотрим, как создать подобный функционал.

Пример приведен для модуля 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." &quot;".$stitle."&quot;?');\" 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
3.75

3.75
2
13.05.2013 08:25:14
ra55551, не проводил эксперимент, как ПС относятся к такому методу вывода контента?
Не отразится вывод через Аякс на индексации?
3.97

3.97
3
13.05.2013 15:10:08
Так навигация остается . И разве боты js понимают?
3.75

3.75
4
14.05.2013 11:07:34
Боты? - нет, не понимают, поэтому и уточнил.
3.97

3.97
5
21.05.2013 05:44:38
Гугловский бот прекрасно распознает Вконтактовские комменты
3.89

3.89
Открыть Ответить
confnindexinprocesswindowfalsedataconfnewsusersortajaxloadnewsquotfunctionconfiglast
Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь