Express777
@Express777

Как автоматически генерировать ссылку на элемент в 1С Битрикс?

Здравствуйте.
Это задача стала результатом выполнения другого задания: сделать ЧПУ на сайте.

Раньше на сайте ссылки были вида сайт.ru/раздел/?ELEMENT_ID=номер_ид_элемента
Включил ЧПУ в настройках каждого компонента. Теперь ссылки вида сайт.ru/раздел/символьный_код_элемента
Настройки ЧПУ в компоненте: joxi.ru/vAWV9nPf36qq2W or radikal.ru/fp/b95ab9778bc8432a8d12c50b5e295eb2
ЧПУ работает отлично.

НО есть одно но. На главной странице есть компонент News, который генерирует список портфолио со ссылками. Ссылки жестко заданы в каждом элементе. Они заданы в "Ссылка (логотип на главной)":
joxi.ru/8An3kqRINnj1rO or radikal.ru/fp/efa400d2dc804bdda6e3b2d56d9f8639
Он является свойством инфоблока:
joxi.ru/p27gBPNuL5on27 or radikal.ru/fp/84c83ce739634a88bb0b55aa78a0b51d

ХТМЛ код генерируется кодом:
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div id="clicont">
<?foreach($arResult["ITEMS"] as $arItem):?>
    <?
    $this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT"));
    $this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM')));
    ?>
    <?if($arParams["DISPLAY_PICTURE"]!="N" && !empty($arItem["DISPLAY_PROPERTIES"]["LOGO"]["VALUE"])):?>
        <?$arrImages = !is_array($arItem["DISPLAY_PROPERTIES"]["LOGO"]["VALUE"]) ? array($arItem["DISPLAY_PROPERTIES"]["LOGO"]["VALUE"]) : $arItem["DISPLAY_PROPERTIES"]["LOGO"]["VALUE"];
        foreach($arrImages as $imgID) {?>
			//Вот тут он берет значение свойства LINKS !!!
            <a href="<?=$arItem["PROPERTIES"]["LINKS"]["VALUE"]   ?>" class="client_<?=$arItem['ID']?>">
            <?echo CFile::ShowImage($imgID, 100, 100, 'border="0" style="float:left;height: 56px;" ');?>
            </a>
        <?}
        ?>
    <?endif?>
<?endforeach;?>
</div>


Вот как получить в PHP коде символьный код элемента в 1С Битрикс?
И заменить часть ?ELEMENT_ID=XXX в $arItem["PROPERTIES"]["LINKS"]["VALUE"] на символьный код?
  • Вопрос задан
  • 8468 просмотров
Решения вопроса 1
MintTea
@MintTea
1) В настройках инфоблока задать настройки url. Примерно так: Rmze1GJTvwD8rO.png

2) В php сменить всю эту дурь с дополнительным свойством на вывод переменной $arItem['DETAIL_PAGE_URL']
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
В joxi.ru/p27gBPNuL5on27 я бы поменял тип свойства на привязку к элементу, потом в result_modifier.php шаблона, по ID из этого свойства получал бы DETAIL_PAGE_URL привязанного элемента, значение будет в нужном виде
Ответ написан
Комментировать
Express777
@Express777 Автор вопроса
Пока сделал такой костыль:
<?//Доделать проверку на соответвие шаблону, только тогда менять
			$string = $arItem["PROPERTIES"]["LINKS"]["VALUE"];
			$pattern = '/\?ELEMENT_ID=[0-9]+/';
			$replacement = $arItem["CODE"]; // символьный код хранится в массиве с ключом "CODE"
			$href_string = preg_replace($pattern, $replacement, $string);
						
			?>
            <a href="<?=$href_string."/"?>" class="client_<?=$arItem['ID']?>">
            <?echo CFile::ShowImage($imgID, 100, 100, 'border="0" style="float:left;height: 56px;" ');?>
            </a>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы