Здравствуйте. Пробовал писать в техподдержку по своей проблеме, но за 4 недели так ничего и не решилось, может кто из специалистов подскажет. Цитирую свое сообщение в ТП:
Для чистоты эксперимента специально для установил "чистую систему" УС-Бизнес, без каких либо правок в обработчиках (init.php) и прочее. Т.е. вся система нулевая, даже со стандартным шаблоном. Поэтому могу гарантировать, что мои руки нигде больше не накосячили.
суть проблемы:
Теперь если добавить элемент последовательно на самый нижний уровень раздела, то элемент автоматом должен привязаться ко всем родительским разделам!
Так и происходит! элемент сохраняется в статусе черновик как должен, НО при пересохранении в статус "опубликовано" через админку - привязка к разделам сбрасывается в самую первую привязку!!!! т.е. если несколько раз привязывать к различным подразделам, то сохранится в "опубликовано" самая первая из всех привязок.
Пример на картинках: 1, 2 картинка так сохраняется в статусе черновик, 3 картинка - так пересохраняется результаты 1 и 2 через админку в статус опубликовано.
Повторюсь - кроме вышеописанных изменений больше ничего не делалось!!!!!!! специально с нуля делал!
Проверял настройки, права доступа, ставил обновления - все равно ничего.
P.S.
если вы посмотрите внимательно, то увидите, что изменения в ШАБЛОНЕ (Подчеркиваю в шаблоне!) компонента Битрикса, никак не связаны с проблемой, поскольку: данные которые передаются обработчику СТАНДАРТНОГО (НЕ ИЗМЕНЕННОГО) компонента поступают все в том же массиве, который передается стандартным компонентом, при выборе мульти-привязки к разделам (список с множественным выбором в настройках инфоблока), а именно $_REQUEST["PROPERTY[IBLOCK_SECTION][]"]
Проверял данные в $_REQUEST - абсолютно ИДЕНТИЧНЫ, что в случае стандартного вызова, что с этим!
Для чистоты эксперимента специально для установил "чистую систему" УС-Бизнес, без каких либо правок в обработчиках (init.php) и прочее. Т.е. вся система нулевая, даже со стандартным шаблоном. Поэтому могу гарантировать, что мои руки нигде больше не накосячили.
суть проблемы:
- использую стандартный комплексный компонент битрикса (ранее пробовал и на простых собрать - тоже самое) для добавления/редактирования элемента.
- создал инфоблок "testib" в нем создал тестовую древовидную структуру разделов 3 уровней(главный раздел, в нем 2 дочерних, в этих дочерних еще по паре разделов)
- настроил инфоблок на работу в документообороте
- в настройках компонента убрал галку "добавлять на нижний уровень разделов", добавил: после редактирования сохранять в статусе "черновик", вывел на редактирование название и привязку к разделам.
- сделал изменения в шаблоне вывода компонента формы редактирования, чтобы человек мог выбрать раздел корневой, затем вложенный, затем вложенный во вложенный и т.д. Соответственно изменения эти были внесены только (ПОДЧЕРКИВАЮ ТОЛЬКО ЗДЕСЬ) в ******/bitrix/templates/corp_services_red/components/bitrix/iblock
.element.add/addform/bitrix/iblock.element.add.form/.default/template.php
Код |
---|
case "multiselect": ?> <?if($propertyID=="IBLOCK_SECTION"):?> <? $ar_result=CIBlockSection::GetList(Array("SORT"=>"ASC"), Array("IBLOCK_ID"=>"3"),false, Array("UF_PUBLIC")); while($ar_el = $ar_result->GetNext()) { $public_arr[$ar_el['ID']]=$ar_el["UF_PUBLIC"]; } $ar_result2=CIBlockSection::GetTreeList(Array("IBLOCK_ID"=>"3")); while($sect_arr[] = $ar_result2->GetNext()){} echo "<select id='sect-list-0' class='section_list' name='PROPERTY[IBLOCK_SECTION][]'>"; echo "<option value=''>--</option>"; foreach($sect_arr as $key=>$elem) { if($elem["IBLOCK_SECTION_ID"]=="" && $elem["ID"]!="") { echo "<option value='".$elem["ID"]."' ".($arResult["ELEMENT"]["IBLOCK_SECTION"][0][VALUE]==$elem["ID"] || $arResult["ELEMENT"]["IBLOCK_SECTION"][1][VALUE]==$elem["ID"] || $arResult["ELEMENT"]["IBLOCK_SECTION"][2][VALUE]==$elem["ID"] || $arResult["ELEMENT"]["IBLOCK_SECTION"][3][VALUE]==$elem["ID"] ? "selected": "").">".$elem["NAME"]."</option>"; $level_sect[0][]=$elem["ID"]; unset($sect_arr[$key]); } elseif($elem["ID"]=="") {unset($sect_arr[$key]);} } echo "</select>"; $cnt_level=1; while(count($sect_arr)>0) { echo "<select id='sect-list-".$cnt_level."' class='section_list' name='PROPERTY[IBLOCK_SECTION][]'>"; echo "<option value=''>--</option>"; foreach($level_sect[$cnt_level-1] as $k=>$val) { foreach($sect_arr as $key=>$elem) { if($elem["IBLOCK_SECTION_ID"]==$val && $elem["ID"]!="") { $s_i="IBLOCK_SECTION".($cnt_level+1); echo "<option value='".$elem["ID"]."' class='".$val."' ".($arResult["ELEMENT"]["IBLOCK_SECTION"][0][VALUE]==$elem["ID"] || $arResult["ELEMENT"]["IBLOCK_SECTION"][1][VALUE]==$elem["ID"] || $arResult["ELEMENT"]["IBLOCK_SECTION"][2][VALUE]==$elem["ID"] || $arResult["ELEMENT"]["IBLOCK_SECTION"][3][VALUE]==$elem["ID"] ? "selected": "").">".$elem["NAME"]."</option>"; $level_sect[$cnt_level][]=$elem["ID"]; unset($sect_arr[$key]); } } } echo "</select>"; $cnt_level++; } ?> <?else:?> <select name="PROPERTY[<?=$propertyID?>]<?=$type=="multiselect" ? "[]\" size=\"".$arResult["PROPERTY_LIST_FULL"][$propertyID]["ROW_COUNT"]."\" multiple=\"multiple" : ""?>"> <option value=""><?echo GetMessage("CT_BIEAF_PROPERTY_VALUE_NA")?></option> <? if (intval($propertyID) > 0) $sKey = "ELEMENT_PROPERTIES"; else $sKey = "ELEMENT"; foreach ($arResult["PROPERTY_LIST_FULL"][$propertyID]["ENUM"] as $key => $arEnum) { $checked = false; if ($arParams["ID"] > 0 || count($arResult["ERRORS"]) > 0) { foreach ($arResult[$sKey][$propertyID] as $elKey => $arElEnum) { if ($key == $arElEnum["VALUE"]) {$checked = true; break;} } } else { if ($arEnum["DEF"] == "Y") $checked = true; } ?> <option value="<?=$key?>" <?if($propertyID==53):?><?=$user_region==$arEnum["VALUE"] ? " selected=\"selected\"" : ""?><?else:?><?=$checked ? " selected=\"selected\"" : ""?><?endif;?>><?=$arEnum["VALUE"]?></option> <? } ?> </select> <?endif;?> <? break; |
Теперь если добавить элемент последовательно на самый нижний уровень раздела, то элемент автоматом должен привязаться ко всем родительским разделам!
Так и происходит! элемент сохраняется в статусе черновик как должен, НО при пересохранении в статус "опубликовано" через админку - привязка к разделам сбрасывается в самую первую привязку!!!! т.е. если несколько раз привязывать к различным подразделам, то сохранится в "опубликовано" самая первая из всех привязок.
Пример на картинках: 1, 2 картинка так сохраняется в статусе черновик, 3 картинка - так пересохраняется результаты 1 и 2 через админку в статус опубликовано.
Повторюсь - кроме вышеописанных изменений больше ничего не делалось!!!!!!! специально с нуля делал!
Проверял настройки, права доступа, ставил обновления - все равно ничего.
P.S.
если вы посмотрите внимательно, то увидите, что изменения в ШАБЛОНЕ (Подчеркиваю в шаблоне!) компонента Битрикса, никак не связаны с проблемой, поскольку: данные которые передаются обработчику СТАНДАРТНОГО (НЕ ИЗМЕНЕННОГО) компонента поступают все в том же массиве, который передается стандартным компонентом, при выборе мульти-привязки к разделам (список с множественным выбором в настройках инфоблока), а именно $_REQUEST["PROPERTY[IBLOCK_SECTION][]"]
Проверял данные в $_REQUEST - абсолютно ИДЕНТИЧНЫ, что в случае стандартного вызова, что с этим!