Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Recommended Posts

Помогите пожалуйста реализовать более оптимизированую пагинацию в Opencart 1.5.1.3 а также в ocStore 0.2.0, а именно добавить атрибуты rel next и rel prev.

Суть подробно описана тут, если вкратце, что нужно реализовать:

Использование rel=“next|prev”

Допустим, у вас есть контент и он представлен следующим образом:

www.example.com/category/?page=1

www.example.com/category/?page=2

www.example.com/category/?page=3

www.example.com/category/?page=4

В раздел <head> на первой странице, www.example.com/category/?page=1, необходимо включить в следующий блок:

<link rel="next" href="http://www.example.com/category/?page=2" />

На второй странице, www.example.com/category/?page=2:

<link rel="prev" href="http://www.example.com/category/?page=1" />

<link rel="next" href="http://www.example.com/category/?page=3" />

На третьей странице, www.example.com/category/?page=3:

<link rel="prev" href="http://www.example.com/category/?page=2" />

<link rel="next" href="http://www.example.com/category/?page=4" />

А на последней странице, www.example.com/category/?page=4:

<link rel="prev" href="http://www.example.com/category/?page=3" />

Помогите, очень нужно!

Если еще кто подскажет, как для таких страниц настроить ЧПУ - буду премного благодарен!

Надіслати
Поділитися на інших сайтах


v1.5.1.3

systemlibrarypagination.php, 67

$output .= ' <a '.($page == $i-1 ? 'rel="next" ' : ($page == $i+1 ? 'rel="prev" ' : '')).'href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a> ';

Да, но вроде эту информацию необходимо добавить в раздел <head>. Ссылка на оф. сайт про эти параметры

Надіслати
Поділитися на інших сайтах


Да, но вроде эту информацию необходимо добавить в раздел <head>. Ссылка на оф. сайт про эти параметры

да, на хабре ни слова про head. тогда вышеприведенный код бесполезен
Надіслати
Поділитися на інших сайтах

да, на хабре ни слова про head. тогда вышеприведенный код бесполезен

Извиняюсь, что не до конца разъяснил о чем речь...

Это реально реализовать?

Надіслати
Поділитися на інших сайтах


  • 3 months later...
  • 5 months later...

Присоединяюсь к вопросу ) У кого-нибудь есть наработки? А то у самого руки до всего не дойдут..

посмотрите тут , по-моему то, что нужно.

  • +1 1
Надіслати
Поділитися на інших сайтах


Не работает , во всяком случае на 1.5.4.1

По идее проще добавить необходимые теги в этот div

в теги div не получится. нужно в область <head> </head> да ещё и с тегом <link>

Надіслати
Поділитися на інших сайтах


в теги div не получится. нужно в область <head> </head> да ещё и с тегом <link>

https://chrome.googl...nhcfombgmmfglho

1beaeba7fae448e1a3c298af080718c1.png

upd: оказалось, что это подсвечивал не nofollow, а noindex

Надіслати
Поділитися на інших сайтах

  • 2 months later...

итак /system/library/pagination.php

...

Это вы сообщение из темы про дубли не поленились переписать по своему icon_e_smile.gif? В любом случае - способ внедряли где-то (если да, то какие результаты)? У меня, несмотря на формальную точность, гугл вебмастер все равно показывает дубли тайтлов и мета-тегов на страницах одной категории, так что даже не знаю, можно ли считать этот способ рабочим

Надіслати
Поділитися на інших сайтах

  • 2 years later...

Приветствую.

 

Да, действительно, это очень важно для google, и совершенно бесполезное занятие для яндекс. Всё же мне удалось победить. В результате у меня в head добавляется всё правильно :)

 

Итак.

 

catalog/controller/product/category.php

 

Ищем строку:

$this->data['pagination'] = $pagination->render();

Сразу после нее вставляем:

$this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. $pagination->page), 'canonical'); if($pagination->limit && ceil($pagination->total / $pagination->limit) > $pagination->page) { $this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. ($pagination->page + 1)), 'next'); } if($pagination->page > 1) { $this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. ($pagination->page - 1)), 'prev'); }

В итоге (для примера), если мы находимся на 4 странице, то в коде раздела head у нас будут строки:

<link  rel="canonical" href="ваш_сайт/?page=4" />
<link  rel="next" href="ваш_сайт/?page=5" />
<link  rel="prev" href="ваш_сайт/?page=3" />

P.S. Версия: 1.5.6.4

 

