Битрикс метатеги для торговых предложений

Заменим метатеги для тороговых предложений, а также просто для любых элементов каталога.
Перед вызовом компонента элемент каталога («bitrix:catalog.element») сделаю проверку на offer, то бишь торг. предложение.


if(!empty($_GET['offer'])){
	$arParams["SET_TITLE"] = $arParams['SET_META_DESCRIPTION'] = $arParams['SET_META_KEYWORDS'] = $arParams['SET_BROWSER_TITLE'] = 'N';
}

Добавим параметры, если их нет


		"SET_META_DESCRIPTION" => $arParams['SET_META_DESCRIPTION'],
		"SET_META_KEYWORDS" => $arParams['SET_META_KEYWORDS'],
		"SET_BROWSER_TITLE" => $arParams['SET_BROWSER_TITLE'],
"SET_TITLE" => $arParams["SET_TITLE"],


Переходим в component_epilog.php элемента каталога, т.к. он срабатывает после кеша, напр. в отлич. от result_modifier.php или template.php . Находим метатеги ТП
Метатеги заполняются во вкладке SEO карточки товара. Храняться в таблице b_iblock_iproperty. Доступ к ним осуществляется так


$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($arElement["IBLOCK_ID"], $arElement["ID"]) 
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arSection["IBLOCK_ID"], $arSection["ID"]) 

Я вывел для offers(ТП). ID оффера я получаю через объект Контекста D7. Не забывайте подключать пространства имен объекта Приложение D7 (Application). Почитать подробнее можно здесь https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=3511&LESSON_PATH=3913.5062.3511


use Bitrix\Main\Application;

if (!empty(htmlspecialchars($_GET['offer']))) {
	$request = Application::getInstance()->getContext()->getRequest();
	$offer = htmlspecialchars($request->getQuery('offer'));

	$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues(IBLOCK_OFFERS_ID, $offer);
}

Если они есть, ставим их, если нет — проставляем SEO теги родит. элемента


	// метатеги для торговых предложений
	//  title
	if (isset($ipropValues) && !empty($ipropValues->getValues()["ELEMENT_PAGE_TITLE"])) {
		$APPLICATION->SetTitle($ipropValues->getValues()["ELEMENT_PAGE_TITLE"]);
		// здесь переменная для цепочки навигации
		$APPLICATION->chain_item = $ipropValues->getValues()["ELEMENT_PAGE_TITLE"];
	}else{
		$APPLICATION->SetTitle($arResult["NAME"]);
	}
	// browser title
	if (isset($ipropValues) && !empty($ipropValues->getValues()["ELEMENT_META_TITLE"])) {
		$APPLICATION->SetPageProperty("title", $ipropValues->getValues()["ELEMENT_META_TITLE"]);
	}else{
		$APPLICATION->SetPageProperty("title", $arResult["IPROPERTY_VALUES"]["ELEMENT_META_TITLE"]);
	}
	// keywords
	if (isset($ipropValues) && !empty($ipropValues->getValues()["ELEMENT_META_KEYWORDS"])) {
		$APPLICATION->SetPageProperty("keywords", $ipropValues->getValues()["ELEMENT_META_KEYWORDS"]);
	}else{
		$APPLICATION->SetPageProperty("keywords", $arResult["IPROPERTY_VALUES"]["ELEMENT_META_KEYWORDS"]);
	}
	// desc
	if (isset($ipropValues) && !empty($ipropValues->getValues()["ELEMENT_META_DESCRIPTION"])) {
		$APPLICATION->SetPageProperty("description", $ipropValues->getValues()["ELEMENT_META_DESCRIPTION"]);		
	}else{
		$APPLICATION->SetPageProperty("description", $arResult["IPROPERTY_VALUES"]["ELEMENT_META_DESCRIPTION"]);
	}

Находим компонент bitrix:breadcrumb и дополняем условие в его шаблоне


	if($arResult[$index]["LINK"] <> "" && $index != $itemSize-1){
}	
elseif (isset($APPLICATION->chain_item)) {
		$strReturn .= '
‘.$arrow.’ ‘.$APPLICATION->chain_item.’

‘; }

Вот и все.

2 Comments

  1. Делать запросы из component_epilog не правильно. Вы замедляете работу сайта без оснований. Как я понял вы хотите менять СЕО теги в зависимости от параметров URL. Можно сделать иначе.1. Организуйте, чтобы компонент кешировался спривязкой к параметру URL,. Для этого достаточно при подключении компонента bitrix:catalog.element добавить в массив параметров свой ключ. Например MY_REQUEST => $_GET[‘offer’].
    Далее в result_modifier получаете (если необходимы не текущие) SEO параметры для нужного элемента (так же при помощи АПИ). И подменяете текущие. И они будут попадать в component_epilog. Если необходимо в эпилог необхдимо передать доп. параметры — для этого тоже есть стандартные средства. По ссылке есть пример https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2975

Leave a comment

Your email address will not be published.


*