+7 495 008 8452
  • Загрузка
Выберите ваш цвет

SEO-шаблоны имен картинок: для анонса и детальной

Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.

В модуле инфоблоков есть такая замечательная вещь, как шаблоны имен файлов для картинки в анонсе и детальной картинки инфоблока.

2016-02-25 16-31-39 Товары Элемент Лицензия на 1С-Битрикс Управление сайтом - Бизнес веб-кластер - Редактирование - Вeб-.png

Правда вот при смене шаблона для того, чтобы уже загруженные картинки поменяли свое имя, требуется залить данные картинки заново.

Это подтвердили сотрудники тех-поддержки битрикс:

Шаблоны применяются только в момент загрузки картинки.
С уважением,
сотрудник технической поддержки
Дмитрий Межнин.

Решение данного неудобства представлено в подробном описании статьи.

Однако данное поведение можно изменить при помощи события модуля инфоблоков OnAfterIBlockElementUpdate.

Данный код требуется разместить в init.php

// этот код нужно добавить в init.php

AddEventHandler("iblock", "OnAfterIBlockElementUpdate", function (&$arFields) {
	if (! $arFields['--stop-propagation']) {
		$arElement   = CIBlockElement::GetList(
			array(),
			array('ID' => $arFields["ID"]), false, false,
			array('ID', 'IBLOCK_ID', 'PREVIEW_PICTURE', 'DETAIL_PICTURE')
		)->Fetch();
		
		if ($arElement['PREVIEW_PICTURE'] || $arElement['DETAIL_PICTURE']) {
			$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues(
				$arFields["IBLOCK_ID"],
				$arFields["ID"]
			);
			$arTempVals  = $ipropValues->getValues();
			
			$arPrevP     = CFile::GetFileArray($arElement['PREVIEW_PICTURE']);
			$arPrevD     = CFile::GetFileArray($arElement['DETAIL_PICTURE']);
			
			$arUpdate    = array();
			if (isset($arPrevP['FILE_NAME'])
				&& !preg_match("%^{$arTempVals['ELEMENT_PREVIEW_PICTURE_FILE_NAME']}\.%", $arPrevP['FILE_NAME'])
			) {
				$arUpdate['PREVIEW_PICTURE'] = CFile::MakeFileArray( $_SERVER['DOCUMENT_ROOT'] . $arPrevP['SRC'] );
			}
			if (isset($arPrevD['FILE_NAME'])
				&& !preg_match("%^{$arTempVals['ELEMENT_DETAIL_PICTURE_FILE_NAME']}\.%", $arPrevD['FILE_NAME'])
			) {
				$arUpdate['DETAIL_PICTURE'] = CFile::MakeFileArray(  $_SERVER['DOCUMENT_ROOT'] . $arPrevD['SRC']);
			}
			
			if (! empty($arUpdate)) {
				$arUpdate['--stop-propagation'] = true;
				$el  = new CIBlockElement;
				$res = $el->Update($arFields["ID"], $arUpdate, false, false);
			}
		}
	}
});


После установки данного кода, не требуется перезаливать картинки заново, при сохранении элемента имена картинок будут меняться согласно установленному SEO-шаблону.



Назад в раздел

Подписаться на новые материалы раздела:
Загрузка...