В 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 .'&limit=1&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=Второй заголовок ) )
А как к пагинации можно прикрутить вывод атрибутов rel="next" и rel="prev" в head?