16 'DESCRIPTION' => Loc::getMessage(
'IBLOCK_PROP_ELIST_DESC'),
17 'GetPropertyFieldHtml' => [__CLASS__,
'GetPropertyFieldHtml'],
18 'GetPropertyFieldHtmlMulty' => [__CLASS__,
'GetPropertyFieldHtmlMulty'],
19 'GetPublicEditHTML' => [__CLASS__,
'GetPropertyFieldHtml'],
20 'GetPublicEditHTMLMulty' => [__CLASS__,
'GetPropertyFieldHtmlMulty'],
21 'GetPublicViewHTML' => [__CLASS__,
'GetPublicViewHTML'],
22 'GetUIFilterProperty' => [__CLASS__,
'GetUIFilterProperty'],
23 'GetAdminFilterHTML' => [__CLASS__,
'GetAdminFilterHTML'],
24 'PrepareSettings' => [__CLASS__,
'PrepareSettings'],
25 'GetSettingsHTML' => [__CLASS__,
'GetSettingsHTML'],
26 'GetExtendedValue' => [__CLASS__,
'GetExtendedValue'],
27 'GetUIEntityEditorProperty' => [__CLASS__,
'GetUIEntityEditorProperty'],
33 $size = (int)($arProperty[
'USER_TYPE_SETTINGS'][
'size'] ?? 0);
39 $width = (int)($arProperty[
'USER_TYPE_SETTINGS'][
'width'] ?? 0);
45 $group = ($arProperty[
'USER_TYPE_SETTINGS'][
'group'] ??
'N');
46 $group = ($group ===
'Y' ?
'Y' :
'N');
48 $multiple = ($arProperty[
'USER_TYPE_SETTINGS'][
'multiple'] ??
'N');
49 $multiple = ($multiple ===
'Y' ?
'Y' :
'N');
55 'multiple' => $multiple,
59 public static function GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
73 <td>'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_SETTING_SIZE").
':</td>
74 <td><input type="text" size="5" name="'.$strHTMLControlName[
"NAME"].
'[size]" value="'.
$settings[
"size"].
'"></td>
77 <td>'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_SETTING_WIDTH").
':</td>
78 <td><input type="text" size="5" name="'.$strHTMLControlName[
"NAME"].
'[width]" value="'.
$settings[
"width"].
'">px</td>
81 <td>'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_SETTING_SECTION_GROUP").
':</td>
82 <td><input type="checkbox" name="'.$strHTMLControlName[
"NAME"].
'[group]" value="Y" '.(
$settings[
"group"]==
"Y"?
'checked':
'').
'></td>
85 <td>'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_SETTING_MULTIPLE").
':</td>
86 <td><input type="checkbox" name="'.$strHTMLControlName[
"NAME"].
'[multiple]" value="Y" '.(
$settings[
"multiple"]==
"Y"?
'checked':
'').
'></td>
101 $size =
' size="'.$settings[
"size"].
'"';
106 $width =
' style="width:'.$settings[
"width"].
'px"';
113 $html =
'<select name="'.$strHTMLControlName[
"VALUE"].
'"'.$size.$width.
'>';
114 $arProperty[
'IS_REQUIRED'] ??=
'N';
115 if($arProperty[
'IS_REQUIRED'] !==
'Y')
117 $html .=
'<option value=""'.(!$bWasSelect ?
' selected' :
'').
'>'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_NO_VALUE").
'</option>';
120 $html .=
'</select>';
131 foreach($value as $property_value_id => $arValue)
133 if (is_array($arValue))
134 $values[$property_value_id] = $arValue[
"VALUE"];
136 $values[$property_value_id] = $arValue;
138 if(preg_match(
"/^n(\\d+)$/", $property_value_id, $match))
140 if($match[1] > $max_n)
141 $max_n = intval($match[1]);
148 $size =
' size="'.$settings[
"size"].
'"';
153 $width =
' style="width:'.$settings[
"width"].
'px"';
162 $html =
'<input type="hidden" name="'.$strHTMLControlName[
"VALUE"].
'[]" value="">';
163 $html .=
'<select multiple name="'.$strHTMLControlName[
"VALUE"].
'[]"'.$size.$width.
'>';
164 if($arProperty[
"IS_REQUIRED"] !=
"Y")
165 $html .=
'<option value=""'.(!$bWasSelect?
' selected':
'').
'>'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_NO_VALUE").
'</option>';
167 $html .=
'</select>';
171 if(end($values) !=
"" || mb_substr((
string)key($values), 0, 1) !=
"n")
172 $values[
"n".($max_n+1)] =
"";
174 $name = $strHTMLControlName[
"VALUE"].
"VALUE";
176 $html =
'<table cellpadding="0" cellspacing="0" border="0" class="nopadding" width="100%" id="tb'.md5(
$name).
'">';
177 foreach($values as $property_value_id=>$value)
184 $html .=
'<select name="'.$strHTMLControlName[
"VALUE"].
'['.$property_value_id.
'][VALUE]"'.$size.$width.
'>';
185 $html .=
'<option value=""'.(!$bWasSelect?
' selected':
'').
'>'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_NO_VALUE").
'</option>';
187 $html .=
'</select>';
189 $html .=
'</td></tr>';
193 $html .=
'<input type="button" value="'.Loc::getMessage(
"IBLOCK_PROP_ELEMENT_LIST_ADD").
'" onClick="BX.IBlock.Tools.addNewRow(\'tb'.md5(
$name).
'\', -1)
">';
198 public static function GetAdminFilterHTML($arProperty, $strHTMLControlName)
200 $lAdmin = new CAdminList($strHTMLControlName["TABLE_ID
"]);
201 $lAdmin->InitFilter(array($strHTMLControlName["VALUE
"]));
202 $filterValue = $GLOBALS[$strHTMLControlName["VALUE
"]];
204 if(isset($filterValue) && is_array($filterValue))
205 $values = $filterValue;
209 $settings = CIBlockPropertyElementList::PrepareSettings($arProperty);
210 if($settings["size"] > 1)
211 $size = ' size="'.$settings["size"].'"';
215 if($settings["width"] > 0)
216 $width = ' style="width:
'.$settings["width"].'px
"';
221 $options = CIBlockPropertyElementList::GetOptionsHtml($arProperty, $values, $bWasSelect);
223 $html = '<select multiple name="'.$strHTMLControlName["VALUE"].'[]
"'.$size.$width.'>';
224 $html .= '<option value=""'.(!$bWasSelect? ' selected': '').'>'.Loc::getMessage("IBLOCK_PROP_ELEMENT_LIST_ANY_VALUE
").'</option>';
226 $html .= '</select>';
230 public static function GetUIFilterProperty($arProperty, $strHTMLControlName, &$fields)
232 $fields['type'] = 'list';
233 $fields['items'] = self::getItemsForUiFilter($arProperty);
234 $fields['operators'] = array(
240 private static function getItemsForUiFilter($arProperty)
243 $settings = static::PrepareSettings($arProperty);
245 if ($settings["group
"] === "Y
")
247 $arElements = CIBlockPropertyElementList::GetElements($arProperty["LINK_IBLOCK_ID
"]);
248 $arTree = CIBlockPropertyElementList::GetSections($arProperty["LINK_IBLOCK_ID
"]);
249 foreach ($arElements as $i => $arElement)
252 $arElement["IN_SECTIONS
"] == "Y
"
253 && array_key_exists($arElement["IBLOCK_SECTION_ID
"], $arTree)
256 $arTree[$arElement["IBLOCK_SECTION_ID
"]]["E
"][] = $arElement;
257 unset($arElements[$i]);
261 // todo add <optgroup> for ui filter
262 foreach ($arTree as $arSection)
264 if (isset($arSection["E
"]))
266 foreach ($arSection["E
"] as $arItem)
268 $items[$arItem["ID
"]] = $arItem["NAME
"];
272 foreach ($arElements as $arItem)
274 $items[$arItem["ID
"]] = $arItem["NAME
"];
280 foreach (CIBlockPropertyElementList::GetElements($arProperty["LINK_IBLOCK_ID
"]) as $arItem)
282 $items[$arItem["ID
"]] = $arItem["NAME
"];
289 public static function GetPublicViewHTML($arProperty, $arValue, $strHTMLControlName)
291 static $cache = array();
294 $arValue['VALUE'] = intval($arValue['VALUE']);
295 if (0 < $arValue['VALUE'])
299 if (!empty($strHTMLControlName['MODE']))
301 switch ($strHTMLControlName['MODE'])
304 $viewMode = 'CSV_EXPORT';
308 $viewMode = 'EXTERNAL_ID';
309 $resultKey = '~XML_ID';
312 $viewMode = 'SIMPLE_TEXT';
313 $resultKey = '~NAME';
315 case 'ELEMENT_TEMPLATE':
316 $viewMode = 'ELEMENT_TEMPLATE';
317 $resultKey = '~NAME';
320 $viewMode = 'BIZPROC';
325 if (!isset($cache[$arValue['VALUE']]))
328 $intIBlockID = (int)$arProperty['LINK_IBLOCK_ID'];
329 if ($intIBlockID > 0)
330 $arFilter['IBLOCK_ID'] = $intIBlockID;
331 $arFilter['ID'] = $arValue['VALUE'];
332 if ($viewMode === '')
334 $arFilter['ACTIVE'] = 'Y';
335 $arFilter['ACTIVE_DATE'] = 'Y';
336 $arFilter['CHECK_PERMISSIONS'] = 'Y';
337 $arFilter['MIN_PERMISSION'] = 'R';
339 $rsElements = CIBlockElement::GetList(
344 array("ID
","IBLOCK_ID
","NAME
","DETAIL_PAGE_URL
")
346 if (isset($strHTMLControlName['DETAIL_URL']))
348 $rsElements->SetUrlTemplates($strHTMLControlName['DETAIL_URL']);
350 $cache[$arValue['VALUE']] = $rsElements->GetNext(true, true);
353 if (!empty($cache[$arValue['VALUE']]) && is_array($cache[$arValue['VALUE']]))
355 if ($viewMode !== '' && $resultKey !== '')
357 $strResult = $cache[$arValue['VALUE']][$resultKey];
361 $strResult = '<a href="'.$cache[$arValue['VALUE
']]['DETAIL_PAGE_URL
'].'">'.$cache[$arValue['VALUE']]['NAME'].'</a>';
368 public static function GetOptionsHtml($arProperty, $values, &$bWasSelect)
371 $settings = CIBlockPropertyElementList::PrepareSettings($arProperty);
374 if($settings["group
"] === "Y
")
376 $arElements = CIBlockPropertyElementList::GetElements($arProperty["LINK_IBLOCK_ID
"]);
377 $arTree = CIBlockPropertyElementList::GetSections($arProperty["LINK_IBLOCK_ID
"]);
378 foreach($arElements as $i => $arElement)
381 $arElement["IN_SECTIONS
"] == "Y
"
382 && array_key_exists($arElement["IBLOCK_SECTION_ID
"], $arTree)
385 $arTree[$arElement["IBLOCK_SECTION_ID
"]]["E
"][] = $arElement;
386 unset($arElements[$i]);
390 foreach($arTree as $arSection)
392 $margin = max((int)$arSection['DEPTH_LEVEL'], 1) - 1;
393 $options .= '<optgroup label="' . str_repeat(' .
', $margin) . $arSection['NAME
'] . '">';
394 if(isset($arSection["E
"]))
396 foreach($arSection["E
"] as $arItem)
398 $options .= '<option value="'.$arItem["ID"].'"';
399 if(in_array($arItem["~ID
"], $values))
401 $options .= ' selected';
404 $options .= '>'.$arItem["NAME
"].'</option>';
407 $options .= '</optgroup>';
409 foreach($arElements as $arItem)
411 $options .= '<option value="'.$arItem["ID"].'"';
412 if(in_array($arItem["~ID
"], $values))
414 $options .= ' selected';
417 $options .= '>'.$arItem["NAME
"].'</option>';
423 foreach(CIBlockPropertyElementList::GetElements($arProperty["LINK_IBLOCK_ID
"]) as $arItem)
425 $options .= '<option value="'.$arItem["ID"].'"';
426 if(in_array($arItem["~ID
"], $values))
428 $options .= ' selected';
431 $options .= '>'.$arItem["NAME
"].'</option>';
445 public static function GetExtendedValue($arProperty, $value)
447 $html = self::GetPublicViewHTML($arProperty, $value, array('MODE' => 'SIMPLE_TEXT'));
450 $text = htmlspecialcharsback($html);
453 'UF_XML_ID' => $text,
459 public static function GetElements($IBLOCK_ID)
461 static $cache = array();
462 $IBLOCK_ID = intval($IBLOCK_ID);
464 if(!array_key_exists($IBLOCK_ID, $cache))
466 $cache[$IBLOCK_ID] = array();
476 "IBLOCK_ID
"=> $IBLOCK_ID,
478 "CHECK_PERMISSIONS
" => "Y
",
484 $rsItems = CIBlockElement::GetList($arOrder, $arFilter, false, false, $arSelect);
485 while($arItem = $rsItems->GetNext())
486 $cache[$IBLOCK_ID][] = $arItem;
489 return $cache[$IBLOCK_ID];
492 public static function GetSections($IBLOCK_ID)
495 $IBLOCK_ID = (int)$IBLOCK_ID;
497 if (!isset($cache[$IBLOCK_ID]))
499 $cache[$IBLOCK_ID] = [];
510 'IBLOCK_ID'=> $IBLOCK_ID,
512 'CHECK_PERMISSIONS' => 'Y',
515 'LEFT_MARGIN' => 'ASC',
517 $rsItems = CIBlockSection::GetList($arOrder, $arFilter, false, $arSelect);
518 while($arItem = $rsItems->GetNext())
520 $cache[$IBLOCK_ID][$arItem['ID']] = $arItem;
522 unset($arItem, $rsItems);
526 return $cache[$IBLOCK_ID];
529 public static function GetUIEntityEditorProperty($settings, $value)
const USER_TYPE_ELEMENT_LIST
static PrepareSettings($arProperty)
static GetOptionsHtml($arProperty, $values, &$bWasSelect)
static GetSettingsHTML($arProperty, $strHTMLControlName, &$arPropertyFields)
static GetPropertyFieldHtmlMulty($arProperty, $value, $strHTMLControlName)
static GetPropertyFieldHtml($arProperty, $value, $strHTMLControlName)
static GetUserTypeDescription()
bx popup label bx width30 PAGE_NEW_MENU_NAME text width
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)