Skip to content

Instantly share code, notes, and snippets.

@Isa3v
Last active January 15, 2025 13:27
Show Gist options
  • Save Isa3v/fe461020414c23fb7553ef6c0aed7099 to your computer and use it in GitHub Desktop.
Save Isa3v/fe461020414c23fb7553ef6c0aed7099 to your computer and use it in GitHub Desktop.
Пагинация в мета-тегах и h1 (Bitrix)

Пагинация в мета-тегах, h1 + canonical (Bitrix)

Задача:

*Добавить на страницах пагинации в title, description и h1 приписку с номером страницы

Решение:

*В bitrix/php_interface/init.php (если нет, то создаем) добавляем в конец функцию разбирающая мета-теги и собирающая обратно

Событие "OnEpilog" вызывается в конце визуальной части эпилога сайта. (После того как битрикс получит уже все данные страницы)

<?php
//Добавляем в конец init.php
AddEventHandler('main', 'OnEpilog', 'orPagenMeta');
function orPagenMeta() {
if ($page = preg_grep("/PAGEN_(.*)/i", array_keys($_REQUEST))) {
$page = intval($_REQUEST[reset($page)]);
// canonical
$GLOBALS['APPLICATION']->SetPageProperty('canonical',((!empty($_SERVER["HTTPS"])) ? "https://" : "http://") . $_SERVER['SERVER_NAME'].$GLOBALS['APPLICATION']->sDirPath ,true);
//h1
$GLOBALS['APPLICATION']->SetTitle($GLOBALS['APPLICATION']->GetTitle(false) . ' — Страница ' . $page;
//title
$title = $GLOBALS['APPLICATION']->GetProperty('title');
$GLOBALS['APPLICATION']->SetPageProperty('title', $title . ' — Страница ' . $page);
//description
$description = $GLOBALS['APPLICATION']->GetProperty('description');
$GLOBALS['APPLICATION']->SetPageProperty('description', $description . ' — Страница ' . $page);
}
}
@Isa3v
Copy link
Author

Isa3v commented Jun 20, 2019

Но что-то не сработало и пока не могу разобраться. Может быть вы что-то посоветуете?
init.php без привязки к событию выполняется до компонента да и в любом случае переменную не глобальную он не получит.

А вообще можно проверку для пагинации по типу вашей сразу на 404 выводить:

if($current_page > $quantity_pages){
\Bitrix\Iblock\Component\Tools::process404();
}

Да и куча тем было на форумах битрикса

@domosed1963
Copy link

Сработал вот такой код в init.php.
<? AddEventHandler("main", "OnEpilog", "valery_page_epilog"); function valery_page_epilog() { global $APPLICATION; //Проверка на 404 страницу $is_page_404 = false; if(defined("ERROR_404")==true) $is_page_404 = true; //Добавление тегов rel=canonical: начало if($is_page_404==false ) { $page_content = ob_get_contents(); if($page_content!=false && strpos($page_content, '<!-- has_stranation_pagen_1 -->')!==false) { //canonical на существующей странице $GLOBALS['APPLICATION']->SetPageProperty('canonical',(($_SERVER["HTTPS"] == "on") ? "https://" : "http://") . $_SERVER['SERVER_NAME'].$GLOBALS['APPLICATION']->GetCurPageParam("", array ("num", "sort", "view", "order", "back_url_admin", "clear_cache")) ,false); } elseif(strpos($page_content, '<!-- it_more_page_stranation -->')) //canonical на не существующей странице { $GLOBALS['APPLICATION']->SetPageProperty('canonical',(($_SERVER["HTTPS"] == "on") ? "https://" : "http://") . $_SERVER['SERVER_NAME'].$GLOBALS['APPLICATION']->GetCurPageParam("", array ("PAGEN_1", "num", "sort", "view", "order", "back_url_admin", "clear_cache")) ,false); } } } //Добавление тегов rel=canonical: конец ?>
Или 404 можно.
//404 на не существующей странице $GLOBALS['APPLICATION']->SetPageProperty('canonical',(($_SERVER["HTTPS"] == "on") ? "https://" : "http://") . $_SERVER['SERVER_NAME'].$GLOBALS['APPLICATION']->GetCurPageParam("", array ("num", "sort", "view", "order", "back_url_admin", "clear_cache")) ,false); } elseif(strpos($page_content, '<!-- it_more_page_stranation -->')) Bitrix\Iblock\Component\Tools::process404( 'Не найден', //Сообщение true, // Нужно ли определять 404-ю константу true, // Устанавливать ли статус true, // Показывать ли 404-ю страницу false // Ссылка на отличную от стандартной 404-ю ); } } //Добавление тегов rel=canonical: конец ?>

@violentino
Copy link

Пролистав over 200 страниц, я наткнулся на это хорошее решение. Благодарю вас от всей души.

@glsem
Copy link

glsem commented Dec 19, 2024

Все ок, спасибо! Только на 10 строчке пропустили скобку

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment