Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как вставить rel="next" и rel="prev" в head на страницах пагинации?

Как вставить rel="next" и rel="prev" в head на страницах пагинации?


     04.09.2015    Все вопросы » Общие вопросы по PHP    5289

вопрос
Здравствуйте!

Необходимо на страницах пагинации в head вставить теги rel="next" и rel="prev" кроме первой страницы. Кто уже делал подобное? И как такое можно осуществить?

Заранее спасибо!

Ответил: ПафНутиЙ


Вам поможет прочтение документации, а конкретно тег
page-count
и его противоположный тег
not-page-count

29 комментариев

revived
Юзер

revived - 4 сентября 2015 17:04 -

page-count и not-page-count не подходит в моем случае.. как я ими в теги <head></head> вставлю rel="next" и rel="prev"?

ПафНутиЙ
Админ

ПафНутиЙ - 4 сентября 2015 17:06 -

В точности так же как и любой другой тест, в документации есть пример, просто замените текст на тот, который нужен вам.

Каков вопрос - таков и ответ. Просто помните об этом.

revived
Юзер

revived - 4 сентября 2015 17:39 -

Хех, ну я туплю, я думал эти теги не работают в head :)
Еще тогда очередной вопрос, а как сделать так, чтобы автоматом подставляло номер страницы (назад/вперед), например:

<link rel="prev"  href="http://site.com/page1.html">
<link rel="next" href="http://site.com/page3.html">


На сайте много разделов и статей почти 1700, нужно как-то генерировать адрес ссылки с разделом и номером страницы.

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 17:55 -

Открыть /engine/engine.php Найти :
if ($canonical) {
Выше вставить :
if($dle_module == "main" OR $dle_module == "cat")
{
    $cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
    
    if($cstart < 2)
    {
        $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat . 'page/2' . '">';
        $prev_rel = '';
    }
    else
    {
        $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
        if($cstart == 2)
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
        else
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart - 1) .'">';
    }
}
$metatags .=<<<HTML

{$prev_rel}
{$next_rel}
HTML;

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 18:02 -

Все супер, но есть маленькая недоработка!
Если всего 6 страниц, то в последней странице стоит ссылка <link rel="next" href="http://site.com/page7.html">
Нужно убрать отображение в последней странице rel="next"

И еще, в /lastnews/ - они не отображаются, только в конкретном разделе.

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 18:23 -

Заменить тот код что кидал на этот :
if($dle_module == "main" OR $dle_module == "cat" OR $dle_module == "lastnews")
{
    $cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
    if(!$cat_cat AND $dle_module == "lastnews")
        $cat_cat = "lastnews/";
    
    $all_pages_count = @ceil( $count_all / $config['news_number'] );
    if($cstart < 2)
    {
        $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat . 'page/2' . '">';
        $prev_rel = '';
    }
    else
    {
        if($all_pages_count < $cstart)
            $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
        else
            $next_rel = '';
        if($cstart == 2)
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
        else
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart - 1) .'">';
    }
}
$metatags .=<<<HTML
{$prev_rel}
{$next_rel}
HTML;

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 18:27 -

Опять немного не так. Пропал тег rel="prev" везде...

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 18:30 -

revived, На этот заменить :
if($dle_module == "main" OR $dle_module == "cat" OR $dle_module == "lastnews")
{
    $cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
    if(!$cat_cat AND $dle_module == "lastnews")
        $cat_cat = "lastnews/";
    
    $all_pages_count = @ceil( $count_all / $config['news_number'] );
    if($cstart < 2)
    {
        $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat . 'page/2' . '">';
        $prev_rel = '';
    }
    else
    {
        if($cstart >= $all_pages_count)
            $next_rel = '';
        else
            $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
        if($cstart == 2)
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
        else
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart - 1) .'">';
    }
}
$metatags .=<<<HTML

{$prev_rel}
{$next_rel}
HTML;

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 18:38 -

Близко но опять не в точку :)
На пагинации все новости - все ок, но вот теперь в разделах на пагинации пропал rel="next"

И на главной странице висит гег <link rel="next" href="http://мойсайт.ru/page/2">

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 18:50 -

