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

Как задать небольшое правило для исправления бага в rel="next" и rel="prev" для DLE 11?


     14.09.2016    Все вопросы » Общие вопросы по PHP    593

вопрос
В общем, всё работает отлично в данном коде на DLE 11, НО найден маленький баг: если допустим в категории 1-а страница (то есть, нету 2-ой страницы), то в head отображается:
<link rel="next" href="http://site.net/page/2/" />
хотя этой страницы нету!!! Следовательно нужно задать правило, что если в категории одна страница, значит тег rel="next" не добавляется. Программисты помогите пожалуйста доделать!

engine.php , находим:
if ($canonical) {

перед этим вставляем:
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;
}

Открываем /engine/modules/show.short.php находим :
$count_all = 0;

Ниже вставить :
$all_pages_counts = $count_all;

Ответил: Gameer


$all_pages_counts = $count_all;
заменить на :
$counts_all = $count_all;

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

ZeN41k
Юзер

ZeN41k - 15 сентября 2016 08:15 -

GAMEER, всё-равно отображается(

vitnet
Эксперт

vitnet - 19 сентября 2016 23:12 -


PunPun
Эксперт

PunPun - 19 сентября 2016 23:23 -

Вот весь рабочий код:
Открываем /engine/engine.php, находим код :
if ($canonical) {
если нету таковой строчки, значит у вас старая версия по этому ищите эту строчку :
if ($config['allow_rss']) $metatags .= <<
И выше вставить :
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;
}

Открываем /engine/modules/show.short.php находим :
$count_all = 0;
Ниже вставить :
$counts_all = $count_all;

Истина в противоречии.​

revived
Юзер

revived - 14 марта 2017 20:00 -

Gammer, я полностью вставил твой рабочий код, но на странице пагинации, например на второй и т.д. странице только <link rel="prev" и нет <link rel="next" - он отображается только на первой странице...

PunPun
Эксперт

PunPun - 14 марта 2017 20:44 -

revived, попробуйте этот код
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;
}
и очистье кэш

Истина в противоречии.​

revived
Юзер

revived - 14 марта 2017 20:56 -

Спасибо, сейчас все отлично отображает!

revived
Юзер

revived - 15 марта 2017 19:33 -

Еще вопрос по этому поводу, сSEOшники советуют доделать вот так:

Также, в коде страниц пагинации нужно указать каноническую ссылку, то есть первую страницу пагинации , в секции <head> нужно прописать следующее: <link rel="canonical" href="http://site.com/canonical-link.html"/> - то-есть это первая страницы пагинации (каноническая).

Возможно помочь? Заранее благодарен!

ZeN41k
Юзер

ZeN41k - 15 марта 2017 19:46 -

без этого можно обойтись , просто prev и next

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

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

наверх