CMS Eleanor - Поиск
Полная версия этой страницы: Официальный форум Eleanor CMS » Добавление поддержки rel="canonical" в RC5
Официальный форум Eleanor CMS » Поддержка пользователей системы Eleanor CMS » Секреты и советы
Loader
В этой теме расскажу как добавить в RC5 поддержку этого очень нужного тега, ведь система позволяет генерировать много дублей одной страницы.
Во-первых откроем свой файл classes/mainclass.php, найдём строку примерно 202 и после строки
Цитата
$site_path='',#Ч. Каталог сайта
добавим строку
Цитата
$origurl=null,# нужен для поддержки rel="canonical"

Во-вторых открываем файл index.php в корне сайта ищем сроку примерно 253 и после     
Цитата
.(isset($head_addon) ? "\r\n".$head_addon."\r\n" : '');
добавляем:
Цитата
#Если модулем задан оригинальный URL страницы, сравним его с полученным
            if(isset($Mainclass->origurl))
            {
                $u=$Mainclass->origurl;
                $ru=ELEANOR_PROTOCOL.$Mainclass->domain.$Mainclass->site_path.$_SERVER['REQUEST_URI'];
                if(ELEANOR_CHARSET!='utf-8')
                {
                    $u=mb_convert_encoding($u,ELEANOR_CHARSET,'utf-8');
                    $ru=mb_convert_encoding($ru,ELEANOR_CHARSET,'utf-8');
                }
                if($u!=$ru)
                    $head.='<link rel="canonical" href="'.$u.'" />'."\r\n";
            }


Теперь нам осталось в нужном месте сообщить системе оригинальный урл для поисковиков.
Для модуля новости это будет выглядеть так: открываем файл news/user/index.php и после строки 540 перед Head(); вставляем:


Цитата
#Сообщим оригинальный URL страницы
$link=ELEANOR_PROTOCOL.$Mainclass->domain.$Mainclass->site_path.$Mainclass->vars['url_static_delimeter'].($Mainclass->vars['m_news_long_url'] ? $Mainclass->Categories_l->CategoryUrl($arr['main_cat'],'','',false) : '').$Mainclass->Url->ConstructUrl(array(array($arr['url'],'nid'=>$arr['id'])),!$Mainclass->vars['m_news_long_url']);

$Mainclass->origurl=$link;


Вот на этом всё. Добавить этот тэг можно в любой модуль, нужно только сообщать системе оригинальный УРЛ.
mrdimshop
Можно пример. И для чего это нужно что то я не понял.
Loader
Цитата (mrdimshop @ 2021-01-23 13:01)
Можно пример. И для чего это нужно что то я не понял.

Вот для чего: http://forum.eleanor-cms.ru/index.php?showtopic=300
mrdimshop
Добавляю #Сообщим оригинальный URL страницы
$link=ELEANOR_PROTOCOL.$Mainclass->domain.$Mainclass->site_path.$Mainclass->vars['url_static_delimeter']</span>.($Mainclass->vars['m_news_long_url'] ? $Mainclass->Categories_l->CategoryUrl($arr['main_cat'],'','',false) : '').$Mainclass->Url->ConstructUrl(array(array($arr['url'],'nid'=>$arr['id'])),!$Mainclass->vars['m_news_long_url']);

$Mainclass->origurl=$link;


контент сайта пропадает. новерно потому что у меня не ньюс а serialy. Подправь пожалуйста для меня.
Djadka
Цитата (mrdimshop @ 2011-08-18, 7:43)
Добавляю #Сообщим оригинальный URL страницы
$link=ELEANOR_PROTOCOL.$Mainclass->domain.$Mainclass->site_path.$Mainclass->vars['url_static_delimeter</span>']</span>.($Mainclass->vars['m_news_long_url'] ? $Mainclass->Categories_l->CategoryUrl($arr['main_cat'],'','',false) : '').$Mainclass->Url->ConstructUrl(array(array($arr['url'],'nid'=>$arr['id'])),!$Mainclass->vars['m_news_long_url']);

$Mainclass->origurl=$link;


контент сайта пропадает. новерно потому что у меня не ньюс а serialy. Подправь пожалуйста для меня.

$link=ELEANOR_PROTOCOL.$Mainclass->domain.$Mainclass->site_path.$Mainclass->vars['url_static_delimeter']</span>.($Mainclass->vars['m_news_long_url'] ? $Mainclass->Categories_l->CategoryUrl($arr['main_cat'],'','',false) : '').$Mainclass->Url->ConstructUrl(array(array($arr['url'],'nid'=>$arr['id'])),!$Mainclass->vars['m_news_long_url']);


</span> удалить надо
mrdimshop
Удалил все ровно не получилось.
Djadka
А чё пишет?
mrdimshop
Цитата (Djadka @ 2011-08-18, 17:43)
А чё пишет?


На главной у меня выводятся новости а как встовляю код все остается на месте а новости пропадают.
Djadka
Печалька, видать отключено оповещение об ошибках
mrdimshop
Цитата (Djadka @ 2011-08-18, 18:03)
Печалька, видать отключено оповещение об ошибках


Зайди в асю я тебе свой файл кину может наколдуешь мне решение. :rolleyes:
Djadka
39пять820трипятьпять
mrdimshop
Цитата (Djadka @ 2011-08-18, 18:42)
39пять820трипятьпять


Спасибо работает.
Loader
Цитата (mrdimshop @ 2021-01-23 13:01)
контент сайта пропадает.

Цитата (Djadka @ 2021-01-23 13:01)
</span> удалить надо

Я извиняюсь за SPAN , просто при редактировании этот форум пихает этот спан по своему усмотрению куда надо и не надо!

Теперь продолжим: исключение дублей главной страницы:

Открываем файл modules/mainpage/user/index.php и перед Head(); вставим:
Цитата
#Сообщим оригинальный URL страницы
        $Mainclass->origurl=ELEANOR_PROTOCOL.$Mainclass->domain.$Mainclass->site_path.$Mainclass->vars['url_static_delimeter'];

Теперь все дубли главной, такие как site/index.html или site/index.php будут содержать тэг
Цитата
<link rel="canonical" href="http://site/" />
Loader
Добавление поддержки rel="canonical" в любой модуль, использующий страницы (pages), а практически все модули их используют.

Открываем файл ваш_сайт/classes/class_strings.php и примерно на 496 строке после
Цитата
$links=str_ireplace('%7Bpage%7D','{page}',$links);
вставим это:
Цитата
//Сообщим оригинальный URL страницы
if (is_array($link_arr))
$Mainclass->origurl=ELEANOR_PROTOCOL.$Mainclass->domain.$Mainclass->site_path.$Mainclass->vars['url_static_delimeter'].$Mainclass->Url->ConstructUrl(array_merge($link_arr,array(array('page'=>empty($_GET['page']) ? false : (int)$_GET['page']))));
// end
                

Теперь практически во всех модулях поддерживается этот нужный тэг! :crazy:

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.