SEF-тайтл при постраничном разбиении в Joomla

В Joomla есть встроенный функционал постраничного разбиения больших статей
с помощью мамбота(плагина) mospagebreak. Но в стандартном виде (заметил это на одном из своих старых Joomla 1.0.X — сайте) результат работы этого плагина совершенно не годится с точки зрения SEO.
Рассмотрим как можно починить.

Цель:
1. Тайтл разбитых страниц должен быть вида:
Title страницы материала • Название материала • Название сайта
2. Заголовок на разбитых страницах должен быть такой:
Title страницы материала • Название материала
3. Убрать ссылки с актиыных пунктов мини-навигации по разбитым сраницам.

Доработки (спасибо создателям Joomla RE и юзеру joom.ru maximmoroz):
Редактируем файл мамбота \mambots\content\mospaging.php
1. Добавим в функцию botMosPaging после блока if ( $hasToc ) { … } следующий код:

if ( $title )
{
	if ( !$page )
	{
		// Проверка на первую страницу статьи
		parse_str( html_entity_decode( $matches[0][2] ), $args );
		if ( @$args['heading'] )
		{
			$row->title = $args['heading'] . ' - '. $row->title;
			// Формируем <TITLE> первой страницы равному названию статьи
			$mainframe->SetPageTitle( $row->title );
		}
	}
	else
	{
		if ( $matches[$page-1][2] )
		{
			parse_str( html_entity_decode( $matches[$page-1][2] ), $args );
			// Формируем название отдельной страницы статьи
			$row->title = $args['title'] . ' - '. $row->title;
			// Формируем <TITLE> отдельной страницы статьи (равной ее названию)
			$mainframe->SetPageTitle( $row->title );
		}
	}
}

2. Комментируем ненужную теперь строчку:

// $row->title .= ' - '. $heading;

3. Исправим код формирования постраничной навигации:

	// Формируем ссылку на первую страницу
	if ( $page ) // Проверка на активность ссылки на страницу
	{
		$row->toc .= '
		<tr>
			<td>
			<a href="'. $link .'" class="toclink">'
			. $heading .
			'</a>
			</td>
		</tr>
		';
	}
	else
	{
		$row->toc .= '
		<tr>
			<td>'
			. $heading .
			'</td>
		</tr>
		';
	}
 
	$i = 2;
	$args2 = array();
 
	foreach ( $matches as $bot ) {
		$link = $nonseflink .'&amp;limit=1&amp;limitstart='. ($i-1);
		$link = sefRelToAbs( $link );
 
		if ( @$bot[2] ) {
			parse_str( html_entity_decode( $bot[2] ), $args2 );
 
			if ( @$args2['title'] ) {
				$pagereftitle = stripslashes( $args2['title'] );
			} else {
				$pagereftitle = _PN_PAGE .' '. $i;
			}
		} else {
			$pagereftitle = _PN_PAGE .' '. $i;
		}
 
		if ( ($page + 1) == $i ) // Проверка на активность ссылки на страницу
		{
			$row->toc .= '
			<tr>
				<td>'
				. $pagereftitle .
				'</td>
			</tr>
			';		
		}
		else
		{
			$row->toc .= '
			<tr>
				<td>
				<a href="'. $link .'" class="toclink">'
				. $pagereftitle .
				'</a>
				</td>
			</tr>
			';		
		}
		$i++;
	}
	$row->toc .= '</table>';
}

Примечание:
Содержимое массива $matches выглядит следующим образом:

Array ( [0] => Array ( [0] => {mospagebreak title=Первый тайтл&header=Заголовок первой страницы}
					   [1] => mospagebreak
					   [2] => title=Первый тайтл&header=Заголовок первой страницы
					 )
		[1] => Array ( [0] => {mospagebreak title=Второй заголовок}
		               [1] => mospagebreak
					   [2] => title=Второй заголовок
					 )
	  )

1 Комментарий

  • 01.04.2012 Body:

    А как к пагинации можно прикрутить вывод атрибутов rel="next" и rel="prev" в head?


Добавление комментария:

 css.php