Атрибут rel="canonical"

#
Re: Атрибут rel="canonical"
Я попробовал так. Пишет ошибку.
#
Re: Атрибут rel="canonical"
Большое Спасибо Kotoff за его полезные советы. Не в первый раз пользуюсь его подсказками.
Кстати хотел бы добавить небольшую поправку. В строке:  return 'http://' . $oSite_Alias->name . $sLink; указано, что каноническими будут страницы http:// , если у вас https:// просто поменяйте
#
Re: Атрибут rel="canonical"

<?php
if (is_object(Core_Page::instance()->object)
      && Core_Page::instance()->object instanceof Informationsystem_Controller_Show
      // Первая страница - 0
      && Core_Page::instance()->object->page > 0
)
{
   // Запрет индексации страниц /page-N/, чтобы они не шли в поисковый индекс
   ?>   <meta name="robots" content="noindex, follow"><?php
   echo PHP_EOL;
}
?>




<?php
if (is_object(Core_Page::instance()->object)
      && Core_Page::instance()->object instanceof Shop_Controller_Show
      // Первая страница - 0
      && Core_Page::instance()->object->page > 0
)
{
   // Запрет индексации страниц /page-N/, чтобы они не шли в поисковый индекс
   ?>   <meta name="robots" content="noindex, follow"><?php
   echo PHP_EOL;
}
?>
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Атрибут rel="canonical"
Kotoff писал(а):
в очередной раз спасибо.
Но вот только как-то с такой логикой не заработало ((. Суть ведь в том что бы сгенерить ссылку без пейджинга для всех страниц с пагинацией.
В общем мой вариант
<?php

defined('HOSTCMS') || exit('HostCMS: access denied.');

/**
* Some useful helpers
*
* @package HostCMS 6\Core
* @version 6.x
* @author James V. Kotoff
* @copyright 2013-2015
* @access public free
*
* path to file: /modules/core/utils.php
*
*/
class Core_Utils
{
   /**
    * Core_Utils::getCanonicalUrl() - вычисляет канонический адрес страницы для link rel="canonical"
    *
    * @param boolean [$useParentShopItem = false] В интернет-магазине, для страниц товаров-модификаций считать каноническим урл родительского товара. По умолчанию выключено.
    * @param string [$sFirstPageSuffix = '/new_pp-'] Суффикс пейджинга на все страницы, удаляется из урла, чтобы каноническим урлом всех страниц был урл без пейджинга.
    * @return string
    *
    * @example:
    * <link rel="canonical" href="<?=Core_Utils::getCanonicalUrl(TRUE); ?>"/>
    *
    */
   static public function getCanonicalUrl($bUseParentShopItem = false, $sPageSuffix = '/page-')
   {
      $sLink = '';

      $object = Core_Page::instance()->object;
      // если включен режим подстановки родительского товара вместо модификации
      // и текущая страница является страницей товара в магазине
      if ($bUseParentShopItem && is_object($object) && $object instanceof Shop_Controller_Show && $object->item)
      {
         // получаем товар
         $oShop_Item = Core_Entity::factory('Shop_Item', $object->item);
         // если товар найден и это модификация
         if ($oShop_Item && $oShop_Item->modification_id)
         {
            // формируем относительный путь к родительскому товару
            $oShop = Core_Entity::factory('Shop', $oShop_Item->shop_id);
            $sLink = $oShop->Structure->getPath() . $oShop_Item->Modification->getPath();
         }
      }

      // если мы еще не вычислили ссылку ранее, то преобразуем текущий request_uri
      if (!$sLink) {
      
         $aLink = explode('?', Core_Array::get($_SERVER, 'REQUEST_URI', ''));
         // берем из URL все что до "?"
       $sLink = reset($aLink);
      
         // ищем первое вхождение
       $aFirstPos = strpos($sLink, $sPageSuffix);
       if ($aFirstPos) {   
            // если это пейджинг, то уберем его
            $sLink = mb_substr($sLink, 0, $aFirstPos+1);
         }
      }

      // получим главный алиас текущего сайта
      $oSite_Alias = Core_Entity::factory('Site', CURRENT_SITE)->getCurrentAlias();
      if($oSite_Alias) {

         // определим метод доступа у текущему узлу структуры, http или https
         $oStructure = Core_Entity::factory('Structure', CURRENT_STRUCTURE_ID);
         $scheme = $oStructure->https ? 'https' : 'http';

         // дополняем относительную ссылку до абсолютной
         $sLink = $scheme. '://' . $oSite_Alias->alias_name_without_mask . $sLink;
      }

      // вернем результат
      return $sLink;
   }

}
#
Re: Атрибут rel="canonical"
hostcms писал(а):

<!DOCTYPE html>
<html lang="ru">

<head>
   <?php
if (is_object(Core_Page::instance()->object)
      && get_class(Core_Page::instance()->object) == 'Shop_Controller_Show'
      // Первая страница - 0
      && Core_Page::instance()->object->page > 0
)
{
   // Запрет индексации страниц /page-N/, чтобы они не шли в поисковый индекс
   ?>   <meta name="robots" content="noindex, follow"><?php
   echo PHP_EOL;
}
?>
    <link rel="shortcut icon" type="image/png" href="/faicon.png" />

Добавил в макет код, а ничего не изменилось. На страницах пагинации по прежнему robots" content="index
Можете прислать скрин куда вы добавили этот код? Я подозреваю, что добавил не туда.
#
Re: Атрибут rel="canonical"
Спец в чате подсказал как вычислить другой контроллер. Заменил Shop_Controller_Show на Template_Model, но все равно ничего не работает.
#
Re: Атрибут rel="canonical"
Skanavy,
Посмотрите в коде настроек ТДС магазина как контроллер называется
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
Авторизация