Авторизация

Добавляем в вывод страницы тэг сanonical UMI CMS

Добавляем в выводимый шаблон тэг сanonical который будет реагировать на параметр пагинации в адресной строке - ?p=

Создаём файлы
/templates/website/classes/modules/content/class.php
/templates/website/classes/modules/content/events.php

В class.php вставляем код:

/*
rel canonical использует 2 метода: onUmiSpecSeoCanonicalBuffer и getCanonicalLink, параметры хранятся в переменной $allowedParams
В config.ini -> buffer-send-event-enable = "1"
В events.php добавить new umiEventListener('systemBufferSend', 'content', 'onUmiSpecSeoCanonicalBuffer');
*/
public function onUmiSpecSeoCanonicalBuffer(iUmiEventPoint $eventPoint) {
	/*if(self::$bufferModified) {
		return false;
	}*/
	$regedit = isset($this->regedit) ? $this->regedit : regedit::getInstance();
	/*if(!$regedit->getVal(self::registry_canonical_enabled)) {
		return false;
	}*/
	$cmsController = isset($this->cmsController) ? $this->cmsController : cmsController::getInstance();
	if($cmsController->getCurrentMode() !== '') {
		return false;
	}
	$buffer = &$eventPoint->getRef('buffer');
	if(strpos($buffer, 'rel="canonical"') !== false || strpos($buffer, "rel='canonical'") !== false) {
		return false;
	}
	$link = $this->getCanonicalLink();
	$buffer = str_replace('</head>', '<link rel="canonical" href="' . $link . '" /></head>', $buffer);
	//self::$bufferModified = true;
}

public function getCanonicalLink() {
	$requestUri = getServer('REQUEST_URI');
	if(!$requestUri) {
		return false;
	}
    $parsed = @parse_url($requestUri);
    $baseLink = getArrayKey($parsed, 'path');
    $cmsController = isset($this->cmsController) ? $this->cmsController : cmsController::getInstance();
    $regedit = isset($this->regedit) ? $this->regedit : regedit::getInstance();
    $domain = $cmsController->getCurrentDomain()->getCurrentHostName();
    $params = array();
    $query = getArrayKey($parsed, 'query');
    if ($query) {
    	parse_str($query, $params);
        if (isset($params['p'])) 
            unset($params['p']);
        if (isset($params['xmlMode'])) 
            unset($params['xmlMode']);
        //$allowedParams = $regedit->getVal(self::registry_canonical_allowed_params);
        $allowedParams = "p";
        if($allowedParams) {
            $allowedParams = array_map('trim', explode(',', $allowedParams));
            $newParams = array();
            foreach($params as $param => $value) {
                if(!in_array($param, $allowedParams)) {
                    continue;
                }
                $newParams[$param] = $value;
            }
            $params = $newParams;
        }
    }
    
    // Загружает из config.ini https или http
    $config = mainConfiguration::getInstance();
    $serverProtocol = $config->get('system', 'server-protocol');
    
    $link = $serverProtocol . '://' . $domain . $baseLink;
    if($params) {
    	$link .= '?'. http_build_query($params);
    }
    $eventPoint = new umiEventPoint('umiSpecSeoGenerateCanonicalLink');
    $eventPoint->setMode('process');
    $eventPoint->setParam('domain', $domain);
    $eventPoint->setParam('params', $params);
    $eventPoint->setParam('baseLink', $baseLink);
    $eventPoint->addRef('link', $link);
    $eventPoint->call();
    return $link;
}

В events.php добавляем:

new umiEventListener('systemBufferSend', 'content', 'onUmiSpecSeoCanonicalBuffer');

[ Saitadmin.ru || с 2006 по текущий год || Санкт-Петербург ]