Не зарегистрирован
Вход
Забыли пароль?
Регистрация
Подписаться
Сэкономьте время — перед вопросом на форуме узнайте, как найти ответ быстрее
По техническим проблемам необходимо обращаться в Консультационный центр

Поиск по форуму: 

Приглашаем в блог Amiro.CMS. Регулярные обзоры, опыт, решения, практикумы.

Форум  ->   Разработка плагинов, вопросы по API  ->  Создание канонических ссылок на страницах сайта

Раздел для разработчиков. Обсуждение создания плагинов, вопросы и пожелания по API Amiro.CMS

Добавлено: 08.08.14 14:43:28 #1



Регистрация: 07.08.14
Сообщений: 16


Обратиться по имени

Бодрый день! Хочу создать канонические ссылки для страниц сайта http://help.yandex.ru/webmaster/controlling-robot/html.xml#canonical. Но пока не пойму какие методы API для этого можно применить. Есть ли какой-нибудь метод чтобы можно было получить текущий URL без параметров после знака "?" в адресной строке. Или может есть возможность создать доп.поле (свойство) "Каноническая ссылка" потом выводит значение этого свойства в основной макет страницы?

В документаци видел пару вот таких методов:


// Generates item module front link.
public getFrontLink ( ) returns string;

// Generates item full front URL.
public getFullURL ( ) returns string;

пока не использовал, не знаю можно ли писать php в HEAD блок основного макета страницы и как точно вызывать этот метод $this->getFullURL() или что-то такое?



Добавлено: 08.08.14 15:35:09 #2

Амиро



Регистрация: 21.03.07
Сообщений: 258


Обратиться по имени

Уточните, для каких типов страниц требуются ссылки, только для карточек товаров в каталоге?
Например, страницы со списком элементов обязаны содержать GET-параметры.



Добавлено: 08.08.14 16:27:10 #3



Регистрация: 07.08.14
Сообщений: 16


Обратиться по имени

В основном для карточек товаров + несколько информационных страниц с текстами и какими-нибудь отдельными карточками.



Добавлено: 11.08.14 13:03:39 #4

Амиро



Регистрация: 21.03.07
Сообщений: 258


Обратиться по имени

На странице документации опубликовали пример для добавления канонических ссылок карточкам товаров.



Добавлено: 19.08.14 16:57:29 #5



Регистрация: 07.08.14
Сообщений: 16


Обратиться по имени

Антон, Скажите а как расширить условие таким образом чтобы rel="canonical" проставлялся на всех страницах в URL которых нет никаких

параметров, т.е. без "?param_name=param_value&..." ?



Добавлено: 21.08.14 11:59:36 #6

Амиро



Регистрация: 21.03.07
Сообщений: 258


Обратиться по имени

Большинство таких страниц и так закрыто от индексирования поисковыми роботами, поэтому rel="canonical" особого смысла для них не имеет.

AMI::getSingleton('env/request')->getURL('uri')
содержит всю необходимую информацию.



Добавлено: 21.08.14 15:23:15 #7



Регистрация: 07.08.14
Сообщений: 16


Обратиться по имени

Антон, Спасибо! Честно говоря не особенно понимаю смысл rel="canonical", я просто выполняю задачу сеошника, а она сказала "НОДО!" )))



Добавлено: 15.09.14 11:38:38 #8



Регистрация: 07.08.14
Сообщений: 16


Обратиться по имени

Что то мне так и не удалось применить
AMI::getSingleton('env/request')->getURL('uri')
в своём коде.



Добавлено: 15.09.14 11:46:19 #9

Амиро



Регистрация: 21.03.07
Сообщений: 258


Обратиться по имени

Опишите проблему более подробно.



Добавлено: 15.09.14 11:52:58 #10



Регистрация: 07.08.14
Сообщений: 16


Обратиться по имени

Я воспользовался вашим кодом
function cstGetCanonicalProductURL(){
    $html = '';

    if(
        // проверяем, что находимся в каталоге товаров
        'eshop_item' == AMI_Registry::get('page/modId') &&
        // проверяем, что находимся на странице карточки товара
        AMI_Registry::get('page/itemId') > 0
    ){
	$oTable = AMI::getResourceModel(
            'eshop_item/table',
                array(
                    array(
                        'extModeOnConstruct' => 'common'
                    )
                )
            );
	$oItem = $oTable->find(AMI_Registry::get('page/itemId'));
        $url = AMI_Registry::get('path/www_root') . $oItem->getFullURL();
        $html = '<link rel="canonical" href="' . $url . '"/>';
    }
    
    return $html;
}


вставил его в "_local/front_functions.php" b канонические сслки добавились в каточки товаров. Но их так же неплохо было бы добавить в разделов каталога, при этом если в URL появлялись бы параметры постраничной навигации например или фильтра раздела, rel="canonical" пропадал. Я пробовал поменять условие вышеприведённой функции с помощью
AMI::getSingleton('env/request')->getURL('uri')
, но толи я что-то не правильно делаю, толи вне сюда AMI::getSingleton('env/request'->getURL('uri' ничего неприходит. Я могу например в _local/front_functions.php тупо через var_dump() вывести содержимое AMI::getSingleton('env/request'->getURL('uri' ? Честно говоря не разбирался глубоко в Amiro. не знаю порядок исполнения файлов.



Добавлено: 15.09.14 12:20:56 #11

Амиро



Регистрация: 21.03.07
Сообщений: 258


Обратиться по имени

Надеюсь, не забыли добавить обработчик события
AMI_Event::addHandler('v5_on_apply_data', 'cstV5OnApplyData', AMI_Event::MOD_ANY);
function cstV5OnApplyData($name, array $aEvent, $handlerModId, $srcModId){
    if('page_layouts' == $aEvent['type']){
        $html = cstGetCanonicalProductURL();
        if($html){
            $aEvent['aData']['html_head_tail'] .= $html;
        }
    }

    return $aEvent;
}


Для проверки, находитесь ли в разделе каталога, можно заменить проверку
AMI_Registry::get('page/itemId') > 0
на
(AMI_Registry::get('page/itemId') > 0 || AMI_Registry::get('page/catId') > 0)


Так же не забывайте, что система кэширует страницы, на время разработки можно отключить кэш (Панель управления / Сервис / Настройка системы / "Система: общие настройки", раздел "Системные настройки" или "Отладка".



Добавлено: 15.09.14 13:56:26 #12



Регистрация: 07.08.14
Сообщений: 16


Обратиться по имени

Спасибо большое! попробую! )) Про события забыл





Создать новую тему

Всего тем: 6587
Всего сообщений: 27636
Всего зарегистрированных пользователей: 47877
Последний зарегистрированный пользователь: user5302684462