Здравствуйте. Пробовал писать в техподдержку по своей проблеме, но за 4 недели так ничего и не решилось, может кто из специалистов подскажет. Цитирую свое сообщение в ТП:
Для чистоты эксперимента специально для установил "чистую систему" УС-Бизнес, [B][U]без каких либо правок[/U][/B] в обработчиках (init.php) и прочее. Т.е. вся система[B] нулевая[/B], даже со стандартным шаблоном. Поэтому могу гарантировать, что мои руки нигде больше не накосячили.
суть проблемы:
[LIST=1][*]использую стандартный комплексный компонент битрикса (ранее пробовал и на простых собрать - тоже самое) для добавления/редактирования элемента.[*]создал инфоблок "testib" в нем создал тестовую древовидную структуру разделов 3 уровней(главный раздел, в нем 2 дочерних, в этих дочерних еще по паре разделов)[*]настроил инфоблок на работу в документообороте[*]в настройках компонента убрал галку "добавлять на нижний уровень разделов", добавил: после редактирования сохранять в статусе "черновик", вывел на редактирование название и привязку к разделам.[*]сделал изменения в шаблоне вывода компонента формы редактирования, чтобы человек мог выбрать раздел корневой, затем вложенный, затем вложенный во вложенный и т.д. Соответственно изменения эти были внесены только (ПОДЧЕРКИВАЮ ТОЛЬКО ЗДЕСЬ) в ******/bitrix/templates/corp_services_red/components/bitrix/iblock.element.add/addform/bitrix/iblock.element.add.form/.default/template.php
[/LIST]такие( в родном шаблоне заменил кусок с 'case "multiselect"'):
[CODE]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;
[/CODE]
Теперь если добавить элемент последовательно на самый нижний уровень раздела, то элемент автоматом должен привязаться ко всем родительским разделам!
Так и происходит! элемент сохраняется в статусе черновик как должен, НО при пересохранении в статус "опубликовано" через админку - привязка к разделам сбрасывается в самую первую привязку!!!! т.е. если несколько раз привязывать к различным подразделам, то сохранится в "опубликовано" самая первая из всех привязок.
Пример на картинках: 1, 2 картинка так сохраняется в статусе черновик, 3 картинка - так пересохраняется результаты 1 и 2 через админку в статус опубликовано.
Повторюсь - кроме вышеописанных изменений больше ничего не делалось!!!!!!! специально с нуля делал!
Проверял настройки, права доступа, ставил обновления - все равно ничего.
P.S.
если вы посмотрите внимательно, то увидите, что изменения в ШАБЛОНЕ (Подчеркиваю в шаблоне!) компонента Битрикса, никак не связаны с проблемой, поскольку: данные которые передаются обработчику СТАНДАРТНОГО (НЕ ИЗМЕНЕННОГО) компонента поступают все в том же массиве, который передается стандартным компонентом, при выборе мульти-привязки к разделам (список с множественным выбором в настройках инфоблока), а именно $_REQUEST["PROPERTY[IBLOCK_SECTION][]"]
Проверял данные в $_REQUEST - абсолютно ИДЕНТИЧНЫ, что в случае стандартного вызова, что с этим!
Для чистоты эксперимента специально для установил "чистую систему" УС-Бизнес, [B][U]без каких либо правок[/U][/B] в обработчиках (init.php) и прочее. Т.е. вся система[B] нулевая[/B], даже со стандартным шаблоном. Поэтому могу гарантировать, что мои руки нигде больше не накосячили.
суть проблемы:
[LIST=1][*]использую стандартный комплексный компонент битрикса (ранее пробовал и на простых собрать - тоже самое) для добавления/редактирования элемента.[*]создал инфоблок "testib" в нем создал тестовую древовидную структуру разделов 3 уровней(главный раздел, в нем 2 дочерних, в этих дочерних еще по паре разделов)[*]настроил инфоблок на работу в документообороте[*]в настройках компонента убрал галку "добавлять на нижний уровень разделов", добавил: после редактирования сохранять в статусе "черновик", вывел на редактирование название и привязку к разделам.[*]сделал изменения в шаблоне вывода компонента формы редактирования, чтобы человек мог выбрать раздел корневой, затем вложенный, затем вложенный во вложенный и т.д. Соответственно изменения эти были внесены только (ПОДЧЕРКИВАЮ ТОЛЬКО ЗДЕСЬ) в ******/bitrix/templates/corp_services_red/components/bitrix/iblock.element.add/addform/bitrix/iblock.element.add.form/.default/template.php
[/LIST]такие( в родном шаблоне заменил кусок с 'case "multiselect"'):
[CODE]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;
[/CODE]
Теперь если добавить элемент последовательно на самый нижний уровень раздела, то элемент автоматом должен привязаться ко всем родительским разделам!
Так и происходит! элемент сохраняется в статусе черновик как должен, НО при пересохранении в статус "опубликовано" через админку - привязка к разделам сбрасывается в самую первую привязку!!!! т.е. если несколько раз привязывать к различным подразделам, то сохранится в "опубликовано" самая первая из всех привязок.
Пример на картинках: 1, 2 картинка так сохраняется в статусе черновик, 3 картинка - так пересохраняется результаты 1 и 2 через админку в статус опубликовано.
Повторюсь - кроме вышеописанных изменений больше ничего не делалось!!!!!!! специально с нуля делал!
Проверял настройки, права доступа, ставил обновления - все равно ничего.
P.S.
если вы посмотрите внимательно, то увидите, что изменения в ШАБЛОНЕ (Подчеркиваю в шаблоне!) компонента Битрикса, никак не связаны с проблемой, поскольку: данные которые передаются обработчику СТАНДАРТНОГО (НЕ ИЗМЕНЕННОГО) компонента поступают все в том же массиве, который передается стандартным компонентом, при выборе мульти-привязки к разделам (список с множественным выбором в настройках инфоблока), а именно $_REQUEST["PROPERTY[IBLOCK_SECTION][]"]
Проверял данные в $_REQUEST - абсолютно ИДЕНТИЧНЫ, что в случае стандартного вызова, что с этим!