[QUOTE]Сергей Попов написал:
[QUOTE] Дмитрий Яковенко написал:
Или вы ждете пока вам готовое решение выложат? [/QUOTE]
Готовое решение было бы идеально, я до сих пор так и не смог этого сделать, ибо знаний не хватает.
может быть за донат кто сделает? [/QUOTE]
Буквально только что делал для клиента нечто подобное, но с каталогом.
Разницы в принципе нет никакой, так как работа идет через комплексный компонент.
Дабы не ходить вокруг да около:
#1. Изменяем [B]настройки ЧПУ комплексного компонента[/B] (в моем случае [B]bitrix:catalog[/B]) в разделе "Детальная информация":
С
#SECTION_CODE#/#[B]ELEMENT_ID[/B]#/
НА
#SECTION_CODE#/#[B]КОД_ВАШЕГО_СВОЙСТВА[/B]#/
#2. Делаем [B]встройку в шаблон[/B] компонента списка (в моем случае [B]bitrix:[/B][B]catalog.section[/B]):
[CODE]$pattern = '/\/(.*)\/(.*)\/(.*)\//i';
$replacement = '/$1/$2/' . trim($arElement["PROPERTIES"]["КОД_ВАШЕГО_СВОЙСТВА"]["VALUE"]) . "/";
$element_link = preg_replace($pattern, $replacement, $arElement["DETAIL_PAGE_URL"]);
?><a href="<?=$element_link?>" title="<?= $arElement["NAME"] ?>"><?= $arElement["NAME"] ?></a><?[/CODE]
Код выше берет УРЛ до блока /#КОД_ВАШЕГО_СВОЙСТВА#/ и объединяет его с вашим свойством. Сие сделано для того, что бы сохранить невредимым полный путь до элемента с минимальными изменениями первоначального кода.
#3. Делаем [B]встройку в шаблон[/B] подключения компонента детальной страницы (в моем случае на странице [B]element.php[/B] компонента [B]bitrix:catalog[/B]):
[CODE]$pattern = '/\/.*\/.*\/(.*)\//i';
$replacement = '$1';
$КОД_ВАШЕГО_СВОЙСТВА= preg_replace($pattern, $replacement, $APPLICATION->GetCurPage());
$arSelect = Array("ID", "NAME", "CODE");
$arFilter = Array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "=PROPERTY_КОД_ВАШЕГО_СВОЙСТВА" => $КОД_ВАШЕГО_СВОЙСТВА);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nTopCount" => 1), $arSelect);
$element = $res->Fetch();
$arResult["VARIABLES"]["ELEMENT_ID"] = $element["ID"];
$arResult["VARIABLES"]["ELEMENT_CODE"] = $element["CODE"];[/CODE]
Код выше получает значение КОД_ВАШЕГО_СВОЙСТВА, находит по нему нужный элемент, и делает встройку в массив результата первоначальной выборки (неудачной), тем самым заменяя найденный элемент (Элемент не найден) на найденный по КОД_ВАШЕГО_СВОЙСТВА.
[QUOTE] Дмитрий Яковенко написал:
Или вы ждете пока вам готовое решение выложат? [/QUOTE]
Готовое решение было бы идеально, я до сих пор так и не смог этого сделать, ибо знаний не хватает.
может быть за донат кто сделает? [/QUOTE]
Буквально только что делал для клиента нечто подобное, но с каталогом.
Разницы в принципе нет никакой, так как работа идет через комплексный компонент.
Дабы не ходить вокруг да около:
#1. Изменяем [B]настройки ЧПУ комплексного компонента[/B] (в моем случае [B]bitrix:catalog[/B]) в разделе "Детальная информация":
С
#SECTION_CODE#/#[B]ELEMENT_ID[/B]#/
НА
#SECTION_CODE#/#[B]КОД_ВАШЕГО_СВОЙСТВА[/B]#/
#2. Делаем [B]встройку в шаблон[/B] компонента списка (в моем случае [B]bitrix:[/B][B]catalog.section[/B]):
[CODE]$pattern = '/\/(.*)\/(.*)\/(.*)\//i';
$replacement = '/$1/$2/' . trim($arElement["PROPERTIES"]["КОД_ВАШЕГО_СВОЙСТВА"]["VALUE"]) . "/";
$element_link = preg_replace($pattern, $replacement, $arElement["DETAIL_PAGE_URL"]);
?><a href="<?=$element_link?>" title="<?= $arElement["NAME"] ?>"><?= $arElement["NAME"] ?></a><?[/CODE]
Код выше берет УРЛ до блока /#КОД_ВАШЕГО_СВОЙСТВА#/ и объединяет его с вашим свойством. Сие сделано для того, что бы сохранить невредимым полный путь до элемента с минимальными изменениями первоначального кода.
#3. Делаем [B]встройку в шаблон[/B] подключения компонента детальной страницы (в моем случае на странице [B]element.php[/B] компонента [B]bitrix:catalog[/B]):
[CODE]$pattern = '/\/.*\/.*\/(.*)\//i';
$replacement = '$1';
$КОД_ВАШЕГО_СВОЙСТВА= preg_replace($pattern, $replacement, $APPLICATION->GetCurPage());
$arSelect = Array("ID", "NAME", "CODE");
$arFilter = Array("IBLOCK_ID" => $arParams["IBLOCK_ID"], "=PROPERTY_КОД_ВАШЕГО_СВОЙСТВА" => $КОД_ВАШЕГО_СВОЙСТВА);
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nTopCount" => 1), $arSelect);
$element = $res->Fetch();
$arResult["VARIABLES"]["ELEMENT_ID"] = $element["ID"];
$arResult["VARIABLES"]["ELEMENT_CODE"] = $element["CODE"];[/CODE]
Код выше получает значение КОД_ВАШЕГО_СВОЙСТВА, находит по нему нужный элемент, и делает встройку в массив результата первоначальной выборки (неудачной), тем самым заменяя найденный элемент (Элемент не найден) на найденный по КОД_ВАШЕГО_СВОЙСТВА.