revived, на этот код :
if($dle_module == "main" OR $dle_module == "cat" OR $dle_module == "lastnews")
{
    $cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
    if(!$cat_cat AND $dle_module == "lastnews")
        $cat_cat = "lastnews/";
    
    $all_pages_count = @ceil( $count_all / $config['news_number'] );
    if($cstart < 2)
    {
        $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat . 'page/2' . '">';
        $prev_rel = '';
    }
    else
    {
        if($cstart >= $all_pages_count)
            $next_rel = '';
        else
            $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
                
        if($cstart == 2)
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
        else
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart - 1) .'">';
    }
}
$metatags .=<<<HTML

{$prev_rel}
{$next_rel}
HTML;

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 19:01 -

На главной висит тег: <link rel="next" href="http://сайт.ru/page/2">

Далее странная ситуация (смотрю пагинацию по категориям):

1. На первой странице все ОК - есть только rel="next"
2. На 2-5 странице НЕТ rel="next" !
3. На 6 странице (и всех остальных) уже все отлично, есть оба тега: rel="next" и rel="prev"
4. Далее все ОК, и последняя страница, она только rel="prev" имеет.

На пагинации по lastnews такая же ситуация: НЕТ rel="next" на 2-5 странице.

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 19:04 -


revived, либо почистите кэш, либо вы не можете установить банальщину

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 19:09 -

Да... извините за тупость, хотя пару раз чистил кэш, а последний раз не зачистил.

Единственная проблема - на главной висит <link rel="next" href="http://tutknow.ru/page/2">

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 19:15 -

revived, а что разве не должен ? Это ведь необходимо.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 19:16 -

В моем случае не должен, дело в том что у меня вывод главной страницы через тег {custom}

Там фиксированное количество новостей - нет пагинации.

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 19:20 -

revived, тогда замените на это :
if($dle_module == "main" OR $dle_module == "cat" OR $dle_module == "lastnews")
{
    $cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
    if(!$cat_cat AND $dle_module == "lastnews")
        $cat_cat = "lastnews/";
    
    $all_pages_count = @ceil( $count_all / $config['news_number'] );
    $next_rel = '';
    $prev_rel = '';
    if($cstart >= 2)
    {
        if($cstart >= $all_pages_count)
            $next_rel = '';
        else
            $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
        
        if($dle_module == "main")
            $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
        
        if($cstart == 2)
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
        else
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart - 1) .'">';
    }
}
$metatags .=<<<HTML

{$prev_rel}
{$next_rel}
HTML;

для благодарностей за потраченное время, не откажусь от пива на webmoney
R118095764291 - рубли
U218134219019 - гривны
Z228640084773 - доллары

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 19:28 -

Блин, уже стыдно писать :) С главной пропали теги, а вот в пагинации разделов опять у меня бардак - на первой странице нет, на 5 показывает ссылку - <link rel="prev" href="..../page/39">
:(

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 19:39 -

revived, на этот код :
if($dle_module == "main" OR $dle_module == "cat" OR $dle_module == "lastnews")
{
    $cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
    if(!$cat_cat AND $dle_module == "lastnews")
        $cat_cat = "lastnews/";
    
    $all_pages_count = @ceil( $count_all / $config['news_number'] );
    $next_rel = '';
    $prev_rel = '';
    if($cstart >= 2)
    {
        if($cstart >= $all_pages_count)
            $next_rel = '';
        else
            $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
                
        if($cstart == 2)
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
        else
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart - 1) .'">';
    }
}
$metatags .=<<<HTML

{$prev_rel}
{$next_rel}
HTML;

и почистите кэш

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 19:51 -

Это самый отличный вариант, единственное у меня нет теперь тега rel="next" на первой странице категории и последних новостей. Ну хоть хорошо что на главной его уже нет!

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 19:55 -

revived, на этот код замените :
if($dle_module == "main" OR $dle_module == "cat" OR $dle_module == "lastnews")
{
    $cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
    if(!$cat_cat AND $dle_module == "lastnews")
        $cat_cat = "lastnews/";
    
    $all_pages_count = @ceil( $count_all / $config['news_number'] );
    $next_rel = '';
    $prev_rel = '';
    if($cstart >= 2)
    {
        if($cstart >= $all_pages_count)
            $next_rel = '';
        else
            $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart + 1) .'">';
                
        if($cstart == 2)
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
        else
            $prev_rel = '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstart - 1) .'">';
    }
    elseif (($dle_module == "cat" OR $dle_module == "lastnews") AND $cstart < 2)
    {
        $next_rel = '<link rel="next" href="'. $config['http_home_url'] . $cat_cat . 'page/2' . '">';
    }
}
$metatags .=<<<HTML

