Здравствуйте. Это задача стала результатом выполнения другого задания: сделать ЧПУ на сайте.
Раньше на сайте ссылки были вида сайт.ru/раздел/?ELEMENT_ID=номер_ид_элемента Включил ЧПУ в настройках каждого компонента. Теперь ссылки вида сайт.ru/раздел/символьный_код_элемента Настройки ЧПУ в компоненте: joxi.ru/vAWV9nPf36qq2W ЧПУ работает отлично.
НО есть одно но. На главной странице есть компонент News, который генерирует список портфолио со ссылками. Ссылки жестко заданы в каждом элементе. Они заданы в "Ссылка (логотип на главной)": joxi.ru/8An3kqRINnj1rO Он является свойством инфоблока: joxi.ru/p27gBPNuL5on27
ХТМЛ код генерируется кодом: <?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($arrImagesas$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 коде символьный код элемента? И заменить часть ?ELEMENT_ID=XXX в $arItem["PROPERTIES"]["LINKS"]["VALUE"] на символьный код ?
Тут происходит замещение строки. Функция preg_replace($pattern, $replacement, $string); замещает $string на replacement по паттерну pattern. Паттерном у нас является регурярное выражение '/\?ELEMENT_ID=[0-9]+/';
A Z написал: Тут происходит замещение строки. Функция preg_replace($pattern, $replacement, $string); замещает $string на replacement по паттерну pattern. Паттерном у нас является регурярное выражение '/\?ELEMENT_ID=[0-9]+/';
Не, оно понятно, но зачем ? Если есть сим.код и чпу уже настроен на работу с кодом, не проще сразу взять код ?