P.P.S. Если по каким-то причинам у вас не получается, то хотя бы сделайте уникальные title. 

Надіслати
Поділитися на інших сайтах


  • 2 months later...

 

В итоге (для примера), если мы находимся на 4 странице, то в коде раздела head у нас будут строки:

<link  rel="canonical" href="ваш_сайт/?page=4" />
<link  rel="next" href="ваш_сайт/?page=5" />
<link  rel="prev" href="ваш_сайт/?page=3" />

P.S. Версия: 1.5.6.4

 

P.P.S. Если по каким-то причинам у вас не получается, то хотя бы сделайте уникальные title. 

 

Добрый день, подскажите как сделать такое же, только убрать <link  rel="canonical" href="ваш_сайт/?page=4" /> ? только

<link  rel="next" href="ваш_сайт/?page=5" />

<link  rel="prev" href="ваш_сайт/?page=3" />

Надіслати
Поділитися на інших сайтах


Кому интересно, использовал вот этот метод http://blog.denver.zp.ua/opencart-link-rel-next-rel-prev/ . Единственный вопрос в том, что сейчас со второй страницы на родительскую ссылается вот так http://site.com/category/?page=1 пытаюсь решить.

Надіслати
Поділитися на інших сайтах


Кому интересно, использовал вот этот метод http://blog.denver.zp.ua/opencart-link-rel-next-rel-prev/ . Единственный вопрос в том, что сейчас со второй страницы на родительскую ссылается вот так http://site.com/category/?page=1 пытаюсь решить.

Вопрос решился, добавил небольшой кусочек кода. Подскажите теперь такой вопрос, как сделать чтобы были относительные ссылки в пагинации, а не абсолютные, т.е. без полного названия сайта, т.к. есть <base href="http://site.com/" />

Надіслати
Поділитися на інших сайтах


  • 1 month later...

 

Приветствую.

 

Да, действительно, это очень важно для google, и совершенно бесполезное занятие для яндекс. Всё же мне удалось победить. В результате у меня в head добавляется всё правильно :)

 

Итак.

 

catalog/controller/product/category.php

 

Ищем строку:





$this->data['pagination'] = $pagination->render();

Сразу после нее вставляем:





$this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. $pagination->page), 'canonical'); if($pagination->limit && ceil($pagination->total / $pagination->limit) > $pagination->page) { $this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. ($pagination->page + 1)), 'next'); } if($pagination->page > 1) { $this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. ($pagination->page - 1)), 'prev'); }

В итоге (для примера), если мы находимся на 4 странице, то в коде раздела head у нас будут строки:





<link  rel="canonical" href="ваш_сайт/?page=4" />
<link  rel="next" href="ваш_сайт/?page=5" />
<link  rel="prev" href="ваш_сайт/?page=3" />

P.S. Версия: 1.5.6.4

 

P.P.S. Если по каким-то причинам у вас не получается, то хотя бы сделайте уникальные title. 

 

 

В решении один маленький недостататок, на первой странице категории ?page=1" rel="canonical"

Змінено користувачем LuckySrG
Надіслати
Поділитися на інших сайтах


Решение для категорий, акций и производителя

cannonical ставит только страницы кагинации, на первую страницу категории правильный url, для vqmod

	<file name="catalog/controller/product/category.php">	
		<operation>
			<search position="after"><![CDATA[$this->data['pagination'] = $pagination->render();]]></search>
			<add><![CDATA[
			if($pagination->page > 1) {$this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. $pagination->page), 'canonical') ;}
			if($pagination->limit && ceil($pagination->total / $pagination->limit) > $pagination->page) { $this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. ($pagination->page + 1)), 'next'); } 
			if($pagination->page == 2) { $this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url), 'prev'); }
			if($pagination->page > 2) { $this->document->addLink($this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page='. ($pagination->page - 1)), 'prev'); }
			]]></add>
		</operation>
	</file> 
	
 	<file name="catalog/controller/product/manufacturer.php">	
		<operation>
			<search position="after"><![CDATA[$this->data['pagination'] = $pagination->render();]]></search>
			<add><![CDATA[
			if($pagination->page > 1) {$this->document->addLink($this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url . '&page='. $pagination->page), 'canonical') ;}
			if($pagination->limit && ceil($pagination->total / $pagination->limit) > $pagination->page) { $this->document->addLink($this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url . '&page='. ($pagination->page + 1)), 'next'); } 
			if($pagination->page == 2) { $this->document->addLink($this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url), 'prev'); }
			if($pagination->page > 2) { $this->document->addLink($this->url->link('product/manufacturer/info', 'manufacturer_id=' . $this->request->get['manufacturer_id'] . $url . '&page='. ($pagination->page - 1)), 'prev'); }
			]]></add>
		</operation>
	</file> 
	 
 	<file name="catalog/controller/product/special.php">	
		<operation>
			<search position="after"><![CDATA[$this->data['pagination'] = $pagination->render();]]></search>
			<add><![CDATA[
			if($pagination->page > 1) {$this->document->addLink($this->url->link('product/special' . $url . '&page='. $pagination->page), 'canonical') ;}
			if($pagination->limit && ceil($pagination->total / $pagination->limit) > $pagination->page) { $this->document->addLink($this->url->link('product/special' . $url . '&page='. ($pagination->page + 1)), 'next'); } 
			if($pagination->page == 2) { $this->document->addLink($this->url->link('product/special' . $url), 'prev'); }	
			if($pagination->page > 2) { $this->document->addLink($this->url->link('product/special' . $url . '&page='. ($pagination->page - 1)), 'prev'); }		
			]]></add>
		</operation>
	</file> 
  • +1 2
Надіслати
Поділитися на інших сайтах


  • 4 months later...

Спасибо за статью.

 

Небольшое дополнение.

 

Я отключил у себя //if($pagination->page > 1) {$this->document->addLink($this->url->link('product/special' . $url . '&page='. $pagination->page), 'canonical') ;}

С точки зрения Google ставить "canonical" в данном случае не правильно.

Google рекомендует указывать "canonical" только для страницы "?page=all", если есть возможность её отображать. Если нет то только "prev" и "next".

Надіслати
Поділитися на інших сайтах


  • 1 month later...

Но вопрос: А не правильнее ли будет указывать канонической ссылкой, категорию товаров?

Нет, не правильно. 

Каноникл, он для борьбы с дублями.

У Вас же страницы пагинации разные, правильно? Тогда при чём здесь каноникл?

Пагинация, это разделение целого на части. Но не повторение одного и того же. Правда, Платон этого не знает :-D . 

Надіслати
Поділитися на інших сайтах


  • 2 months later...

подскажите пж как исправить пагинацию под opencart 2.0.3.1

 

Пробовал так не работает.

 

Заходим в /system/library/pagination.php

 

находим

 

if ($page > 1) {
$output .= ' <a href="' . str_replace('{page}', 1, $this->url) . '">' . $this->text_first . '</a> <a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a> ';
}

 

 

меняем

if ($page > 1) {
$tmp_url = str_replace('&', '&', $this->url);
    $output .= ' <a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_first . '</a>';
if ($page == 2){
    $output .= '<a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $this->text_prev . '</a> ';
    }else{
$output .= '<a href="' . str_replace('{page}', $page - 1, $this->url) . '">' . $this->text_prev . '</a> ';
    }
}

и чуть ниже, вместо:

for ($i = $start; $i <= $end; $i++) {
if ($page == $i) {
    $output .= ' <b>' . $i . '</b> ';
} else {
$output .= ' <a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a> ';
}
}

вставляем это:

for ($i = $start; $i <= $end; $i++) {
    if ($page == $i) {
     $output .= ' <b>' . $i . '</b> ';
    } elseif($i == 1) {
     $output .= ' <a href="' . str_replace('&', '&', rtrim( str_replace('page={page}', '', $tmp_url), '?&')) . '">' . $i . '</a> ';
    } else {
    $output .= ' <a href="' . str_replace('{page}', $i, $this->url) . '">' . $i . '</a> ';
    }
}

не работает в head нету 

 

<link  rel="next" href="ваш_сайт/?page=5" />
<link  rel="prev" href="ваш_сайт/?page=3" />
Надіслати
Поділитися на інших сайтах


  • 1 year later...
В 27.01.2016 в 11:50, T1mon сказал:

Я отключил у себя //if($pagination->page > 1) {$this->document->addLink($this->url->link('product/special' . $url . '&page='. $pagination->page), 'canonical') ;}

С точки зрения Google ставить "canonical" в данном случае не правильно.

Google рекомендует указывать "canonical" только для страницы "?page=all", если есть возможность её отображать. Если нет то только "prev" и "next".

А подскажите, пожалуйста, для "чайника" - что значит "отключил" - какую строчку на какую мне заменить?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.