{$prev_rel}
{$next_rel}
HTML;

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 20:02 -

ВебМани проверил? Все супер!

Еще раз благодарю за помощь, это очень классная работа!

Теперь ПафНутиЙ будет иметь хорушую тему на свой блог, как внедрить такие теги )) Я думаю этот код многим в пользу пойдет!

Всем спасибо и до встречи!

LazyDev
PHP-developer

LazyDev - 4 сентября 2015 20:06 -

revived, да проверил, спасибо.

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

revived
Юзер

revived - 4 сентября 2015 19:31 -

И проверь WM заодно...

OlegVVV
Юзер

OlegVVV - 6 марта 2016 14:39 -

Gameer,
А как дописать каноникал к категориям? есть допустим категория site.ru/newauto/ и что б в её коде был <link rel="canonical" href="http://site.ru/newauto/">

LazyDev
PHP-developer

LazyDev - 6 марта 2016 14:45 -

OlegVVV, открыть /engine/engine.php найти :
if ($canonical) {
Выше вставить :
if($dle_module == "cat") $metatags .= PHP_EOL . "<link rel=\"canonical\" href=\"http://site.ru/{$cat_info[$category_id][alt_name]}/\">";

Мой блог: LazyDev.pro

Помогаю с решением проблем на платной основе.

womenup
Юзер

womenup - 17 мая 2017 13:18 -

Добрый день, могли бы Вы помочь мне, у меня 11.3 версия дле, мне нужен правильный код =))
тоесть на главной должен быть все же код next потом когда заканичается пагинация например на последней странице я так понимаю код next не должен появлятся, а только назад.

Вот собственно что у меня стоит
if($dle_module == "main" || $dle_module == "cat")
{
	$cstarts = isset($_REQUEST["cstart"]) ? intval($_REQUEST["cstart"]) : 1;
	$cat_cat =  !empty($category) ? strip_tags(stripslashes($category)) . '/' : '';
	$all_pages_counts = dle_cache( "news_rel_" . $cat_cat, $cat_cat, false);
	if($all_pages_counts === false)
	{
		$all_pages_counts = intval(ceil( $counts_all / $config['news_number'] ));
		create_cache ( "news_rel_" . $cat_cat, $all_pages_counts, $cat_cat, false );
	}
	if($cstarts < 2 && 1 != $all_pages_counts)
	{
		$next_rel = PHP_EOL . '<link rel="next" href="'. $config['http_home_url'] . $cat_cat . 'page/2' . '">';
		$prev_rel = '';
	}
	else if(1 != $all_pages_counts)
	{
		if($cstarts >= $all_pages_counts)
			$next_rel = '';
		else
			$next_rel = PHP_EOL . '<link rel="next" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstarts + 1) .'">';
		
		if($cstarts == 2)
			$prev_rel = PHP_EOL . '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat . '">';
		else
			$prev_rel = PHP_EOL . '<link rel="prev" href="'. $config['http_home_url'] . $cat_cat .  'page/'. ($cstarts - 1) .'">';
	}
	
	$metatags .= $prev_rel . $next_rel;
}


на всех страницах пагинации только тег prev есть.

muspeso
Юзер

muspeso - 26 мая 2017 15:24 -

PunPun, Добрый день, как сделать чтобы rel="canonical" не отображался на основной странице категории?

OlegVVV, открыть /engine/engine.php найти :

if ($canonical) {

Выше вставить :

if($dle_module == "cat") $metatags .= PHP_EOL . "<link rel=\"canonical\" href=\"http://site.ru/{$cat_info[$category_id][alt_name]}/\">";

womenup
Юзер

womenup - 17 мая 2017 13:44 -

womenup, естественно я вас отблагодарю =)

slaze
Юзер

slaze - 21 мая 2020 13:09 -

Большое спасибо за решение. Единственный момент, когда в dle включен кеш, заходишь на страницу - все нормально, теги rel="next" и rel="prev" присутствуют, обновляешь через F5 и их нету. Такое происходит рандомно на разных страницах. Я так понимаю эти теги не попадают в кеш dle. Можно как это решить?
p.s. я реализовал данный хак через плагин dle, версия 14.0

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх