JoomWork делится фичей для постраничной навигации в Joomla, которая позволит улучшить "логику индексации" и побороть проблему дублируемого контента из-за разделения страниц.

Благодаря тегу link и атрибуту rel со значениями prev или next, мы поможем поисковому роботу более точно проиндексировать наш контент и показывать пользователям наиболее релевантные страницы.

<link rel=”prev” href=”адрес предыдущей страницы” />
<link rel=”next” href=”адрес следующей страницы” />

Ниже приведена функция pagination_list_render из фала templates/you_template/html/pagination.php, код которой немножко дописан, и с помощью метода addCustomTag класса JDocument, добавит нужные нам теги в head

/**
 * Renders the pagination list
 *
 * @param   array   $list  Array containing pagination information
 *
 * @return  string         HTML markup for the full pagination object
 *
 * @since   3.0
 */
function pagination_list_render($list)
{

	$doc = JFactory::getDocument();

	// Calculate to display range of pages
	$currentPage = 1;
	$range = 1;
	$step = 5;
	foreach ($list['pages'] as $k => $page)
	{
		if (!$page['active'])
		{
			$currentPage = $k;
		}
	}
	if ($currentPage >= $step)
	{
		if ($currentPage % $step == 0)
		{
			$range = ceil($currentPage / $step) + 1;
		}
		else
		{
			$range = ceil($currentPage / $step);
		}
	}

	$html = '<ul class="pagination-list">';
	$html .= $list['start']['data'];
	$html .= $list['previous']['data'];

	$prev_href = null;

	preg_match('#(href=").*?(")#', $list['previous']['data'], $prev_a);

	if (count($prev_a) > 0) {
		$prev_href = str_replace(array('href="/','"'), "", $prev_a[0]);
	}
	//var_dump(JURI::base().$prev_href);


	if(isset($prev_href)) {
		$doc->addCustomTag('<link rel="prev" href="'.JURI::base().$prev_href.'">');
	}

	foreach ($list['pages'] as $k => $page)
	{
		if (in_array($k, range($range * $step - ($step + 1), $range * $step)))
		{
			if (($k % $step == 0 || $k == $range * $step - ($step + 1)) && $k != $currentPage && $k != $range * $step - $step)
			{
				$page['data'] = preg_replace('#(<a.*?>).*?(</a>)#', '$1...$2', $page['data']);
			}
		}

		$html .= $page['data'];
	}

	$html .= $list['next']['data'];

	$next_href = null;

	preg_match('#(href=").*?(")#', $list['next']['data'], $next_a);

	if (count($next_a) > 0) {
		$next_href = str_replace(array('href="/','"'), "", $next_a[0]);
	}
	//var_dump(JURI::base().$prev_href);


	if(isset($next_href)) {
		$doc->addCustomTag('<link rel="next" href="'.JURI::base().$next_href.'">');
	}

	$html .= $list['end']['data'];

	$html .= '</ul>';
	return $html;
}
# Константин 15.09.2016 12:35
Спасибо, хорошо работает.
На главной только не появляется тега next, хотяя пагинация отображена
# JoomWork 15.09.2016 12:57
странно, если есть пагинация, должны быть и метатеги
# Константин 16.09.2016 12:18
Вы правы, косяк с кешем у меня был.
Всё нормально.
# Алексей 16.06.2017 15:05
А то что меняет html-разметку (в частности удаляет тэги оставляя одни ссылки) - это так и должно быть?
# JoomWork 16.06.2017 15:16
та вроде не должно влиять
# JoomWork 16.06.2017 15:24
хотя может сейчас что то обновилось в пагинации, это делалось для версии 3.5
# Оксана 19.10.2017 21:16
Автору три раза КУ ;-)
Вопрос такой, а не нужно ставить каноникл на первую страницу, со всех остальных в пагинации?
Спасибо!
Ответить срочно :lol: допиливую проект ;-)
# JoomWork 19.10.2017 21:18
без понятия
# Оксана 19.10.2017 22:45
Вопрос был к чему. Яша говорит если у вас магазин и куча практически одинаковых товаров на странице и вы используете пагинацию, то используйте каноникул на первую. У меня СДЛ новостняк, на странице все новости с пагинацией у каждной новости с картинкой 180 сбп текста, на странице пагинации 10 новостей. Стоит ли применять каноникул на первую или только rel вперед-назад?
С другой стороны может получиться масло-масляное.
Понятно, что все это наверное не так важно, но все же.
Защитный код
Обновить