<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true); // Function for order function sortArray($arSource, $arOrder, $arUserFields = Array()) { $arFirst = Array(); $arUserProps = Array(); if(count($arUserFields)) { foreach($arUserFields as $keyFiels=>$arField) { $arUserProps[] = $keyFiels; } } $arUsedFields = array_merge($arSource, $arUserProps); foreach($arOrder as $sField) { if(in_array($sField, $arUsedFields)) { $arFirst[] = $sField; foreach($arUsedFields as $keySource=>$sSource) { if($sSource == $sField) { unset($arUsedFields[$keySource]); } } } } $arResult = array_merge($arFirst, $arUsedFields); return $arResult; } // Set array of order fields $arOrder = Array( "NAME", "PERSONAL_PHONE", "EMAIL", "UF_PERSON", "PASSWORD", "CONFIRM_PASSWORD" ); // Order of array $arResult["SHOW_FIELDS"] = sortArray($arResult["SHOW_FIELDS"], $arOrder, $arResult["USER_PROPERTIES"]["DATA"]); |
template.php, на случай, если используются пользовательские поля:
... <?if(GetMessage("REGISTER_FIELD_".$FIELD)):?> <tr> <td><?=GetMessage("REGISTER_FIELD_".$FIELD)?>:<?if ($arResult["REQUIRED_FIELDS_FLAGS"][$FIELD] == "Y"):?><span class="starrequired">*</span><?endif?></td> </tr> <?endif;?> ... default: if(strstr($FIELD, "UF_")) { $arUserField = $arResult["USER_PROPERTIES"]["DATA"][$FIELD]; ?> <tr> <td> <?=$arUserField["EDIT_FORM_LABEL"]?>:<?if ($arUserField["MANDATORY"]=="Y"):?><span class="starrequired">*</span><?endif;?> </td> </tr> <tr> <td> <?$APPLICATION->IncludeComponent( "bitrix:system.field.edit", $arUserField["USER_TYPE"]["USER_TYPE_ID"], array("bVarsFromForm"=>$arResult["bVarsFromForm"],"arUserField"=>$arUserField,"form_name"=>"regform"), null, array("HIDE_ICONS"=>"Y"));?> </td> </tr> <? } else { if ($FIELD == "PERSONAL_BIRTHDAY") ... <?if($arResult["USER_PROPERTIES"]["SHOW"] == "Y" && false):?> |
Как формируется порядок полей штатно - я не нашел. Подозреваю, что он жестко прописан в ядре или компоненте.
В идеале, конечно, добавить в .parameters.php и как-то там указывать порядок, но пока не придумал, как лучше это сделать.
UPD1: Обновил код. Теперь в сортировке участвую пользовательские поля "UF_*". Для их сортировки в template.php нужно поменять код.