Чтение 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 &quot;<script type=\&quot;text/javascript\&quot;>
$(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>&quot;;
}



В модуле modules/news/index.php заменяем всю функцию news

function news() {
	global $prefix, $db, $admin_file, $user, $conf, $confu, $confn, $home;
	$dbtime = save_datetime(3, &quot;&quot;);
	$cwhere = catmids($conf['name'], &quot;s.catid&quot;);
	$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 = &quot;sort=&quot;.$sort.&quot;&&quot;;
		if ($sort == 1) {
			$orderby = &quot;s.score DESC&quot;;
			$news_logo = _BEST;
		} else {
			$orderby = &quot;s.counter DESC&quot;;
			$news_logo = _POP;
		}
		$order = &quot;WHERE s.time <= '&quot;.$dbtime.&quot;' AND s.status!='0' &quot;.$cwhere.&quot; ORDER BY &quot;.$orderby;
		$ordernum = &quot;time <= '&quot;.$dbtime.&quot;' AND status!='0'&quot;;
		$pagetitle = $conf['defis'].&quot; &quot;._NEWS.&quot; &quot;.$conf['defis'].&quot; &quot;.$news_logo;
	} elseif ($ncat) {
		$field = ($sort) ? &quot;cat=&quot;.$ncat.&quot;&sort=&quot;.$sort.&quot;&&quot; : &quot;cat=&quot;.$ncat.&quot;&&quot;;
		$orderby = ($sort) ? (($sort == 1) ? &quot;s.score DESC&quot; : &quot;s.counter DESC&quot;) : &quot;s.fix DESC, s.time DESC&quot;;
		$news_logo = ($sort) ? (($sort == 1) ? &quot; &quot;.$conf['defis'].&quot; &quot;._BEST : &quot; &quot;.$conf['defis'].&quot; &quot;._POP) : &quot;&quot;;
		
		list($cat_title) = $db->sql_fetchrow($db->sql_query(&quot;SELECT title FROM &quot;.$prefix.&quot;_categories WHERE id='&quot;.$ncat.&quot;'&quot;));
		list($caid) = $db->sql_fetchrow($db->sql_query(&quot;SELECT Count(id) FROM &quot;.$prefix.&quot;_categories WHERE parentid='&quot;.$ncat.&quot;'&quot;));
		$caton = ($caid) ? 1 : 0;
		
		$order = &quot;WHERE (s.catid='&quot;.$ncat.&quot;' OR s.associated REGEXP '[[:<:]]&quot;.$ncat.&quot;[[:>:]]') AND s.time <= '&quot;.$dbtime.&quot;' AND s.status!='0' &quot;.$cwhere.&quot; ORDER BY &quot;.$orderby;
		$ordernum = &quot;(catid='&quot;.$ncat.&quot;' OR associated REGEXP '[[:<:]]&quot;.$ncat.&quot;[[:>:]]') AND time <= '&quot;.$dbtime.&quot;' AND status!='0'&quot;;
		$pagetitle = $conf['defis'].&quot; &quot;._NEWS.&quot; &quot;.$conf['defis'].&quot; &quot;.$cat_title.$news_logo;
	} else {
		$caton = 1;
		$field = &quot;&quot;;
		$hwhere = ($home) ? &quot;AND s.ihome='1'&quot; : &quot;&quot;;
		$hnwhere = ($home) ? &quot;AND ihome='1'&quot; : &quot;&quot;;
		$order = &quot;WHERE s.time <= '&quot;.$dbtime.&quot;' AND s.status!='0' &quot;.$hwhere.&quot; &quot;.$cwhere.&quot; ORDER BY s.fix DESC, s.time DESC&quot;;
		$ordernum = &quot;time <= '&quot;.$dbtime.&quot;' AND status!='0' &quot;.$hnwhere;
		$news_logo = _NEWS;
		$pagetitle = $conf['defis'].&quot; &quot;.$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(&quot;cat-navi&quot;, 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']) : &quot;1&quot;;
	$offset = ($num-1) * $newnum;
	$offset = intval($offset);
	$result = $db->sql_query(&quot;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 &quot;.$prefix.&quot;_news AS s LEFT JOIN &quot;.$prefix.&quot;_categories AS c ON (s.catid=c.id) LEFT JOIN &quot;.$prefix.&quot;_users AS u ON (s.uid=u.user_id) &quot;.$order.&quot; LIMIT &quot;.$offset.&quot;, &quot;.$newnum);
	if ($db->sql_numrows($result) > 0) {
		$width_tab = 100 / $confn['bascol'];
		$i = 1;
		$cont .= &quot;<table width=\&quot;100%\&quot; border=\&quot;0\&quot; cellspacing=\&quot;0\&quot; cellpadding=\&quot;0\&quot;>&quot;;
		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 = &quot;<a href=\&quot;index.php?name=&quot;.$conf['name'].&quot;&op=view&id=&quot;.$id.&quot;\&quot; title=\&quot;&quot;.$stitle.&quot;\&quot;>&quot;.$stitle.&quot;</a> &quot;.new_graphic($formatted);
			$read = &quot;<a href=\&quot;index.php?name=&quot;.$conf['name'].&quot;&op=view&id=&quot;.$id.&quot;\&quot; title=\&quot;&quot;.$stitle.&quot;\&quot;>&quot;._READMORE.&quot;</a>&quot;;
			$post = ($confn['autor']) ? (($user_name) ? _POSTEDBY.&quot;: &quot;.user_info($user_name, 1) : (($uname) ? _POSTEDBY.&quot;: &quot;.$uname : _POSTEDBY.&quot;: &quot;.$confu['anonym'])) : &quot;&quot;;
			$ndate = ($confn['date']) ? _DATE.&quot;: &quot;.$time : &quot;&quot;;
			$reads = ($confn['read']) ? _READS.&quot;: &quot;.$counter : &quot;&quot;;
			if ($acomm) {
				if ($comment == 0) {
					$comm = &quot;<a href=\&quot;index.php?name=&quot;.$conf['name'].&quot;&op=view&id=&quot;.$id.&quot;#&quot;.$id.&quot;\&quot; title=\&quot;&quot;.$stitle.&quot;\&quot;>&quot;._COMMENTS.&quot;</a>&quot;;
				} elseif ($comment == 1) {
					$comm = &quot;<a href=\&quot;index.php?name=&quot;.$conf['name'].&quot;&op=view&id=&quot;.$id.&quot;#&quot;.$id.&quot;\&quot; title=\&quot;&quot;.$stitle.&quot;\&quot;>&quot;._COMMENT.&quot;: &quot;.$comment.&quot;</a>&quot;;
				} elseif ($comment > 1) {
					$comm = &quot;<a href=\&quot;index.php?name=&quot;.$conf['name'].&quot;&op=view&id=&quot;.$id.&quot;#&quot;.$id.&quot;\&quot; title=\&quot;&quot;.$stitle.&quot;\&quot;>&quot;._COMMENTS.&quot;: &quot;.$comment.&quot;</a>&quot;;
				}
			} else {
				$comm = &quot;&quot;;
			}
			$arating = ajax_rating(0, $id, $conf['name'], $ratings, $score, &quot;&quot;);
			$admin = (is_moder($conf['name'])) ? add_menu($id, &quot;<a href=\&quot;&quot;.$admin_file.&quot;.php?op=news_add&id=&quot;.$id.&quot;\&quot; title=\&quot;&quot;._FULLEDIT.&quot;\&quot;>&quot;._FULLEDIT.&quot;</a>||<a href=\&quot;&quot;.$admin_file.&quot;.php?op=news_admin&typ=d&id=&quot;.$id.&quot;\&quot; OnClick=\&quot;return DelCheck(this, '&quot;._DELETE.&quot; &quot;&quot;.$stitle.&quot;&quot;?');\&quot; title=\&quot;&quot;._ONDELETE.&quot;\&quot;>&quot;._ONDELETE.&quot;</a>&quot;) : &quot;&quot;;
			$cdescription = ($cdescription) ? $cdescription : $ctitle;
			$cimg = ($cimg) ? &quot;<a href=\&quot;index.php?name=&quot;.$conf['name'].&quot;&cat=&quot;.$catid.&quot;\&quot;><img src=\&quot;&quot;.img_find(&quot;categories/&quot;.$cimg).&quot;\&quot; border=\&quot;0\&quot; alt=\&quot;&quot;.$cdescription.&quot;\&quot; title=\&quot;&quot;.$cdescription.&quot;\&quot; align=\&quot;right\&quot; hspace=\&quot;10\&quot; vspace=\&quot;10\&quot;></a>&quot; : &quot;&quot;;
			if (($i - 1) % $confn['bascol'] == 0) $cont .= &quot;<tr>&quot;;
			$cont .= &quot;<td width=\&quot;&quot;.$width_tab.&quot;%\&quot; valign=\&quot;top\&quot;>&quot;;
			$cont .= tpl_func(&quot;basic&quot;, $catid, $cimg, $ctitle, $id, $title, bb_decode($hometext, $conf['name']), $read, $post, $ndate, $reads, $comm, $arating, $admin);
			$cont .= &quot;</td>&quot;;
			if ($i % $confn['bascol'] == 0) $cont .= &quot;</tr>&quot;;
			$i++;
		}
		$cont .= &quot;</table>&quot;;

//начало добавления html кода
$cont .= '<div class=&quot;AjaxLoadNews&quot; rel=&quot;'.($num+1).'&quot;></div>';
//конец добавления html кода



	
	//изменяем код 		
if(!isset($_GET['thisajax']))$cont .= num_article(&quot;articlenum&quot;, $conf['name'], $newnum, $field, &quot;sid&quot;, &quot;_news&quot;, &quot;catid&quot;, $ordernum, $confn['nump']);
//конец изменяем код 

	} else {
	
	
	
		$cont .= tpl_warn(&quot;warn&quot;, _NO_INFO, &quot;&quot;, &quot;&quot;, &quot;info&quot;);
	}
	
	
	echo $cont;
	
//изменяем код if(!isset($_GET['thisajax']))	перед 	foot();
	if(!isset($_GET['thisajax']))foot();
	//конец изменяем код 
}


Описание модификации и js взят с ruseller.com, немного переписав код.
Demo http://auth.pro-script.ru/index.php
3.76

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

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

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

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

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

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

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

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