Задача: Необходимо, чтобы после создания нового элемента в публичке через "/bitrix/admin/iblock_element_edit.php" открывалась страница указанная в настройке инфоблока в параметре
URL страницы детального просмотра Решение: При передачи параметра return_url его необходимо
дважды енкодить:
$APPLICATION->GetPopupLink(array(
'URL' => "/bitrix/admin/iblock_element_edit.php?lang=".LANGUAGE_ID
."&type=busi_docs&IBLOCK_SECTION_ID=".$arResult["SECTION_ID"]
."&IBLOCK_ID=".$arResult["IBLOCK_ID"]."&ID=".$arResult["ID"]
."&bxpublic=Y&from_module=iblock&return_url=".urlencode(urlencode($arResult['IBLOCK']['DETAIL_PAGE_URL'])),
'PARAMS' => array(
'height' => 500,
'width' => 900,
'resize' => false
));
|
Далее представлена
предыдущая реализация, которая мне не очень нравилась...
Рекомендуется использовать метод описанный выше.В событии OnAfterIBlockElementAdd сохраняем в сессию ID документа
AddEventHandler("iblock", "OnAfterIBlockElementAdd", array("Documents", "OnAfterAddDocument"));
class Documents{
function OnAfterAddDocument($arFields){
//проверим на то что это не элмент документооборота!!! а если он то установи корректный ID
$ID = (array_key_exists("WF_PARENT_ELEMENT_ID", $arFields) && $arFields["WF_PARENT_ELEMENT_ID"]>0)
?$arFields["WF_PARENT_ELEMENT_ID"]
:$arFields["ID"];
//Для определенных инфоблоков зададим перенаправление
if($ID > 0 && in_array($arFields["IBLOCK_ID"], array(
48, // Отладочный
34, // HR
))) $_SESSION["REDIRECT_TO_BD"] = $ID;
}
}
|
затем на страницу со списком элементов добавляем перенаправление:
if(isset($_SESSION["REDIRECT_TO_BD"])){
$ID = $_SESSION["REDIRECT_TO_BD"];
unset($_SESSION["REDIRECT_TO_BD"]);
if($ID > 0){
LocalRedirect($ID."/");
}
}
|
Однако при этом есть 2 не приятных момента... Во-превых мы имеем лишний хит, а во-вторых (а точнее в следствии) в истории браузера (кнопка назад) страница со списком элементов дублируется... Немного не удобно..
Сначала я пробовал добавить LocalRedirect сразу в OnAfterIBlockElementAdd, но оказалось, что при этом запись не создается... Странно, ведь я уже получил ID новой записи.. но после редиректа я получал сообщение, что элемент с таким ID не найден.. По видимому при редиректе происходит rollback...
Наверняка существует более элегантное решение.. Помогите, пожалуйста, его найти.. Спасибо!