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;
}
}