Всем доброго времени суток.
Возникла необходимость создания пользовательского свойства типа "список", отличающегося от обычного только наличием дополнительной настройки - текстового поля, куда вводится описание свойства.
При интеграции его в 10-й битрикс все шикарно работало без каких-либо нареканий, в 11-м появилась проблема: при редактировании свойства в Информ. блоках для задания ему значений списка эти значения не сохраняются, в то время как в 10-м, повторюсь, это происходило. Информация в новом текстовом поле сохраняется.
Вопросы следующие:
из-за чего это происходит?
что нужно сделать, чтобы значения списка сохранялись?
Код приведен ниже, он дописывается в bitrix/php_interface/init.php
[CODE]if (CModule::IncludeModule("iblock"))
{
class filterEnumClass extends CIBlockPropertyElementList //класс, описывающий пользовательское свойство
{
function GetUserTypeDescription()
{
return array(
'PROPERTY_TYPE' => 'L',
'USER_TYPE' => 'Filter_enum',
'DESCRIPTION' => 'Фильтр_список',
'PrepareSettings' => array('filterEnumClass','PrepareSettings'),
'GetPropertyFieldHtml' => array('filterEnumClass','GetPropertyFieldHtml'),
'GetSettingsHTML' => array('filterEnumClass','GetSettingsHTML'),
'CheckFields' => array('filterEnumClass','CheckFields'),
);
}
function PrepareSettings($arUserField)
{
return array(
"DESCRIPTION" => $arUserField["USER_TYPE_SETTINGS"]["DESCRIPTION"],
);
}
function GetSettingsHTML($arUserField, $arHtmlControl, $bVarsFromForm)
{
$result = '';
$value = $arUserField["USER_TYPE_SETTINGS"]["DESCRIPTION"];
$result .= '
<tr valign="top">
<td>Описание свойства:</td>
<td>
<textarea name="'.$arHtmlControl["NAME"].'[DESCRIPTION]" rows="10" cols="40">'.$value.'</textarea>
</td>
</tr>
';
return $result;
}
function CheckFields($arUserField, $value)
{
$aMsg = array();
return $aMsg;
}
function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
//функция отвечает за отображение в редактировании карточки товара - не думаю, что есть смысл ее тут приводить
}
}
}
AddEventHandler("iblock",'OnIBlockPropertyBuildList',array('filterEnumClass','GetUserTypeDescription'));
[/CODE]
Возникла необходимость создания пользовательского свойства типа "список", отличающегося от обычного только наличием дополнительной настройки - текстового поля, куда вводится описание свойства.
При интеграции его в 10-й битрикс все шикарно работало без каких-либо нареканий, в 11-м появилась проблема: при редактировании свойства в Информ. блоках для задания ему значений списка эти значения не сохраняются, в то время как в 10-м, повторюсь, это происходило. Информация в новом текстовом поле сохраняется.
Вопросы следующие:
из-за чего это происходит?
что нужно сделать, чтобы значения списка сохранялись?
Код приведен ниже, он дописывается в bitrix/php_interface/init.php
[CODE]if (CModule::IncludeModule("iblock"))
{
class filterEnumClass extends CIBlockPropertyElementList //класс, описывающий пользовательское свойство
{
function GetUserTypeDescription()
{
return array(
'PROPERTY_TYPE' => 'L',
'USER_TYPE' => 'Filter_enum',
'DESCRIPTION' => 'Фильтр_список',
'PrepareSettings' => array('filterEnumClass','PrepareSettings'),
'GetPropertyFieldHtml' => array('filterEnumClass','GetPropertyFieldHtml'),
'GetSettingsHTML' => array('filterEnumClass','GetSettingsHTML'),
'CheckFields' => array('filterEnumClass','CheckFields'),
);
}
function PrepareSettings($arUserField)
{
return array(
"DESCRIPTION" => $arUserField["USER_TYPE_SETTINGS"]["DESCRIPTION"],
);
}
function GetSettingsHTML($arUserField, $arHtmlControl, $bVarsFromForm)
{
$result = '';
$value = $arUserField["USER_TYPE_SETTINGS"]["DESCRIPTION"];
$result .= '
<tr valign="top">
<td>Описание свойства:</td>
<td>
<textarea name="'.$arHtmlControl["NAME"].'[DESCRIPTION]" rows="10" cols="40">'.$value.'</textarea>
</td>
</tr>
';
return $result;
}
function CheckFields($arUserField, $value)
{
$aMsg = array();
return $aMsg;
}
function GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
{
//функция отвечает за отображение в редактировании карточки товара - не думаю, что есть смысл ее тут приводить
}
}
}
AddEventHandler("iblock",'OnIBlockPropertyBuildList',array('filterEnumClass','GetUserTypeDescription'));
[/CODE]